Forum: Mikrocontroller und Digitale Elektronik Programm spinnt nach Bootloader


von Miles (Gast)


Lesenswert?

Hallo Leute,

ich beschreibe kurz den Aufbau:

Ein Master-Controller (Meg640) mit mehreren SPI Slaves.

Der Master-Controller programmiert die SPI-Slaves (Mega8) per ISP und 
trägt dafür ab einem offset (0xa000 für typ1 und 0xc000 für typ2) die 
software für die Slaves in sich.

Hat bis jetzt auch alles so weit wunderbar funktioniert!

Jetzt hat allerdings der Master einen bootloader bekommen (4096W, also 
Start bei 0xe000)

Jetzt funktioniert das programmieren eines SPI-Slaves auf einmal nicht 
mehr, wenn der Bootloader mit im Flash steht!

Kurios:  Software mit Bootloader und ohne Bootloader via avr studio aus 
dem atmega640 ausgelesen: Exakt identisch (diff) bis zu 0xe000, da fängt 
bei dem mit bootloader eben der bootloader an, beim anderen nur noch 
0xff.


Gut, dachte ich mir: Alles klar, der Bootloader setzt irgendwelche 
Einstellungen, blockiert irgendwelche Interrupts, irgendwas ist auf 
jeden fall am Zustand anders nach einem bootloader->application jump.

Also: BOOT-RST Vektor rausgenommen und die software mit bootloader im 
flash per isp in den master geladen... Gleicher Fehler...


Auch klasse:

Zuerst wird immer die SPI slave software verifiziert, falls unterschiede 
zu der im master bestehen -> Flash

Wenn die SPI slave software von anfang an richtig ist, funktioniert es 
mit beiden Versionen der master software. also ein verify klappt.

Nur wenn sie sich unterscheidet und versucht wurde zu programmieren 
stimmt sie bei der normalen master version danach überein. Bei der 
master version mit bootloader stimmt sie sofort nicht überein.


Wenn das nicht komisch ist....^^

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Hat der Bootloader vllt einfach nur die eine Software überschrieben, 
weilse zu weit hinten im Flash des Masters stand?

von Miles (Gast)


Lesenswert?

Das dachte ich auch, deshalb hab ich ja extra beide versionen aus dem 
controller ausgelesen und miteinander gedifft.

Normale applikation:  0x0000 - 0x8000
Slave1:               0xa000 - 0xb300
slave2:               0xc000 - 0xd100
bootloader:           0xe000 - 0xf300


Nut die Bootloader sektion unterscheidet sich bei beiden varianten. Also 
einmal nur 0xff, einmal steht der bootloader drin.

Und selbst wenn was überschrieben gewesen wäre: es wird byte weise 
verglichen, bei unterschied komplett programmiert, danach byte weise 
verglichen.  Dann würde einfach eine nicht funktionierende software im 
slave stehen.

Abgesehen davon:  Eine mit der ISP version richtig programmierte 
Slave-Software wird anstandslos korrekt verifiziert! ^^

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.