Hallo, hat sich schonmal jemand mit dem Befehl aus dem HAL "write_program_memory(adresse,quelle,anzahl) auseinander gesetzt? Ich habe gestern mit einem 18F4680 (65kb Flash) damit herumgespielt und den Flash Speicher zurückgelesen ob er richtig arbeitet. Was der Befehl kann: Er schreibt an jede beliebige gerade und ungerade Adresse einen bis zu 256 Bytes langen Satz Daten ins Flash. Was ich noch nicht verstehe ist folgendes: -Das Flash ist doch 16 Bit organisiert beim 18F4680, also kann ein Zugriff imer nur 16 Bit lesen, oder? Ist es so? 0x0000 = 0x1234 0x0001 = 0x2345 oder so: 0x0000 = 0x1234 0x0002 = 0x5678 -Das Flash ist 64 Bytes schreibar und löschbar, es kann immer nur an einer Blockgrenze angefangen werden und immer nur 64 Bytes auf einmmal. -Das Flash muss vor dem Beschreiben gelöscht werden. Wie schafft diese Funktion also das was sie kann? Ich bin da wirklich erstaunt? Gruss, Christian
Christian J. wrote: > -Das Flash ist 64 Bytes schreibar und löschbar, es kann immer nur an > einer Blockgrenze angefangen werden und immer nur 64 Bytes auf einmmal. > > -Das Flash muss vor dem Beschreiben gelöscht werden. > > Wie schafft diese Funktion also das was sie kann? Ich bin da wirklich > erstaunt? Wie würdest Du denn so eine Funktion schreiben? Man liest einen 64Byte-Block in einen Puffer im SRAM aus, ändert die Bytes, die geändert werden sollen, löscht den Flashblock und schreibt den Puffer wieder zurück. Bibliotheksfunktionen sind ganz normale Programme, die mal einer geschrieben hat. Du kannst ja mal nach dem Funktionsaufruf den Daten-Stack auslesen, da muß irgendwo der letzte geschriebene 64Byte-Block drinstehen. Peter
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.