Im Programmierdialog im Atmel Studio ist standardmässig eingestellt, dass der AVR vor dem Programmieren gelöscht wird. Ist bzw. warum ist das unbedingt notwendig?
Nun weil du ein neues Programm einspielen möchtest. Ich finde die Frage wirklich surreal ! Vielleicht pass dieses Gleichnis besser: Ich kann ja auch nicht Atmen ohne Lauft über die Lungen auf zunehmen.
Vielleicht ist die der technische Vorgang nicht bekannt. Schon beim EEprom Datenspeicher war es so, dass man erst mal alle Bits auf "1" stellen musste. Hier durch UV-Strahlung. Danach konnte man diese wieder auf "0" setzen. Für Flash Datenspeicher gilt das Vorgehen entsprechend. Alles Klar ?
Beim programmieren werden die Bits nur nach null geschaltet. Wenn bei dem bit einmal ne null drinsteht, dann wird daraus keine eins mehr, auch wenn du ne eins druberschreibst. Erst beim Löschen werden alle Bits kollektiv wieder auf eins gesetzt. Edit: zu spät
:
Bearbeitet durch User
J.P. schrieb: > Im Programmierdialog im Atmel Studio ist standardmässig eingestellt, > dass der AVR vor dem Programmieren gelöscht wird. > > Ist bzw. warum ist das unbedingt notwendig? Bei EPROM und Flash-Speicherzellen kannst Du nur 1-Bits auf 0 setzen, aber keine 0-Bits auf 1. Der Grund ist, dass 1 der ladungsfreie Zustand ist und beim Programmiervorgang selektiv Ladungen in die Speicherzelle hineingeschossen werden. Zum Zurücksetzen muss ein Löschzyklus ausgeführt werden - bei EPROM per UV-Licht, bei Flash elektrisch. Der Löschzyklus lässt alle gespeicherten Ladungen abfließen, und anschließend sind alle Bits wieder auf 1. Man kann prinzipiell auch mehrmals ein Byte programmieren und dabei jeweils weitere Bits von 1 auf 0 setzen. Das geht aber nur begrenzt, weil sonst die Lebensdauer der Zellen leidet. Im Datenblatt des jeweiligen Chips finden sich die Details. fchk
Ich denke, mit der Frage ist gemeint, ob man das alte Programm nicht einfach überschreiben kann, ohne es zu löschen. Auf einer Festplatte wird üblicherweise auch nichts gelöscht, sondern einfach überschrieben. Bei Flash Soeicher geht das nicht ganz so einfach. Beim Programmieren kann man Bits nur in eine Richtung kippen - typischerweise von Eins nach Null. Will man irgendwo eine Eins haben, muss die vorher schon da stehen. Die Einsen erhält man beim löschen (leerer Flash -> alle Bytes 0xFF). Und das funktioniert typischerweise nicht byteweise, sondern nur in größeren Arealen (Pages). Es würde also reichen, statt den ganzen Flash zu löschen, nur die Pages zu löschen, die das neue Programm belegen soll. Stattdessen alles zu löschen ist halt einfacher, man muss weniger nachdenken. Und soweit ich weiß, geht es nicht auf die Lebensdauer des Flash, wenn eine vorhanden Eins gelöscht wird (es wird ja wieder Eins draus). Wenn du den Flash von "innen" programmierst, also z.B. per Bootloader, kannst du sehr wohl bestimmen, welche Pages du löschen willst, und welche nicht. Edit: Hm, wieder viel zu langsam...
:
Bearbeitet durch User
Weil es ein Flashspeicher ist. Die kann man nicht einfach überschreiben. Vereinfacht gesagt: Von 0 nach 1 ist technisch ein anderer Vorgang als von 1 nach 0. Das Schreiben / Programmieren kann nur in die eine Richtung "kippen". Das löschen geht in die andere "Richtung". Also löscht man vorher alle Bits und kippt erst danach beim Programmieren die passenden bits. Würde man vorher nicht löschen, sieht es so aus als hättest du zweimal auf das selbe Blatt Papier geschrieben. Das ergäbe nur Kauderwelsch. Man könnte nun sagen: Ist mir doch egal wenn die Vorgänge 0->1 und 1->0 technisch unterschiedlich sind. Das soll man hinter dem Interface verbergen. Das wird teilweise auch so gemacht, auf highlevel/Softwareebene. Das bringt aber riesige Nachteile mit sich. Man kann beim Schreiben einzelne Bits kippen. Beim Löschen werden aber größere Sequenzen gelöscht, Blöcke, ganze Chips... wie auch iimmer die Unterteilung ist. Man müßte also vorher immer den Block Zwischenpuffern, die Daten im Puffer Modifizieren, den Block löschen und dann die Daten erneut schreiben. Das bringt weitere Nachteile mit sich. Damit kann man Bücher fülllen. Da ist es oft sinnvoll die Natur des Speichers nicht immer hinter einem Interface zu verbergen und die Unterschiedlichen Vorgänge Löschen und Schreiben auch unterschiedlich zu belassen.
Bis auf den ersten Antworter: Danke an alle, das wollte ich wissen! Schoenes Wochenende!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.