Tiny Safe Boot integration
Bei Tiny Safe Boot (TSB) handelt es sich um einen sehr kleinen Bootloader (~ 512 Byte), der sogar auf ATtinys eingesetzt werden kann. Der riesige Vorteil gegenüber dem flashen per ISP besteht in der Anzahl der Leitungen, die für die Programmierung und das Debuggen nötig sind: Es müssen nur RX, TX und GND des "Programmiergerätes" mit dem Standalone Chip verbunden werden. Wenn auf den Standalone Chip einmalig der Bootloader gespielt wurde bleiben viele freie Pins, die man für andere Zwecke einsetzen kann. Der von Julien Thomas erstellte Bootloader, der für über 100 verschiedene AVR Prozessoren geeignet ist, wird von Ihm sehr ausführlich in Englisch und Deutsch auf seiner Homepage beschrieben. Die Lektüre lohnt sich besonders für fortgeschrittene Bastler, da die Einsatzmöglichkeiten recht groß sind. Für mich als Einsteiger auf dem Gebiet war ich besonders dankbar für ein konkretes Beispiel, das ich dann hier gefunden habe.

Laienhaft zusammengefasst besteht die von Ihm zur Verfügung gestellte Software hauptsächlich aus einer unter der Linux oder Windows Kommandozeile ausführbaren Datei, die in der Lage ist in
  • Modus 1: Eine Bootloader-Hex-Datei mit beliebigem Beinchen für jeweils RX und TX zu erzeugen.
  • Modus 2: Eine beliebige Hex-Datei (=Arduino Programm) über einen seriellen USB Adapter hoch zu laden.

    Das wohl beste Feature ist jedoch das "überspringen" der Bootloader Wartezeit von rund 6 Sekunden: Sieht der Standalone Chip direkt nach dem er Spannung bekommt ein LOW Pegel auf seiner RX Leitung so startet er sofort das Arduino Programm.

    Mein Ziel war nun eine komplette Integration in Arduino, die mir final dank einiger Anregungen von dieser Seite dann auch gelungen ist.
    TSB Bootloader auf einem AVR installieren
    An dieser Stelle gehe ich davon aus, das man das ATFlash so wie auf der Hauptseite beschrieben schon installiert hat und auch das ISP_N_SerialBridge_V2_1 schon auf dem Uno läuft. Auch jetzt baut man wieder die folgende Schaltung auf und ergänzt den 10 µF Kondensator. - Unter Werkzeuge - Platine - "ATtiny85 (TSB)" Chip auswählen

    - Unter Werkzeuge - Programmer - "Arduino as ISP" wählen

    - Unter Werkzeuge - Bootloader brennen

    Natürlich werden von ATFlash auch die beiden Chips ATtiny84A und ATmega328P unterstützt.
    Mit TSB Flashen und debuggen
    Hier gibt es verschiedene Möglichkeiten, was man als "Programmiergerät" verwenden kann. Eigentlich funktioniert jeder USB2Serial Adapter, der eine RX und TX Leitung zur Verfügung stellt. Getestet habe ich konkret:
  • Adapter auf FTDI 232RL Basis
  • Adapter auf PL2303 Basis
  • Adapter auf CP2102 Basis
  • Adapter auf ATmega16U2 Basis (konkret: den Arduino Uno)

    jeweils unter Linux und unter Windows. Verwendet man den letzt genannten, so spielt man ein leeres Programm auf den Uno (nur Setup und Loop). Die RX und TX Leitung wird nicht wie üblich "über kreuz" an den Standalone Chip angeschlossen, sondern direkt also RX an RX und TX an TX. Auch hier ist wieder der 10 µF Kondensator nötig, da sowohl beim Öffnen der seriellen Konsole als auch beim Flashen mit TSB ein kurzer Resetimpuls kommt und sich daraufhin der Prozessor des Uno mit seinem eigenen Bootloader einen eigenen TX Pegel ausgibt. Mit dem Uno sieht das dann so aus: Hat der Standalone Chip eine andere Spannungslage, kann man sich wie auf der Seite Debug beschrieben einen Spannungsteiler in die TX Leitung bauen. Bei den für 1-2 € aus China erhältlichen USB2Serial Adaptern handelt es sich nach diversen Berichten aus dem Internet oft um Fälschungen, die für Endanwendner kaum zu erkennen sind - zu mal die Schaltungen meistens klaglos Ihren Dienst tun. Zudem gibt es Anleitungen, wie man diese Chips mit ältere Treiberversionen trotzdem zum laufen bekommt. Bisher habe ich jedoch noch nicht von Fälschungen des CP2102 gelesen oder Gerätetreibern, die gegen Fälschungen dieses Chips vorgehen. Es ergibt sich folgende Schaltung: - Das eigentliche Programm wird einfach mit der Upload Taste hoch geladen.

    - Nach der Kompilierung erscheint ein Countdown der von 3 Sekunden an rückwärts zählt im Ausgabebereich der Arduino IDE. Während dieses Countdowns wird einmal ganz kurz die Versorgungsleitung des Standalone Chips ausgesteckt und wieder ein gesteckt. Als Alternative kann auch der Resetpin des Standalone Chips über einen Taster auf GND gezogen werden. - Das Programm beginnt sofort im Anschluss zu laufen.

    - Für das anschließende Debuggen kann die seriellen Konsole mit der Baudrate von 9600 benutzt werden.

  •