Seriell? Nein, ISP und schnell!

Einen ISP-Programmer hatte ich schon bevor ich meinen ersten Arduino hatte, war dem Studium geschuldet, wo ich mit ATmega8 in Assembler arbeitete. Doch auch mit dem Arduino benutze ich den weiterhin, ohne kann ich nicht. Zum einen funktioniert bei mir das Flashen über die serielle Schnittstelle selten gut, beliebt ist dabei
avrdude: stk500_getsync() attempt x of y: not in sync resp=0x00
stk500_recv(): programmer is not responding
Zum Anderen nutze ich auch viele Atmels außerhalb der Arduino-Gebilde. Zwar kann man einen Arduino als ISP-Programmer opfern, aber dann doch lieber gleich eine vernünftige und funktionierende Version. Absolut notwendig wird so etwas, wenn man seinen Bootloader zerschossen hat.

ISP steht für In System Programming, also grob: der Chip kann bleiben wo er ist verbaut und über diese Schnittstelle programmiert werden, sofern ein ISP-Header verfügbar ist. Bei allen Arduino-Boards sind dieser bereits vorinstalliert – als ISP6. Die sechs lustigen Pins, angeordnet als 2×3, bieten die normalen SPI Pins. ISP basiert auf SPI oder JTAG, in unserem Fall SPI. Vereinfacht wird der Arduino, bzw. ATmega zum Slave Gerät, der Rechner spricht ihn dann mit dem ISP-Gerät als einfachen Flash und EEPROM an.

Wenn man den obigen Fehler bekommt, kann es sein, dass irgendwelche Fuses zerschossen wurden, der Bootloader nicht richtig läuft (z.B. Reset nicht mit Wartezeit durchführt) oder durch irgendwas anderes der Haussegen schief hängt. Das Problem bei der seriellen Schnittstelle ist, dass sie asynchron läuft. Vergleichbar mit normalem Reden: der Gegenüber sagt etwas und wir erkennen automatisch die Buchstaben, ohne, dass er uns ein extra Zeichen gibt. Spricht er zu schnell, können wir es nicht mehr verstehen. Zu langsam wird es schnell uninteressant. Bei ISP gibt der Gesprächspartner den Takt vor und wir passen uns automatisch dran an, ob wir wollen oder nicht.

Vorteile von ISP:

  • Meist schneller beim Flashen
  • Deutlich zuverlässiger
  • Viel flexibler

Viel flexibler bezieht sich z.B. auf einen 32u2 oder 32u4 beim Leonardo, Micro oder Uno: statt des normalen Bootloaders kann man den Arduino auch als USB-MIDI-Gerät nutzen.

Die Kosten für einen ISP-Programmer sind je nach Typ zwischen 3 und 100 Euro. Funktionieren tun sie fast alle. Im Normalfall erhält man einen Programmer mit ISP10 Header, einen Adapter auf ISP6 gibt es aber schon ab einem Euro. Am Besten einen Programmer nutzen, der in der Arduino IDE unter Tools > Programmer aufgelistet ist. Denn genau das muss man machen, um über ISP zu flashen:
Adapter aus besagtem Menü auswählen und den Uploadbutton bei angeschlossenem Board mit gehaltener Shift-Taste klicken. Beim Shortcut ebenfalls die Umschalttaste zu Strg+P/cmd+P dazunehmen. Eine aktive serielle Schnittstelle muss man seit Version 1.6 nicht mehr haben. Bedeutet, wenn man zwei Nanos da hat, stöpselt man den Ersten an, läd hoch und dann beim Zweiten – ohne, dass man im Menü die serielle Schnittstelle wechseln muss. Einfacherer Workflow also für die kleine Serienfertigung.

Was auch möglich wird: ATtinys und andere Atmels flashen, die es so auf kein normales Board geschafft haben oder die man einfach ohne das ganze Gedöns nutzen möchte.

Mein Rat: einen günstigen ISP-Programmer samt ISP10-ISP6-Adapter kaufen und sich nie wieder Gedanken über Fehlermeldungen, wie not in sync oder Verweigerungen des Treibers machen. Ansonsten einen günstigen Arduino opfern und als ISP-Programmer nutzen.

Dieser Eintrag wurde veröffentlicht in Allgemein von Luca Zimmermann. Permanenter Link des Eintrags.

Über Luca Zimmermann

Programmiere seit ich 12 bin und habe einen Hang zur Elektronik seit ich denken kann. Studiere aktuell angewandte Informatik an der Hochschule Hannover. Hier moderiere ich das Forum, warte den Server, bin China-Zwischenhändler und kümmer mich um noch so einiges. Beantworte alle Fragen, sofern möglich, gerne auch im Forum. Fast 24/7 erreichbar.