Hallo
Ich habe einen bootloader, der eigentlich ganz gut funktioniert
(bisher), nun habe ich ein Gerät, das schon verbaut worden ist (komme
nur mehr sehr schwer drann)
Bei dem Gerät sehe ich ob es läuft oder nicht - wenn es sich einschaltet
schickt es einen Start Text "starting" an einen PC, und sobald es läuft
wird auch ein Relais mit Lüfter gestartet.
Nun wollte ich dieses Gerät neu flashen - dazu habe ich auch einen neuen
startext "starting*v2"
wenn ich mir das bin file anschaue sehe ich nur ehr den "starting*v2"
und das "starting" gar nicht mehr drinnen.
Dann starte ich den flasher für den bootloader
nach ein paar sekunden wird paket 1 übertragen - im bootloader wird
immer geprüft ob die ClientID passt und die CRC passt, wenn alles
richtig ist, wird die Page geflasht - und ich sehe eine Rückmeldung, und
darauf hin wird das näcshte paket geschickt
bis zum schluß, dann wird dem bootloader mitgeteilt, er kann die App
starten.
Ich höre das ganze auch am Lüfter, während des flashen (Wenn ich da
abbreche und lange warte) geht der lüfter aus
Sobald die App dann startet, geht der Lüfter an
ABER es startet die alte App (ich sehe nach wie vor "starting")
Ich habe da kein Fallback oder so, mit alter neuer Firmware ...
irgendwas geht da beim flashen schief
Ich habe hier das ganze nochmal in der testumgebung, da funktioniert
alles ohne probs ....
Wo kann ich da einen Fehler suchen?
das ist die flashroutine
1 | static void flash_page (void) {
|
2 | #if SPM_PAGESIZE < 256
|
3 | uint8_t i;
|
4 | #else
|
5 | uint16_t i;
|
6 | #endif
|
7 |
|
8 | uint16_t page = funkloader_buf[2] * SPM_PAGESIZE;
|
9 |
|
10 | eeprom_busy_wait();
|
11 |
|
12 | boot_page_erase(page);
|
13 | boot_spm_busy_wait();
|
14 |
|
15 | for(i = 0; i < SPM_PAGESIZE; i += 2) {
|
16 | /* Set up little-endian word. */
|
17 | uint16_t w = funkloader_buf[3 + i];
|
18 | w += funkloader_buf[4 + i] << 8;
|
19 |
|
20 | boot_page_fill (page + i, w);
|
21 | }
|
22 |
|
23 | boot_page_write (page);
|
24 | boot_spm_busy_wait();
|
25 |
|
26 | /* Reenable RWW-section again. */
|
27 | boot_rww_enable ();
|
28 | }
|