Forum: Mikrocontroller und Digitale Elektronik Wie man sich mit der Appnote AVR109 das Bein wegschießt...


von Daniel B. (khani)


Lesenswert?

Hallo Leute,

falls irgendwer mal die AppNote AVR109 ("self programming") und eine
terminalartige Implementierung auf dem UART verwenden will, der wird
meine kleine Kurzgeschichte hier sicher inetressant finden. Alle
anderen sind eingeladen über mich zu lachen oder ihre eigenen Erfahrung
zur allgemeinen Belustigung zu posten.

Ich verwende als Bootloader eine Implementierung der AppNote AVR109 auf
einem ATmega32. Diese habe ich an den GCC angepasst, denn ich besitze
keinen IAR-Compiler. Dieser Bootloader programmiert den Mikrocontroller
mit Daten, die er von der seriellen Schnittstelle erhält.

Im normalen Betrieb meines Projektes läuft auf der seriellen
Schnittstelle ein Programm, welches eine Art Terminal fährt (übrigens
der ATmega32 hat nur eine serielle Schnittstelle). Das Terminal
unterstützt verschiedene kleine Befehle, die im Zusammenhang mit meinem
MP3-Playerchip (VS1003) und einer ATA-Festplatte stehen. Das sind solche
Kommandos wie "pl bla.mp3" zum Abspielen von Musikdateien oder "md
gurks" zum Erstellen neuer Verzeichnisse auf der FAT der Festplatte.
Jetzt kommt der Clou : Es gibt auch den Befehl "ls" (Linuxern
bekannt), welcher den Verzeichnisinhalt des aktuellen Verzeichnisses
ausgibt.

Den Befehl "ls" verwende ich gerne, um zu testen, ob noch Funktion
vorhanden ist, denn der ist schnell eingetippt und zeigt, ob alles noch
im Lot ist. Neulich habe ich dann meinen Aufbau eingeschaltet und
natürlich "ls" eingegeben - das hatte leider nicht funktioniert.
Ausgabe war nicht vorhanden. OK, also im Bootloader-Modus neu gestartet
und mit dem Bootloader den Flashinhalt ausgelesen. In der Datei stand
nur noch Bockmist ! Nun gut, dann habe ich versucht mit dem Bootloader
den Chip (bis auf den Bootloader, der durch die entsprechende Fuse
geschützt ist) zu löschen und neu zu programmieren - ging auch nicht !
Das ist alles sehr toll. Zum Glück habe ich den ganzen Aufbau auf einem
Steckbrett. Also die SPI-Schnittstelle abgeräumt und den
Ponyprog-Adapter drangehängt.
Beim Auslesen des chips stand auch ganz brav das Porgramm wie es
sollte. Nur bei den Lockbits gab es neue Erkenntnisse : Diese sagten
nämlich plötzlich aus, dass man mit dem Bootloader nicht mehr auf den
chip zugreifen kann ! Woher kommt's ?
Ganz einfach : Der Bootloader nach AVR109 verwendet den Befehl "l"
zuim Schreiben der Lockbits. Der Buchstabe "s" steht geschickterweise
dafür, dass ab nun keine Zugriffe vom Bootloader auf die Application
Section mehr möglich sind. Toll ! Um die Lockbits zu löschen muss man
den chip via serial programming löschen und anschließend den Bootloader
wieder ebenso aufspielen. Dann kann die normale Arbeit weitergehen. Wenn
ich den chip schon eingelötet hätte, dann hätte ich ganz schön alt
ausgesehen !

Die Moral von der Geschichte : Wenn man einen Bootloader mit
Lockbits-Support verwendet und auf der selben Schnittstelle
aplhanumerische Kommunikation abfährt, dann sollte man lieber gut
aufpassen, das man sich nicht per Unfall aussperrt. Bei einer gelöteten
Platine kann so was etwas unangenehm sein !

Um eine Erfahrung reicher, hoffe ich, dass meine Erzählung andere
amüsiert oder vielleicht ein kleines bißchen inspiriert.

Ansonsten viel Spaß.

MfG, Daniel

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

Was hälst Du von folgendem Ablauf?

1. Einschalten oder Reset
2. Bootloader für 5s aktiv, danach inaktiv wenn keine Daten kommen
3. Terminal starten

Dann kannst Du mit Deinem Terminal den Bootloader nicht mehr
"fernbedienen" ;)
Der einzige Nachteil: um wieder in den Bootloader zu gelangen musst Du
einen Reset druchführen.

von Daniel B. (khani)


Lesenswert?

Hallo OldBug,

genau so etwas habe ich mit "aufpassen" gemeint ;-). Bei mir sieht
"aufpassen" nun so aus, dass das Protokoll des Bootloaders leicht
abgeändert wurde, um solche Probleme zu vermeiden. Wenn man die
Steuerzeichen der Taste aus dem alphnumerischen Bereich herausnimmt,
dann ist das Problem schon verkleinert.
Ich wollte auch mehr eine interessante Erfahrung hier präsentieren, als
die saubere Lösung oder den Schrei nach Hilfe zu artikulieren.
Vielleicht gilt der Satz zum Lernen ja noch
"Es gibt drei Arten etwas zu lernen :
aus den Fehlern Anderer - das ist am angenehmsten,
durch Nachdenken und Arbeit - das ist am anstrengensten
aus eigenen Fehlern - das ist am härtesten, hält aber auch am
längsten."

Wenn auf diese Art jemanden den ersten Weg eröffnen und den dritten
ersparen konnte, dann ist der Zweck erfüllt ;-).

MfG, Daniel

P.S.: Trotzdem ein sinnvoller und praktikabler Hinweis.

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.