Was ist ein Programmer ?
Ein Programmer ist eine Hardwarekomponente, mit der ein ausführbares Programm auf einen Microcontroller übertragen werden kann. Dabei gibt es unterschiedliche Konzepte wie das des Bootloader, der Parallelprogrammierung oder des JTAG-Interfaces. Zudem spielt bei Atmel-Microcontrollern der “Serial Download eine relevante Rolle, besser bekannt als “ISP“ (In System Programming). Dabei wird das “Serial Processor Interface“ genutzt, welches bei den meisten AVR-Controllern zu finden ist. ISP-Programmer zeichnen sich meist vor allem durch den geringen Hardwareaufwand aus. Bei solchen “Billigprogrammern“ werden die Protokolle mit Hilfe eines entsprechenden Programms am Computer generiert und die Programmierhardware dient lediglich zur Pegelanpassung. Einige einfache Programmer sind derart aufgebaut, dass sie nur aus drei Schutzwiderständen und einem kleinen Treiberbaustein bestehen, der für eine sichere Übertragung bei längeren Kabeln sorgt. Damit ist ein sehr günstiger Einstieg in die Programmierung von Atmel AVR-Controllern möglich. Daneben gibt es Programmer die über eine eigene “Intelligenz“ verfügen, sogenannte “Serial-Programmer“. Bei diesen erfolgt die Datenübertragung am Programmer über eine serielle Schnittstelle oder per USB. Der Programmer selbst verfügt über einen Controller, der die Daten empfängt und das Programmierprotokoll ausführt. Der weit verbreitete SI-Prog wird zwar ebenfalls über eine serielle Schnittstelle angeschlossen ist aber äquivalent zu Parallelprogrammern und verfügt über keine eigene Intelligenz. Deshalb ist es auch nicht möglich den SI-Prog mit einem handelsüblichen USB-Serial-Adapter laufen zu lassen.
Parallelport ISP Programmer
STK 200 kompatible Programmer
Bei Parallelportprogrammern handelt es sich oft um Nachbauten von Programmierinterfaces der ersten Starterkits von ATMEL dem STK200 oder STK300. Beworben werden diese oft als STK200 kompatibel oder als sogenannte Standard-ISP-Programmer. Der Vorteil dieser Programmer liegt darin, dass so ziemlich jede Programmersoftware diese unterstützt. Die Kompatibilität bezieht sich hier auf die Belegung der Leitungen am LPT-Port und hat nichts mit der Verwendung eines Treiberschaltkreises dieser Programmer zu tun.
LTP-Pinning des STK200
SCK = 6;
MOSI = 7;
RESET = 9;
MISO = 10;
SP12 kompatible Programmer
Bei dem SP12 Programmer handelt es sich ursprünglich um eine sehr einfache Lösung, bei der nur drei Schutzwiderstände und keine weitere Pegelanpassung benutzt wurde. Dieser sehr günstige Programmer erfreut sich großer Beliebtheit. Der Hauptgrund hierfür liegt aber in seiner Schaltungslösung, die es erlaubt, das Zielsystem über den LPT-Port mit Spannung zu versorgen. Bei der STK200 Schaltung muss der Programmer vom Zielsystem versorgt werden. Es wird beim SP12 also zum Programmieren keine zusätzliche Spannungsversorgung benötigt.
LPT-Pinning des SP12:
VCC = 4,5,6,7,8;
RESET = 3;
SCK = 2;
MOSI = 9;
MISO = 11;
Pseudo serielle Programmer
Der wegen seiner guten Unterstützung des beliebten PonyProg bekannte SI-Prog wird oft als serieller Programmer bezeichnet. Seine Schaltung verrät jedoch, dass die Steuerleitungen DTR, RTS und CTS des COM-Ports verwendet werden um ein SPI-Protokoll laufen zu lassen. Dabei werden TxD und RxD, die eigentlichen Steruerleitungen gar nicht angeschlossen, was dazu führt, dass dieser Programmer nicht über USB betrieben werden werden kann und somit PonyProg nicht als Programmiertool zum Einsatz kommen kann.
Echte serielle Programmer
Echte serielle Programmer basieren oft auf dem Atmel Application-Note AN910 oder sind STK500 kompatibel. Ihnen ist dabei gemeinsam, dass ein Controller mit entsprechender AVR910 oder STK500 kompatibler Firmware vorhanden ist, die meist über den Bootloader geupdated werden kann. Parallelprogrammer werden durch die meisten Flash-Tools unterstützt und können auch mit handelsüblichen USB-Serial-Adaptern betrieben werden.
Das alte Protokoll nach AN910 ist problematisch bei der Unterstützung neuer Controller, denn hier muß der Programmer die ID des Controllers kennen. Für neue Controller braucht man also ein Update der Software im Programmer. Wichtige Weiterentwicklungen bei den Serialprogrammern ist das AVR911 und das STK500v2 Protokoll.
USB-Programmer
Die Besonderheit dieser Programmer besteht darin, dass der Programmer selbst über eine USB-Schnittstelle verfügt und somit problemlos an den Computer angeschlossen werden kann. Es handelt sich hierbei in der Regel um AVR910 oder STK500-kompatible Lösungen, für die unter Windows ein Treiber installiert werden muss, der im System einen virtuellen COM-Port simuliert.
Ein AVR-Microcontroller kann für langsame USB-Geschwindigkeiten das USB-Interface emulieren. Das USB-Protokoll selbst ist meist nur minimalistisch wodurch es zu Inkompatibilitäten kommen kann. Der größte Vorteil für die Nutzung der AVR als virtueller USB-Controller ist , dass sich damit auch ohne SMD-Bauteile USB-Programmer bauen lassen, die ohne serielle Schnittstelle funktionieren.
JTAG& PDI Programmer
Mit der Veröffentlichung des XMEGA hat sich ATMEL vom ISP Standard getrennt und an dessen Stelle kommt nun PDI oder JTAG zum Einsatz.
Für Mikrocontroller-Boards schlägt Atmel einen 6-Pin Header, 2,54 mm Raster, mit folgender Pinbelegung vor (Ansicht von Oben):
DATA 1 2 VCC
N.C. 3 4 N.C.
C L K 5 6 GND
Arduino als ISP-Programmer
Auch ein Arduino kann recht einfach als ISP-Programmer für andere Microcontroller eingesetzt werden. Dabei kommt die serielle SPI-Schnittstelle zum Einsatz. Mit Hilfe eines ISP-Programmers ist es möglich diverse Mikrocontrollertypen zu programmieren. ISP steht dabei für In-System-Programming, was so viel bedeutet, wie dass der Controller direkt im Einsatzsystem programmiert werden kann. Damit der Arduino als ISP-Programmer eingesetzt werden kann, muss dieser erst selbst entsprechend programmiert werden. Hierfür ist in der Arduino IDE bereits das Beispiel “ArduinoISP” enthalten, welches lediglich geöffnet und über USB auf den Arduino geladen werden muss. In der Arduino IDE muss dann über das Menü Werkzeuge ? Programmer ? Arduino as ISP ausgewählt werden.
Nachdem alles entsprechend verkabelt wurde kann dann der Sketch entweder durch klicken des Hochladen-Buttons bei gedrückter Umschalttaste, oder über das Menü Sketch ? Hochladen mit Programmer auf den Ziel-Mikrocontroller geladen werden.
Wozu verwendet man welchen Programmer / Debugger ?
Mit dem USB ISP ASP AVR Programmer lassen sich beispielsweise per USB wieder Bootloader auf defekte Arduinos oder alte 8Bit 3D-Druckermainboards flashen.
Der ST-Link V2 Schaltungsinterne Debugger und Programmer kann direkt auf den Arduino aufgesteckt werden und kann über die SwlM und JTAG/SWWD-Schnittstellen direkt mit den STM8 oder STM32 Microcontrollern des Anwendungsboards kommunizieren