Forum: Mikrocontroller und Digitale Elektronik NXP P89LPC920 Bootloader


von Rolf (Gast)


Lesenswert?

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?

von R. W. (quakeman)


Lesenswert?

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

von Rolf (Gast)


Lesenswert?

>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.

von R. W. (quakeman)


Lesenswert?

Laut dem Buch von mir kann der interne Flash auch mit einzelnen Bytes 
beschrieben/gelöscht werden, nicht nur ganze Pages.

Ciao,
     Rainer

von Rolf (Gast)


Lesenswert?

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?

von R. W. (quakeman)


Lesenswert?

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
Noch kein Account? Hier anmelden.