Mikrocontroller programmieren: JTAG, SPI, USB oh my !?
52
Ich habe festgestellt, dass es in Bezug auf Mikrocontroller verschiedene Möglichkeiten gibt, diese zu programmieren. Ich bin ein bisschen mit USB vertraut, da mein Arduino über USB programmiert werden kann.
Was ist eine JTAG- oder SPI-Schnittstelle?
Letztendlich weiß ich, dass diese Schnittstellen eine Möglichkeit bieten, den Chip mit neuen Anweisungen zu flashen, aber wie unterscheiden sie sich? Gibt es irgendwelche Vorteile gegenüber anderen?
ATMEGA-Mikrocontroller wie der im Arduino, die direkt ab Werk geliefert werden, können nur über die SPI- oder JTAG-Schnittstelle programmiert werden.
SPI steht für Serial Peripheral Interface und ist eine Möglichkeit für Mikrocontroller, miteinander oder mit der Außenwelt zu kommunizieren. Es wird manchmal auch als 3-Draht bezeichnet, da für die Kommunikation drei Drähte verwendet werden. Um einen Chip zu programmieren, benötigen Sie einen speziellen Programmierer, der Befehle von USB liest, um die SPI-Leitungen zum Programmieren des Chips anzusteuern. Ein populäres scheint das USBTinyISP von Adafruit zu sein . Eine sehr gute Einführung in die SPI-Programmierung gibt es bei SparkFun. Die beliebtesten Anwendungen zum Programmieren von Atmel AVR-Chips sind avrdude (cmd line), ponyprog (funktioniert nicht mit neueren Programmierern) und in einigen Fällen AVR Studio (sofern Ihr Programmierer dies unterstützt). Der Vorteil der SPI-Programmierung ist, dass Sie jeden Atmel-Chip direkt ab Werk programmieren können, sodass Sie in Ihren Projekten nicht immer ein Arduino benötigen.
Wo SPI "nur ein anderes" serielles Protokoll ist, ist JTAG ein Protokoll, das speziell zum Programmieren und Debuggen von Mikrocontrollern entwickelt wurde. Nicht alle Atmel-Mikros unterstützen JTAG, aber diejenigen, die im Arduino verwendet werden. Das JTAG-Protokoll kann für coole Dinge wie "In-Circuit-Emulation" und Debugging verwendet werden, was bedeutet, dass Sie den Status des Programms in Ihrem Mikrocontroller sehen können, während es tatsächlich ausgeführt wird. Dazu benötigen Sie einen speziellen Programmierer. Gesehen meine Antwort auf eine andere Frage .
Um einen Chip über USB zu programmieren, müssen Sie ihn zunächst mit einem "Bootloader" über SPI oder JTAG programmieren. Nach dem Laden mit dem Bootloader kann das System mit einem USB-Serial-Konverter von jedem PC aus programmiert werden. Der Nachteil ist, dass der Bootloader etwas Speicherplatz belegt und Sie bei dieser Methode den Status des Chips nicht sehen können, während er ausgeführt wird.
Zwar stimmt die Vorstellung, dass ein serieller Bootloader auf einem neuen ATMEGA nicht verfügbar ist (obwohl dies auf vielen anderen Mikrocontrollern der Fall ist), jedoch ist die Behauptung, dass SPI oder JTAG verwendet werden müssen, falsch. ATMEGAs unterstützen auch einen parallelen Hochspannungs-Programmiermodus, der die Möglichkeit bietet, einige Sicherungseinstellungen außer Kraft zu setzen, die die gängigen In-Circuit-Programmiermethoden unbrauchbar machen würden. JTAG wurde nicht zum Programmieren von Mikros entwickelt, sondern zum Testen von Leiterplatten, indem Werte in und aus IO-Pin-Registern getaktet werden. Die Erweiterung für das Programmieren oder Debuggen von Kernfunktionen war ein späterer Hack.
Chris Stratton
SPI und In System Programming / Serial Programming sind unterschiedlich. Ich war auch an die Tatsache gewöhnt, dass viele der kleineren Atmega-MCUs serielle Programmierstifte auf der SPI-Schnittstelle hatten, aber ich war gebissen von der Tatsache, dass auf einigen der größeren Atmega-MCUs serielle Programmierstifte nicht auf der SPI-Schnittstelle waren.
Fest
30
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.
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.
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.
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.
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.
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.
Nachdruck natürlich nur mit ausdrücklicher Genehmigung!
SPI ist eine sehr verbreitete Schnittstelle für Chips. Die Anspielung auf 3-Draht ist der SPI-Modus, bei dem Sie den Auswahlstift des Chips nicht verwenden.
I2C ist der Hauptwettbewerb für Schnittstellen, da es unabhängig von der Anzahl der Chips nur zwei Drähte verwendet, während die SPI pro Schnittstelle einen weiteren Draht benötigt, jedoch langsamer ist.
Beim Unterrichten betrachte ich das Unterrichten von Schnittstellen als eine der wichtigsten Aufgaben.
Community-Wiki für diejenigen, die meine Informationen erweitern möchten.
Ich habe noch nie davon gehört, dass I2C als native Flash-Programmierschnittstelle auf einem Mikrocontroller verwendet wird, obwohl es wohl keinen Grund gibt, warum es nicht der Einstiegspunkt für einen Bootloader sein könnte ...
vicatcu
@vicatcu, ich habe es gerade als eine sehr allgemeine Schnittstelle hinzugefügt.
Kortuk
3
Insgesamt unterscheiden sich diese Schnittstellen nur darin, welche Programmierer und welche Mikrocontroller sie unterstützen. Solange Sie eine Übereinstimmung zwischen dem Programmierer und dem Mikrocontroller haben, würde ich mir keine Sorgen machen.
Wenn Sie mehr darauf eingehen, werden Sie feststellen, dass es mehr auf die Pins an der Schnittstelle des Mikrocontrollers ankommt. Wenn Sie diese Pins für Sensoren verwenden, können die Signale beim Programmieren des Geräts stören. Die einfachste Lösung, sollte dies ein Problem sein, ist das Trennen der Sensoren während der Programmierung.
Einige Schnittstellen (einschließlich JTAG) ermöglichen das Debuggen des Geräts. Dann benötigen Sie jedoch einen Programmierer (und eine Software, die diesen unterstützt). In einer früheren Frage wurde ich auf den Dragon zum Debuggen von AVR-Geräten hingewiesen. Ich beabsichtige, einen zu erwerben und zu spielen, wenn meine aktuelle Projektrunde fast abgeschlossen ist.
Wie Sie bereits erwähnt haben, werden Seriell, SPI (2-Draht, 3-Draht?), USB, JTAG, SWD usw. verwendet.
Ja, es gibt Vor- und Nachteile. Jtag zum Beispiel ist für alle Fälle gedacht, die mir bekannt sind und die ursprünglich und hauptsächlich für etwas anderes als das Debuggen von Prozessoren verwendet wurden, aber sie verwenden es auch dafür. Wenn jtag verfügbar ist, ist es im Allgemeinen die beste Schnittstelle aus diesem Grund, aber es gibt Ausnahmen. Wenn die Pins beispielsweise nicht für jtag reserviert sind, könnten Sie einen Fehler im Code haben und / oder absichtlich einen dieser Pins für etwas anderes verwenden, wodurch es nicht möglich ist, mit jtag auf den Chip zuzugreifen (wenn die Software in diesem Flash gestartet wird) diese Stifte neu verwenden). Eine andere Ausnahme ist, wenn der Prozessorkern durch einen Fehler in der Software im Flash nicht mehr reagiert und ein nicht mehr reagierender Kern nicht über jtag debuggbar ist. Ich würde das einen Fehler im Hardware-Design nennen, habe mich aber kürzlich mit diesem kommerziellen Teil befasst.
Auf dem AVR zum Beispiel das PDI, von dem ich denke, dass Leute hier vielleicht spi nennen, vielleicht nicht. es scheint zumindest auf dem xmega, dass der pdi und der externe jtag intern in eine gemeinsame pdi-schnittstelle eingehen. Die PDI-Pins ermöglichen Ihnen also den direkten Zugriff auf diese, anstatt den JTAG-Overhead. Solange diese Schnittstelle funktioniert, wenn Software in Flash den Kern blockiert hat, ist dies die ideale Schnittstelle für diese Familie. Das Protokoll ist veröffentlicht und relativ einfach und in die Hardware integriert. Es hat den Nachteil eines bidirektionalen Datenbusses wie i2c.
Arm hat einen Tag mit weniger Drähten namens swd, den sie nicht unbedingt offen veröffentlichen wollen. Die Open-Source-Tools implementieren es jedoch. Dies ist theoretisch ein serieller J-Tag. Die verschiedenen J-Tag-Signale werden nacheinander auf einer Leitung gesendet und nicht auf vielen Leitungen parallel. im teil gehe ich davon aus, dass es wieder parallelisiert wird und normale jtag-logik speist. Dies hat den Nachteil, dass ARM es halb geheim halten möchte, und ARMs JTAG-Debugger sind ohnehin eine große Herausforderung. Das ist also viel Arbeit. Wenn / wenn openocd es zum Laufen bringt, kann es eine andere Geschichte sein. Sie müssen sich auch immer noch Sorgen machen, ob die Pins wiederverwendet werden und was mit einem hängenden Kern passiert.
Eine Reihe von Anbietern verwenden eine Lösung, bei der sie einen oder mehrere Boot-Flash-Bereiche haben. Dies hängt davon ab, auf welche Weise ein Pin oder zwei oder drei gezogen werden und von welchem Flash Sie booten. Sie können also vom Benutzer-Flash oder von einem Flash booten, der mindestens werkseitig über einen seriellen oder einen USB-basierten Bootloader verfügt. Diese Softwarelösungen können je nach Anbieter variieren, das serielle Protokoll ändert sich auf subtile oder mehr als subtile Weise, die USB-Lösung kann sich erheblich ändern. Das Gute und Schlechte ist, dass einige dieser Blitze angezeigt werden können. Sie können also den seriellen Bootloader ändern. Dies ist sowohl gut als auch schlecht. Gut, dass Sie ihn an Ihr Produkt anpassen können. Schlecht, dass dies möglich ist Um es versehentlich zu löschen und das Teil zu ziegeln, muss es zumindest für diese Schnittstelle gemauert werden.
Jtag-Tools kosteten früher Tausende von Dollars, jetzt nicht mehr. Für etwa 15 US-Dollar können Sie ein Ftdi-Breakout-Board erwerben und es mit openocd neu verwenden. Für $ 50 plus oder minus einige können Sie eine Ftdi-basierte USB-Lösung erhalten, die mit OpenOCD sofort funktioniert. Sie können einen nicht-kommerziellen J-Link für 75-80 US-Dollar erwerben. Und dann gibt es die tausend Dollar, die zwar schnell sind, aber das Geld im Allgemeinen nicht wert. Sie kaufen diese, wenn Sie ein riesiges Unternehmen mit viel Geld sind und für die Unterstützung bezahlen möchten. Wenn Sie diese Preise bezahlen, erhalten Sie das gewünschte Produkt und erhalten sofort Antworten auf Fragen des technischen Supports. Wie zum Beispiel kostenloses Linux gegen Windows oder RHEL ist der Linux-Support kostenlos, aber Sie bekommen, was Sie bekommen. Auf jeden Fall macht dies jtag viel attraktiver,
Sie sollten in Ihrem Debugging- und Entwicklungs-Arsenal JTAG-Tools haben, wann und wo erschwinglich. sparkfun hat auf ftdi basierende usb to serial boards und die ftdi teile können in große banger umgewandelt werden, sie können für spi oder i2c oder pdi oder jtag oder andere schnittstellen verwendet werden. Idealerweise erhalten Sie Boards, die für den Bus / das Teil, an dem Sie interessiert sind, hergestellt sind, und verwenden die dazugehörige Free / Open Source-Software. Verwenden Sie auch diese seriellen Karten, die im Idealfall eine Versorgung von 3,3 V und 5 V haben (etwa 15 US-Dollar pro Stück, die Sie für Lillypads und Arduino Minis usw. verwenden), um eine Verbindung zu seriellen Anschlüssen für die verschiedenen Mikros herzustellen, die über ein serielles Protokoll verfügen. Ich finde es einfacher, meinen eigenen Loader auf der Grundlage dieser Protokolle zu schreiben, insbesondere der Arduino / AVR-Leute, auf denen die Bootloader-Quelle veröffentlicht wird, und eine beträchtliche Untergruppe des vermeintlichen Standards, den sie unterstützen. YMMV.
Kurz gesagt, es gibt keine gute Lösung, sie haben alle Vor- und Nachteile. Seien Sie bereit, mindestens zwei von ihnen zu unterstützen. usb und seriell oder usb und jtag oder jtag und seriell usw. Legen Sie einfach Pads oder Nadellöcher auf die Platine und füllen Sie sie nicht unbedingt. Haben Sie für Ihre persönliche oder Laborentwicklung eine vollständige Suite von Werkzeugen und seien Sie bereit, von einem zum anderen zu wechseln, wenn Sie Chips ziegeln und Boards wiederherstellen müssen oder wenn Sie Ihren eigenen Bootloader, USB-Firmware usw. entwickeln.
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 :
Nachdruck natürlich nur mit ausdrücklicher Genehmigung!
quelle
Ich möchte der Diskussion noch etwas hinzufügen.
SPI ist eine sehr verbreitete Schnittstelle für Chips. Die Anspielung auf 3-Draht ist der SPI-Modus, bei dem Sie den Auswahlstift des Chips nicht verwenden.
I2C ist der Hauptwettbewerb für Schnittstellen, da es unabhängig von der Anzahl der Chips nur zwei Drähte verwendet, während die SPI pro Schnittstelle einen weiteren Draht benötigt, jedoch langsamer ist.
Beim Unterrichten betrachte ich das Unterrichten von Schnittstellen als eine der wichtigsten Aufgaben.
Community-Wiki für diejenigen, die meine Informationen erweitern möchten.
quelle
Insgesamt unterscheiden sich diese Schnittstellen nur darin, welche Programmierer und welche Mikrocontroller sie unterstützen. Solange Sie eine Übereinstimmung zwischen dem Programmierer und dem Mikrocontroller haben, würde ich mir keine Sorgen machen.
Wenn Sie mehr darauf eingehen, werden Sie feststellen, dass es mehr auf die Pins an der Schnittstelle des Mikrocontrollers ankommt. Wenn Sie diese Pins für Sensoren verwenden, können die Signale beim Programmieren des Geräts stören. Die einfachste Lösung, sollte dies ein Problem sein, ist das Trennen der Sensoren während der Programmierung.
Einige Schnittstellen (einschließlich JTAG) ermöglichen das Debuggen des Geräts. Dann benötigen Sie jedoch einen Programmierer (und eine Software, die diesen unterstützt). In einer früheren Frage wurde ich auf den Dragon zum Debuggen von AVR-Geräten hingewiesen. Ich beabsichtige, einen zu erwerben und zu spielen, wenn meine aktuelle Projektrunde fast abgeschlossen ist.
quelle
Wie Sie bereits erwähnt haben, werden Seriell, SPI (2-Draht, 3-Draht?), USB, JTAG, SWD usw. verwendet.
Ja, es gibt Vor- und Nachteile. Jtag zum Beispiel ist für alle Fälle gedacht, die mir bekannt sind und die ursprünglich und hauptsächlich für etwas anderes als das Debuggen von Prozessoren verwendet wurden, aber sie verwenden es auch dafür. Wenn jtag verfügbar ist, ist es im Allgemeinen die beste Schnittstelle aus diesem Grund, aber es gibt Ausnahmen. Wenn die Pins beispielsweise nicht für jtag reserviert sind, könnten Sie einen Fehler im Code haben und / oder absichtlich einen dieser Pins für etwas anderes verwenden, wodurch es nicht möglich ist, mit jtag auf den Chip zuzugreifen (wenn die Software in diesem Flash gestartet wird) diese Stifte neu verwenden). Eine andere Ausnahme ist, wenn der Prozessorkern durch einen Fehler in der Software im Flash nicht mehr reagiert und ein nicht mehr reagierender Kern nicht über jtag debuggbar ist. Ich würde das einen Fehler im Hardware-Design nennen, habe mich aber kürzlich mit diesem kommerziellen Teil befasst.
Auf dem AVR zum Beispiel das PDI, von dem ich denke, dass Leute hier vielleicht spi nennen, vielleicht nicht. es scheint zumindest auf dem xmega, dass der pdi und der externe jtag intern in eine gemeinsame pdi-schnittstelle eingehen. Die PDI-Pins ermöglichen Ihnen also den direkten Zugriff auf diese, anstatt den JTAG-Overhead. Solange diese Schnittstelle funktioniert, wenn Software in Flash den Kern blockiert hat, ist dies die ideale Schnittstelle für diese Familie. Das Protokoll ist veröffentlicht und relativ einfach und in die Hardware integriert. Es hat den Nachteil eines bidirektionalen Datenbusses wie i2c.
Arm hat einen Tag mit weniger Drähten namens swd, den sie nicht unbedingt offen veröffentlichen wollen. Die Open-Source-Tools implementieren es jedoch. Dies ist theoretisch ein serieller J-Tag. Die verschiedenen J-Tag-Signale werden nacheinander auf einer Leitung gesendet und nicht auf vielen Leitungen parallel. im teil gehe ich davon aus, dass es wieder parallelisiert wird und normale jtag-logik speist. Dies hat den Nachteil, dass ARM es halb geheim halten möchte, und ARMs JTAG-Debugger sind ohnehin eine große Herausforderung. Das ist also viel Arbeit. Wenn / wenn openocd es zum Laufen bringt, kann es eine andere Geschichte sein. Sie müssen sich auch immer noch Sorgen machen, ob die Pins wiederverwendet werden und was mit einem hängenden Kern passiert.
Eine Reihe von Anbietern verwenden eine Lösung, bei der sie einen oder mehrere Boot-Flash-Bereiche haben. Dies hängt davon ab, auf welche Weise ein Pin oder zwei oder drei gezogen werden und von welchem Flash Sie booten. Sie können also vom Benutzer-Flash oder von einem Flash booten, der mindestens werkseitig über einen seriellen oder einen USB-basierten Bootloader verfügt. Diese Softwarelösungen können je nach Anbieter variieren, das serielle Protokoll ändert sich auf subtile oder mehr als subtile Weise, die USB-Lösung kann sich erheblich ändern. Das Gute und Schlechte ist, dass einige dieser Blitze angezeigt werden können. Sie können also den seriellen Bootloader ändern. Dies ist sowohl gut als auch schlecht. Gut, dass Sie ihn an Ihr Produkt anpassen können. Schlecht, dass dies möglich ist Um es versehentlich zu löschen und das Teil zu ziegeln, muss es zumindest für diese Schnittstelle gemauert werden.
Jtag-Tools kosteten früher Tausende von Dollars, jetzt nicht mehr. Für etwa 15 US-Dollar können Sie ein Ftdi-Breakout-Board erwerben und es mit openocd neu verwenden. Für $ 50 plus oder minus einige können Sie eine Ftdi-basierte USB-Lösung erhalten, die mit OpenOCD sofort funktioniert. Sie können einen nicht-kommerziellen J-Link für 75-80 US-Dollar erwerben. Und dann gibt es die tausend Dollar, die zwar schnell sind, aber das Geld im Allgemeinen nicht wert. Sie kaufen diese, wenn Sie ein riesiges Unternehmen mit viel Geld sind und für die Unterstützung bezahlen möchten. Wenn Sie diese Preise bezahlen, erhalten Sie das gewünschte Produkt und erhalten sofort Antworten auf Fragen des technischen Supports. Wie zum Beispiel kostenloses Linux gegen Windows oder RHEL ist der Linux-Support kostenlos, aber Sie bekommen, was Sie bekommen. Auf jeden Fall macht dies jtag viel attraktiver,
Sie sollten in Ihrem Debugging- und Entwicklungs-Arsenal JTAG-Tools haben, wann und wo erschwinglich. sparkfun hat auf ftdi basierende usb to serial boards und die ftdi teile können in große banger umgewandelt werden, sie können für spi oder i2c oder pdi oder jtag oder andere schnittstellen verwendet werden. Idealerweise erhalten Sie Boards, die für den Bus / das Teil, an dem Sie interessiert sind, hergestellt sind, und verwenden die dazugehörige Free / Open Source-Software. Verwenden Sie auch diese seriellen Karten, die im Idealfall eine Versorgung von 3,3 V und 5 V haben (etwa 15 US-Dollar pro Stück, die Sie für Lillypads und Arduino Minis usw. verwenden), um eine Verbindung zu seriellen Anschlüssen für die verschiedenen Mikros herzustellen, die über ein serielles Protokoll verfügen. Ich finde es einfacher, meinen eigenen Loader auf der Grundlage dieser Protokolle zu schreiben, insbesondere der Arduino / AVR-Leute, auf denen die Bootloader-Quelle veröffentlicht wird, und eine beträchtliche Untergruppe des vermeintlichen Standards, den sie unterstützen. YMMV.
Kurz gesagt, es gibt keine gute Lösung, sie haben alle Vor- und Nachteile. Seien Sie bereit, mindestens zwei von ihnen zu unterstützen. usb und seriell oder usb und jtag oder jtag und seriell usw. Legen Sie einfach Pads oder Nadellöcher auf die Platine und füllen Sie sie nicht unbedingt. Haben Sie für Ihre persönliche oder Laborentwicklung eine vollständige Suite von Werkzeugen und seien Sie bereit, von einem zum anderen zu wechseln, wenn Sie Chips ziegeln und Boards wiederherstellen müssen oder wenn Sie Ihren eigenen Bootloader, USB-Firmware usw. entwickeln.
quelle