Belegt der Bootloader die oberen 256Byte (0700 - 07FF) oder 512Byte (0600 - 07FF) des FLASH-Bereiches? Dann steht da noch im User Manual, dass generell auch der Bereich von FF00 - FFFF "okupiert" wird. Ich werde aus dem Datenblatt nicht ganz schlau. Kann mir jemand das genaue Verhalten erklären, ich brauche jedes Byte?
Die Beschreibung im Datenblatt ist wirklich etwas unverständlich. Ich habe eben mal in einem Buch zu den LPC900 nachgelesen. Dort wird das ganze etwas verständlicher erklärt. Der Controller besitzt einen 256Byte großen IAP-BootFlash, welcher die eigentlichen Programmierroutinen besitzt und vom Benutzer überhaupt nicht überschrieben werden kann. Dieser Bereich liegt im Adressbereich 0xFF00-0xFFFF. Dieser Bereich braucht dich also gar nicht zu interessieren. Interessanter dagegen wird es bei dem ISP-Bootloader. Dieser belegt 512 Byte und befindet sich am oberen Ende des internen Flahs Speichers. Somit liegt er im Adressbereich 0x600-0x7FF. Diesen Bereich solltest du also freihalten, insofern du den ISP Bootloader zum flashen benutzen willst. Falls du per Programmiergerät oder ICP oder mit selbst geschriebenen Software-Routinen (per IAP) den Flash programmieren willst, kannst du diesen Bereich natürlich auch für dein eigenes Programm verwenden. Ich hoffe ich konnte dir damit etwas weiterhelfen. Ciao, Rainer
>Der Controller besitzt einen 256Byte großen IAP-BootFlash... Dieser >Bereich liegt im Adressbereich >0xFF00-0xFFFF. Jetzt wird mir der Zusammenhang klar. Dort liegen die Routinen, z.B. zur Programmierung von einzelnen Flash-Zellen, wie hier:
1 | //**********************************************************************
|
2 | //* flash_write_byte()
|
3 | //* Input(s) : Memory address to write to.
|
4 | //* Returns : bit, flash write succes or fail.
|
5 | //* Description : write databyte to flash
|
6 | //**********************************************************************
|
7 | bit flash_write(char addresshigh, char addresslow, char databyte) |
8 | {
|
9 | FMCON = LOAD; // set up load command |
10 | FMADRL = addresslow; // set up low databyte |
11 | FMADRH = addresshigh; // set up high databyte |
12 | FMDATA = databyte; // set up databyte |
13 | FMCON = ERASEPROGRAM; // erase program command |
14 | if (FMCON&0x8F) return FAIL; else return OK; |
15 | }
|
In dem Zusammenhang steht noch eine Verständnisfrage: Wenn ich es richtig verstehe, ist eine Page 64 Byte groß. Um ein einzelnes Byte zu programmieren, wird immer automatisch eine Page gelöscht und dann neu beschrieben. Um die nicht betroffenen Bytes der Page in Ruhe zu lassen, müssten die 64 Byte ja irgendwo zwischen gespeichert werden. Wo passiert das, doch nicht etwa im interen RAM? >Interessanter dagegen wird es bei dem ISP-Bootloader. Dieser belegt 512 >Byte und befindet sich am oberen Ende des internen Flahs Speichers. >Somit liegt er im Adressbereich 0x600-0x7FF. Ich benutze Fashmagic über die Uart, was auch funktioniert. Der Bootloader darf nicht gelöscht werden.
Laut dem Buch von mir kann der interne Flash auch mit einzelnen Bytes beschrieben/gelöscht werden, nicht nur ganze Pages. Ciao, Rainer
ja, das geht. Man kann während der Laufzeit jedes Byte (auch einzeln) des Flash neu programmieren. Dauert ca. 4ms pro Page. Der MC geht dabei kurz in IDLE-Mode und kommt anschließend automatisch wieder zurück. Was ist das für ein Buch?
Das Buch ist von http://www.c51.de/c51.de/Dateien/LPC900.php und behandelt speziell die LPC900 samt aller Eigenarten und ich bin damit sehr zugrieden. Ich habe auch noch zwei weitere Bücher von dieser Webseite die ebenfalls sehr gut sind.
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.