www.mikrocontroller.net

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


Autor: Daniel Braun (khani)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Braun (khani)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.