Forum: Mikrocontroller und Digitale Elektronik Nur FLASH beschreiben bei PonyProg


von anton (Gast)


Lesenswert?

Hallo zusammen,

ich benutze PonyProg zum Brennen von meinen Programmen in einen Mega16,
und bin heute auf ein Problem gestossen. Und zwar, wie es in der Hilfe
von PonyProg steht, ist der Programmspeicher alleine nicht beschreibbar
bei AVR's, hier Zitat:

"...The exception is the AVR device: to write the program memory an
erase is needed, so the data memory is erased too."

Das hat mich ein winig gewundert, weil ich an einem Datenlogger
rumbastle und mir jeder EEPROM-Zugriff wert ist.

Gibt es vielleicht irgendwelche Tricks oder andere Programmer, die bei
AVR's nur den Programmspeicher beschreiben können oder ist es
grundsätzlich nicht möglich?
Was ist mit avrdude?

von Hauke Radtki (Gast)


Lesenswert?

hm also ich wüsste nicht, dass man den flash nicht ohne erase
beschreiben kann ... bei mir gings auch immer ohne (oder ponnyprog
macht das einfach eigenwillig, ohne dass man es angeklickt hat) teste
doch einfach mal: schreib irgendwas ins eeprom, dann flasht du beim 2.
mal ein programm, dass dir z.b. über die serielle schnittstelle die
daten ausgibt, wenn dann ichts ankommt, wird der eeprom mitgelöscht!
Aber für nen datenlogger würde ich eh nen externes eeprom benutzen!

von anton (Gast)


Lesenswert?

Danke, das war eine schnelle Antwort! :)

Also wenn ich meine HEX-Datei in PonyProg öffne ("öffne Device
Datei") und den Button "Schreibe Programmspeicher(FLASH)" anklicke,
sollte eigentlich nur der Programmspeicher (im Hauptfenster grün
dargestellt) und nicht der Datenspeicher (blau dargesstellt ganz unten)
geschreieben werden.

Nach dieser Aktion laufen meine Programme aber nicht mehr. Es werden
nur paar komische zeichen ausgegeben.

Also ich gehe davon aus, dass die beiden Speicher zusammen beschrieben
werden müssen, selbst wenn nur der Code geändert wurde.

von Christoph Wagner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.

Bei der Betrachtung deines Problems muss die Physik des Speichers
berücksichtigt werden :

Eine Speicherzelle kann nur programmiert oder gelöscht werden.
Programmieren heißt dabei, sie von 1 auf 0 zu setzen. Durch das Löschen
wird sie wieder auf 1 gesetzt. Programmiert man eine Zelle mehrmals, so
wird sie vor jedem Schreibgang nicht gelöscht, sondern nur
überschrieben. Im Endeffekt wird dabei ein AND durchgeführt.
Eingespeichertes Bit AND neues Bit ergibt geschriebenes Bit. Ein
Beispiel :

Vorher     : 11110000
Neues Byte : 10101010
Nachher    : 10100000

Somit muss für einen erfolgreichen Schreibvorgang eine Zelle stets
gelöscht werden, bevor sie geschrieben wird. Dies wird durch den
Chip-Erase erreicht. Da das Löschen einige Zeit in Anspruch nimmt
(einige ms) werden bei Classic-AVRs alle Zellen auf einmal gelöscht
(Zeitersparnis), durch den Chip-Erase. Wen du dir das genauer anschauen
willst, sieh in das Kapitel "Memory programming" im Datenblatt des
jeweiligen AVRs nach.

Bei den AVRs besitzt nur der EEPROM einen Auto-Erase. Somit muss bei
der AT90Sxxxx-Reihe (Classic-AVRs) der Flash vor dem Programmieren
gelöscht werden. Dies kann aber nur durch einen Chip-Erase gemacht
werden. Somit führt PonyProg vor dem "Alles Schreiben" befehl einen
Chip-Erase aus -> alles funktioniert.

Die Option "Nur Flash schreiben" ist für die Geräte der ATMEGA-Reihe
vorgesehen, die Selbstprogrammierbar sind und demzufolge eine
Speicherzelle selbst neu beschreiben können (incl. Löschen). Dort ist
ein Schreibvorgang ohne Chip-Erase möglich. Die ATMEGAs bieten
ebenfalls eine EEPSAVE-Fuse, die den EEPROM vor dem Löschen bewahrt,
was den Chip-Erase effekt auf Flash-Erase reduziert. (Ich bin mir nicht
sicher, aber ein paar der Classic-AVRs könnten auch schon diese Fuse
haben).

Somit liefen auch deine Programme nicht, da im FLASH alter Code AND
neuer Code geschrieben wurde. Für den EEPROM gibt es nur eine
Möglichkeit : EEPROM lesen, dann erst Alles schreiben. Somit bleibt der
EEP garantiert erhalten.

Beim EEPROM wird vor dem Schreiben die einzelne Speicherzelle gelöscht,
ohne das andere beeinflusst werden. (darum dauert das auch wesentlich
länger.

Intel hat einmal eine kurze Zusammenfassung der FLASH-Technologie in
ein PDF-gepackt (siehe Anhang). Dort steht genau drin, wie Flash
funktioniert, und warum nur Löschen und Programmieren möglich ist, und
nicht Schreiben nach logischem Wert.

Nachtrag : Bei den ATMEGAs werden erst eine bestimmte Anzahl Bytes in
einen Seitenpuffer geschrieben, und dieser dann auf einmal
Programmiert. Daher geht das Programmieren bei den MEGAs wesentlich
schneller as bei den Classics, da nicht 128x sondern nur 1x 4,5ms
gewartet werden muss, bis die Zelle gespeichert wurde.
<haarspalt>
Somit ist die Speciherorganisation des ATMEGA16s eigentlich nicht
8192x16 sondern 128x2048.
</haarspalt>

In der Hoffnung dir weitergeholfen zu haben freunliche Grüße versendend
...

ein müder Christoph Wagner ;-)

von Reiner (Gast)


Lesenswert?

EESAVE programmieren. In Ponyprog (Security and Configuration bits)
EESAVE anklicken. Dann bleibt das EEPROM erhalten.

Reiner

von anton (Gast)


Lesenswert?

vielen Dank für die Infos,
und mit EESAVE werd ich heute abend ausprobieren.

anton

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
Noch kein Account? Hier anmelden.