Forum: Mikrocontroller und Digitale Elektronik AVR - Bootloader flasht nicht


von sn00py (Gast)


Lesenswert?

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
}

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.