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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.