- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Einzelnes Byte in den Flash-Speicher schreiben

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716

    Einzelnes Byte in den Flash-Speicher schreiben

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    gibt es die Möglichkeit ein einzelnes Byte in den Flash des AVR zu schreiben? Die Speicherzelle hat den Wert 0xFF und sollte somit gelöscht sein. Wie wäre die Vorgehensweise eine einzelne Zelle zu beschreiben anstatt einer ganzen Page?

    Viele Grüße,
    Andreas

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    ob das konkret beim Atmega (ich denke mal das meinst du weil AVR der name der ganzen familie ist) kann cih leider nciht exakt sagen ohne den controller zu wissen und das datenblatt zu prüfen

    aber generell gesprochen, kannst du beim schreiben von flash speicher nur eine 1 zu einer 0 machen aber niemals umgekehrt, also wenn das byte 0xFF ist ist ein einmaliges beschreiben ohne löschen zumindest theoretisch möglich

    da es aber auch ziemlich sinnlos ist(üblicherweise), gehe ich fast davon aus dass es schon rein technisch nicht möglich ist ein byte bei atmegas einzeln zu beschreiben
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo Ceos,

    sorry ich habe vergessen zu schreiben, dass es sich um einen AT90CAN64 handelt. Ich habe mir inzwischen die Funktion selbst geschrieben. Diese liest die Page aus dem Flash aus und schreibt diese dann mit geändertem Byte komplett nochmal. Der einzige Nachteil ist: Das ganze benötigt 256 Byte SRAM für den Buffer. Es scheint aber keine andere Möglichkeit zu geben.

    Warum ich das ganze brauche? Eigentlich sollte es nicht der Fall sein. Wie du im anderen Thread gelesen hast schreibe ich einen Bootloader. Dieser empfängt via CAN das Programm und flasht es. Das ganze funktioniert mittlerweile. Es kommt aber vor, dass eine Speicherstelle nicht geschrieben wird. Ich arbeite mit vielen Checksummen und Zählern bei der Datenübertragung und kann sicher sein, dass die Daten korrekt ankommen.

    Es scheint beim aufruf von boot_page_write_safe selten eine Stelle der Page auf 0xFF zu bleiben. Ich kann mir das nicht erklären, konnte aber mit dem Workaround beim verify die Stelle "nachzuschreiben" das Problem lösen.

    Viele Grüße,
    Andreas

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Das ganze benötigt 256 Byte SRAM
    du ließt die page aus dem flash in den NVM buffer, manipulierst das eine byte dort im buffer und lässt den buffer zurückschreiben, du musst nichts in den RAM packen meine ich ... soweit ich mich entsinnen kann ist das sogar das vorgehen wenn man das mit dem ASF im Atmel Studio macht

    ein CAN bootloader ... haha zu köstlich, das gleiche habe ich auch gemacht

    Ich habe allerdings einen mini CANOpen stack samt eigener protokoll logik komplett in die boot sektion gepackt, man sendet einen bestimmten befehl an die alte applikatuion, der im eeprom eine CRC32 löscht ... diese CRC32 wird mit der standard application ROM CRC funktion berechnet die atmels compiler auch nutzt (steht u.a. in der AVR Doku mit drin)

    ich compile also das programm, speichere die CRC als textdatei für die firmware mit ab und lade den bootloader in das gerät ....

    der bootloader startet und prüft 2 sachen, zum einen ob der forced boot pin high ist (eine art notfallsignal) und er berechnet die CRC über den application ROM und prüft ob die errechnete CRC mit der CRC im EEPROM übereinstimmt

    stimmt die CRC nicht oder ist das signal gesetzt, bleibt er im bootloader, bis ich einen befehl schicke in die applikation zu springen

    in der applikation habe ich dann einen bestimten befehl, mit dem ich die CRC wieder setzen kann(entweder aus der datei bei der endkontrolle oder die applikation rechnet die CRC selber aus oder ich nehme sie aus dem binary file, je nachdem was besser ist). so ist sichergestellt dass die applikation wenigstens ordentlich startet eh ich den controller in eine bootlschleife hänge
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Ähnliche Themen

  1. Pic Mikrocontroller + externer Flash-Speicher
    Von clauszoechling im Forum PIC Controller
    Antworten: 15
    Letzter Beitrag: 29.08.2013, 15:23
  2. Schnellster Flash-Speicher
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 03.08.2013, 13:20
  3. Flash-Speicher Schreibzyklen
    Von Bumbum im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 09.12.2012, 09:20
  4. Speichern in den Flash-Speicher
    Von Ruppi im Forum Assembler-Programmierung
    Antworten: 6
    Letzter Beitrag: 05.11.2008, 22:35
  5. Einzelnes Bit in Byte ansprechen
    Von httpkiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 26.02.2005, 15:42

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen