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