Während ich gerne in die verschiedenen verfügbaren Programmiermethoden eintauchen würde, hat dies bereits jemand anderes getan. Hier ist das Tutorial von Dean Camera zu AVRFreaks, AVR-Programmiermethoden :
Es gibt viele Möglichkeiten, AVR-Mikrocontroller zu programmieren. Da viele Leute zu verschiedenen Zeiten nachfragen, dachte ich, ich würde sie hier skizzieren, damit ihre Fragen schnell und effizient beantwortet werden können. Bitte verzeihen Sie mir, wenn ich eine Methode verpasse oder einen Fehler mache.
Methode 1: In System Programming (ISP)
Unterstützt von: Die große Mehrheit der AVRs (siehe unten)
Unterstützte Programmierer: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, AVRISP-Klone, AVR910-Programmierer, AVRONE
Bei der Systemprogrammierung handelt es sich möglicherweise um die gebräuchlichste Methode zur Programmierung von Flash, EEPROM, Sicherung und Lockbytes der gesamten AVR-Leitung. ISP kann AVRs mit extrem hohen Taktraten programmieren (vorausgesetzt, der Ziel-AVR läuft mit einer hohen Frequenz und der Programmierer unterstützt dies) und ist die Methode der Wahl für fast alle AVR-Hobbyisten. Es gibt viele, viele AVRISP-Klone und AVR910-Programmierer auf dem Markt, zusätzlich zu einfachen Do-it-yourself-Dongles, die an den parallelen Port Ihres Computers angeschlossen werden.
Neuere neue Dongle-Designs verwenden möglicherweise den seriellen Anschluss des Computers. Es gibt jedoch vereinzelte Hinweise darauf, dass diese Methode aufgrund technischer Einschränkungen äußerst langsam ist.
ISP setzt voraus, dass der Ziel-AVR mit einer Taktrate ausgeführt wird, die mindestens dem Vierfachen des ISP-Takts entspricht. Dies ist eine häufige Gefahr und eine Quelle der Verwirrung für viele AVR-Neulinge.
Methode 2: JTAG
Unterstützt von: Informationen zur Unterstützung von MKI- und MKII-Geräten finden Sie in der Hilfe der AVRStudio Tools.
Unterstützte Programmierer: JTAG-ICE, JTAG-ICE MKII, Dragon, JTAG-ICE-Klone, AVRONE, STK600 (nur Programmierung)
Technisch gesehen ist JTAG ein Debugging-System, keine Programmiermethode. Die JTAG-Schnittstelle ermöglicht jedoch die Programmierung eines AVR, der dies unterstützt.
JTAG ist ein systeminternes Debugging-Tool, mit dem Sie den Status eines unterstützten AVR bearbeiten und untersuchen können, während er in einem Stromkreis ausgeführt wird. Mit JTAG kann der Benutzer die Ausführung jederzeit unterbrechen, die internen Register des AVR manipulieren und vieles mehr.
Die offiziellen JTAG-ICE-Geräte von ATMEL wurden durch das JTAG-ICE MKII ersetzt, das das neuere und umfassendere DebugWire-Debugging-Protokoll der AVR-Reihe sowie die Programmierung über die ISP-Methode (siehe oben) unterstützt.
JTAG-ICE-Klone sind zu niedrigen Preisen erhältlich, ihre eingeschränkte Kompatibilität mit nur einer Handvoll AVRs schränkt jedoch ihre Nützlichkeit ein. Unabhängig davon bleibt der JTAG-ICE eine sehr schöne und effektive Debugging-Methode und ein Programmierer, wenn Ihr AVR die JTAG-Schnittstelle unterstützt.
Methode 3: DebugWire
Unterstützt von: Viele kleinere AVRs
Unterstützte Programmierer: JTAG-ICE MKII, Dragon, AVRONE
Auch hier ist DebugWire eher ein Debugging als eine Programmierschnittstelle, kann jedoch zum Laden von Programmen in unterstützte AVRs verwendet werden. Die dW-Schnittstelle verwendet einen einzigen AVR-Pin (die / RESET-Leitung) für die gesamte Kommunikation, was sie ideal für AVR-Geräte mit geringer Pinanzahl macht.
Methode 4: Bootloader
Unterstützt von: Die meisten neueren AVRs
Unterstützte Programmierer: N / A
Auch hier technisch keine Programmiermethode. Ein Bootloader ist ein kleines AVR-Programm, das sich in einem vom Benutzer einstellbaren reservierten Bereich des regulären Flashs befindet. Bootloader nutzen die in den neueren AVRs verfügbaren Flash-Selbstmodifikationsfunktionen, damit sich der AVR über Programmdaten programmieren kann, die von einer externen Quelle geladen wurden. Bootloader können ihre Daten von jedem Ort aus beziehen (z. B. von einem externen Datenflash oder einer SD-Karte). Die bei weitem häufigste Art von Bootloader kommuniziert jedoch mit einem PC über die RS-232-Schnittstelle (seriell) des AVR.
Bootloader sind dahingehend begrenzt, dass sie Flash-Speicher belegen (was die Größe des für die AVR-Anwendung verfügbaren Flashs begrenzt) und die AVR-Sicherungsbits nicht ändern können.
Bootloader sind im Internet weit verbreitet und können heruntergeladen werden. Sie leiden jedoch unter dem Problem "Henne und Ei". Sie benötigen einen anderen hier aufgeführten Programmierertyp, um überhaupt im Bootloader zu programmieren. Dies wird normalerweise durch den Aufbau eines einfachen Parallelport-Dongles (siehe Abschnitt ISP) oder durch den Kauf eines AVR gelöst, der bereits mit einem Bootloader (z. B. dem AVRButterfly-Board) vorinstalliert ist.
METHODE 5: Parallele Hochspannungsprogrammierung (HVPP)
Unterstützt von: Die meisten nicht-kleinen AVRs (mit Ausnahmen)
Unterstützte Programmierer: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
Parallele Hochspannungsprogrammierung ist eine Programmiermethode, die aufgrund des Einrichtungsaufwands nur selten verwendet wird. Trotzdem wird die HVPP-Programmierung häufig verwendet, um AVRs, deren Fusebits über eine andere Programmiermethode falsch konfiguriert wurden, "wiederzubeleben".
Sowohl der STK500 als auch der Dragon unterstützen HVPP. Während des HVPP wird der Pin / RESET des Ziels auf den ungewöhnlich hohen Wert von 12 V angehoben, wodurch die interne Parallelprogrammierschaltung aktiviert wird. Der / RESET-Pin ist der einzige Pin des AVR (bei HVPP-unterstützten AVRs), der sicher auf diesen Pegel angehoben werden kann.
Mit Online-Plänen wie diesem können Sie Ihren eigenen HVPP-Dongle erstellen.
Methode 6: Serielle Hochspannungsprogrammierung (HVSP)
Unterstützt von: Viele Winzige AVRs (mit Ausnahmen)
Unterstützte Programmierer: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
HVSP ähnelt HVPP, mit der Ausnahme, dass die Datenübertragung seriell und nicht parallel erfolgt. Dies ist die alternative Programmiermethode, die bei vielen AVRs der TINY-Serie verwendet wird, denen genügend Pins für HVPP fehlen.
Methode 7: PDI
Unterstützt von: XMEGA AVRs
Unterstützte Programmierer: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII
PDI ist die neue Programmierschnittstelle, die auf dem DebugWire-Protokoll für die XMEGA-Reihe von AVRs basiert. Es wird derzeit auf keinem anderen 8-Bit-AVR-Mikrocontroller verwendet.
Methode 8: TPI
Unterstützt von: 6-Pin TINY AVRs (ATTINY10 usw.)
Unterstützte Programmierer: STK600, Dragon, AVRISP MKII
TPI ist eine sehr kleine Programmierschnittstelle für die neuere TINY-Reihe von AVRs mit begrenzten Pins, wie der 6-polige ATTINY10. Wie dW verwendet TPI die / RESET-Leitung des Geräts als Teil der Kommunikationsschnittstelle, aber dort endet die Ähnlichkeit. Da die kleinen TINY-AVRs keine chipinterne Debugging-Schaltung haben, verwendet das TPI-Protokoll eine neue Programmierschnittstelle mit drei Pins in einem Halbduplex-Protokoll. Da die / RESET-Leitung zum Programmieren auf +12 V angehoben werden muss, wenn der RSTDSB-Pin des Geräts gesetzt ist, wird dies derzeit nur von der neueren STK600-Programmierplatine unterstützt.
Bonus FAQ Bereich!
Welches ist die beste Methode?
Es gibt keine universelle "beste" Methode. Die ISP-Programmierung ist einfach und äußerst beliebt, jedoch funktionieren alle oben genannten Methoden. Die beiden Hochspannungs-Programmiermodi (je nachdem, was für Ihr Gerät gilt) bieten die meisten Funktionen, da sie die Reparatur eines AVR ermöglichen, dessen Sicherungen falsch konfiguriert wurden. Diese Methoden sind jedoch schwierig einzurichten, weshalb sich die meisten Benutzer für ISP entscheiden.
Ich habe einen Parallelport-Dongle erstellt. Kann ich es mit AVRStudio verwenden?
Ich fürchte nein. AVRStudio kann keine Schnittstelle zu "dummen" Dongles herstellen. Es ist ein intelligentes Programmiergerät erforderlich, das einen Mikrocontroller enthält, um das gesendete Kommunikationsprotokoll zu entschlüsseln. Einfache Dongles ohne Mikrocontroller müssen selbst "bit-banged" sein (dh die entsprechenden Signale, die über den Computer durch den Dongle simuliert werden).
Also ist mein Dongle dann nutzlos?
Sie können weiterhin mit einem Programmiersoftware-Tool eines Drittanbieters über einen hausgemachten Dongle programmieren. AVRDude ist ein gutes, bekanntes, kostenloses Befehlszeilenprogramm - und es ist im WinAVR-Paket enthalten.
Welche Optionen stehen mir zur Verfügung, wenn mein Programmierer mit AVRStudio arbeiten soll?
Wählen Sie einen Programmierer, der ein von AVRStudio unterstütztes Protokoll verwendet. Dies kann das einfache "AVR910" -Protokoll (veraltet) oder eine benutzerdefinierte Implementierung des vom STK500 / AVRISP verwendeten Protokolls sein. Beachten Sie, dass diese Programmierer einen Mikrocontroller benötigen, was zu einer Catch-22-Situation führt. Dies kann behoben werden, indem der AVR des Programmierers zum Zeitpunkt des Kaufs mit der entsprechenden Firmware vorprogrammiert wird oder indem der AVR mit einem Bootloader vorprogrammiert wird.
Ok, ich möchte einen Bootloader verwenden. Wie komme ich da überhaupt rein ?!
Um einen Bootloader in einem AVR zu verwenden, muss zunächst der Bootloader programmiert werden. Wenn Sie keinen vorhandenen Programmierer haben (für die Erstprogrammierung reicht ein einfacher Dongle), können Sie alternativ vorprogrammierte AVRs mit einem kaufen Bootloader von mehreren Anbietern.
Atmel stellt auch das Butterfly-Demoboard her, auf dessen MEGA169 AVR ein mit AVR-Studio kompatibler Bootloader vorinstalliert ist.
Hilfe! Ich habe mit den Sicherungen rumgespielt und meinen AVR geknackt, während ich ISP benutzt habe!
Der häufigste Fehler besteht darin, die Sicherungen für die Uhrzeitauswahl auf eine ungültige Einstellung zu setzen. Versuchen Sie, eine externe Uhr an den XTAL1-Pin des AVR anzuschließen, und prüfen Sie, ob dies hilfreich ist.
Wenn dies nicht möglich ist, wenden Sie eine der Hochspannungsmethoden an. Dies behebt alle Fehlkonfigurationen, einschließlich solcher, die die Taktquelle betreffen, da die Hochspannungsmethoden dem AVR einen eigenen Takt für die Programmierung bereitstellen.
Wie kann ich mit meinem Programmierer kommunizieren?
Welche Software Sie für die Schnittstelle zu Ihrem Programmierer verwenden, hängt vom verwendeten Programmierertyp ab.
Einfache "dumme" Dongles erfordern Software von Drittanbietern wie PonyProg oder AVRDude. Dies können Befehlszeilen- oder GUI-Tools sein. Schauen Sie sich im Web um und finden Sie das passende Tool für Ihre Anforderungen.
Programmierer und Bootloader, die auf dem AVR910-Protokoll basieren, können in AVRStudio verwendet werden. Wählen Sie im Menü Extras die Option "AVRProg", um einen GUI-Bildschirm für die Schnittstelle mit Ihrem Programmierer zu öffnen. Alternativ sind Tools von Drittanbietern wie AVRDude auch mit AVR910 kompatibel.
Offizielle Tools sind eng in AVRStudio integriert, insbesondere bei den Debugging-Varianten (JTAG / Dragon / etc). Wählen Sie im AVRStudio Tools-Menü das Untermenü "Program AVR ..." und klicken Sie auf "Connect". Wählen Sie im neuen Fenster Ihr Tool und dessen Verbindungsoberfläche aus und klicken Sie auf OK.
Wie bei den Dumb Dongles und AVR910-Programmierern können die offiziellen Tools auch mit Programmiersoftware von Drittanbietern verwendet werden.
(C) Dean Camera, 2009. Alle Rechte vorbehalten. Keine Vervielfältigung auf anderen Websites als AVRFreaks.net ohne vorherige ausdrückliche Genehmigung.