Hallo Ich habe ein Problem Ich möchte beim Abfallen der Versorgungsspannung noch schnell ein struct von 10bytes im Flash ablegen. Ich verwende einen MEGA32L und ein Ablegen im EEPROM würde über 80ms dauern - inakzeptabel. Ich habe viel gelesen über flash, pagesize, clear before write, RWW, NRWW, LockBits und so weiter. Jetzt bin ich total verwirrt und weiss gar nicht mehr, was ich machen soll. Gibt es vielleicht lib-funktionen zum lesen UND schreiben kompletter pages zur Laufzeit ? Das ganze sollte wie gesagt sehr schnell gehen. Unter 10ms wäre gut. Ich verwende WinAVR. Kann mir bitte jemand weiterhelfen. Danke GjB
wenn es nur um diese kleinen daten ins eeprom zu schreiben kannst du eine diode in die VCC haenngen mit einem 100µF Kondensatur Paralel zum µC das reicht dicke um eine Sekunde die Stromversorgung zu erhalten ok du hast dann nicht 5V sondern 4,2V am AVR koenntest aber ueber die Spannungsversorgung ausgleichen (auf 5,6V hochschrauben) ich denke, dass es laennger dauert was im flash zu loeschen und zu schreiben, als ins eeprom was zu schreiben gruss jens
Hallo und danke für die schnelle Antwort. Nach meinem Datasheet dauert es 8,5ms pro byte im EEPROM. Gemessen hab ich ca 8ms. Desshalb die 80ms, die ich oben erwähnte. Das Löschen einer Page im Flash soll etwa 4,5ms dauern, und das neu beschreiben nochmal. Macht zusammen 9ms um 128 bytes abzulegen. Daraus wollte ich einen Ringspeicher machen und jehweils 16bytes zu reservieren. Aber dazu muss ich eben zur Laufzeit flash lesen und schreiben können. Bitte dabei um HILFE ! Danke GjB
So wirklich im Flash gespeichert werden "muss": Flash im AVR ist nur seitenweise wiederbeschreibbar (garantiert "nur" 10000 mal). Was funktionieren sollte, ist read-modify-write bezogen auf eine Seite. Flash-Schreib-Code muss bei den meisten AVRs in der Boot-Loader-Section abgelegt sein (so auch beim ATmega32). Diverse Bootloader-Codes sollten Hinweise geben. Siehe auch avr-libc/boot.h, AppNote AVR105, AppNote AVR106.
Du wirst dich wohl oder übel mit dem Datenblatt anfreunden müssen. In <avr/boot.h> findest du ein paar Support-Makros für den Zweck. Wenn mich aber jetzt nicht alles täuscht, darfst du ausschließlich aus dem Bootloader-Bereich heraus schreiben und der muss auch als solcher aktiviert sein -> daher meine Bemerkung, dass das nicht ohne gründliches Studium des Datenblatts geht. Die entstehende Applikation dürfte einiges aufwändiger werden als das, was du bislang schon hast, da du zwischen bootloader und application area hin und her springen musst. Das erfordert eine gewisse Beschäftigung mit memory sections und den dafür notwendigen Kommandozeilen-Parametern. Falls du Freund der Simulation im AVR Studio bist, kannst du das hier auch knicken -- AVR Studio kann nur die Standard-Sections (.text, .data, .bss) benutzen. Wahrscheinlich bist du mit einer Goldcap und dem EEPROM deutlich einfacher dran.
Ich habe mir den MSP 430 JTAG-Programmer zugelegt. Damit lassen sich die Programme die mit IAR-System Embedded Workbench Version 2.31 problemlos mit Hilfe des C-Spy flashen. Die gleiche Applikation mit dem IAR-Embedded Workbench 4.0 compiliert und gelinkt verursacht allerdings beim flashen mit dem C-Spy die Fehlermeldung: "Overlapping segments around adress 0, segment Memory." Mit dem JTAG-Emulator lässt sich das Programm jedoch problemlos flashen. Hat irgendjemand eine Idee woran das liegen könnte? Danke Bernhard
Hi gjb, schau Dir mal die Atmel App-Note AVR105 an: "Power efficient high endurance parameter storage in flash memory" Das behandelt genau Dein Thema. Gruß, Stefan
Versuch doch mal folgendes: im Zweig der Stromversorgung nach dem Gleichrichter eine Diode in Reihe. Nach der Diode die Siebung, stabilisierung usw. Aber zwischen Gleichrichter und Diode ein Reihenwiderstand und eine Z-Diode nach Masse. Dort hast du während des normalen Betriebes beide Halbwellen, die z. B. einen Timerresetten können. Wenn ein Überlauf stattfindet, Daten sichern und gut. Der Vorteil: den Siebelko etwas dicker dimensionieren, alle Spannungspegel bleiben erhalten. MW
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.