Moin.
Ich versuche gerade für eine Anwendung Codestücke zusammenzustellen, mit
der man den internen Flash des XC2287 löschen/neu beschreiben kann.
Im Anhang sind die bisherigen Befehle; Die Zugrifssequenzen sind
(hoffentlich richtig) aus dem Datenblatt übernommen.
Schon mal die erste Frage: Hat eine gelöschte Page überall den Wert 0x00
oder 0xFF? Bei den Atmels ist der gelöschte Flash ja 0xFF; sag ich hier
Erase, ist die Page komplett 0x00.
Neue Daten (mit der folgenden Befehlssequenz) kann ich dann nur in Pages
schreiben, in denen vor dem Erase schon Daten waren.
1 | // Array 0, Sector 0, Page 1
|
2 | ui32_t pagetestaddr = FLASH_GetPageAddress(0, 0, 1);
|
3 |
|
4 | FLASH_PageErase(pagetestaddr);
|
5 | FLASH_EnterPageMode(pagetestaddr);
|
6 | for (pagedata = 0 ; pagedata < 64 ; pagedata++)
|
7 | {
|
8 | FLASH_LoadPageWord(pagetestaddr, 0xAA55);
|
9 | }
|
10 | FLASH_ProgramPage(pagetestaddr);
|
Vergleiche ich den "alten" Inhalt mit dem, was eigentlich drinstehen
sollte (0xAA55), dann sieht das so aus:
(Oben vor dem Erase, unten nach dem neu beschreiben)
4AB5 B5B5 881A 0302 F0E6 8220 881A 0303 F0E6 8240 881A 0300 F0E6 8200
F9E6 00C1 F8E6 063E 18F0 1970
0A15 A015 8810 0200 A044 8200 8810 0201 A044 8240 8810 0200 A044 8200
A844 0041 A844 0214 0850 0850
Kennt jemand dieses Problem bzw. weiss, was ich da übersehen hab?
mfG