Programmieren von Mikrocontrollern: JTAG, SPI, USB oh my!?

Mir ist aufgefallen, dass es in Bezug auf Mikrocontroller mehrere Möglichkeiten gibt, sie zu programmieren. Ich bin mit USB irgendwie vertraut, da meine Arduinos über USB programmiert werden können.

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 von einem gegenüber dem anderen?

Antworten (5)

ATMEGA-Mikrocontroller wie der im Arduino, die direkt ab Werk kommen, 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, weil es drei Drähte zur Kommunikation verwendet. 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 beliebter scheint der USBTinyISP von Adafruit zu sein . Eine sehr gute Einführung in die SPI-Programmierung ist 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 (wenn Ihr Programmierer dies unterstützt). Der Vorteil der SPI-Programmierung besteht darin, 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 weiteres" 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 läuft. Dazu benötigen Sie einen speziellen Programmierer. Gesehen meine Antwort für 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 ist das System über einen USB-Seriell-Konverter von jedem PC aus programmierbar. Der Nachteil ist, dass der Bootloader etwas Speicherplatz beansprucht und Sie mit dieser Methode den Status des Chips nicht sehen können, während er läuft.

Während die Vorstellung, dass ein serieller Bootloader auf einem neuen ATMEGA nicht verfügbar ist (obwohl er auf vielen anderen Mikrocontrollern vorhanden ist), zutreffend ist, ist die Behauptung, dass SPI oder JTAG verwendet werden müssen, falsch. ATMEGAs unterstützen auch einen Hochspannungs-Parallelprogrammiermodus, der die Fähigkeit hat, einige Sicherungseinstellungen zu überschreiben, die die populäreren In-Circuit-Programmierungsmethoden unbrauchbar machen würden. JTAG wurde nicht zum Programmieren von Mikros entwickelt, sondern zum Testen von PC-Karten, indem Werte in und aus IO-Pin-Registern getaktet werden. Die Erweiterung zum Programmieren oder Debuggen von Kernfunktionen war ein späterer Hack.
SPI und In System Programming / Serielle Programmierung sind unterschiedlich. Auch ich war daran gewöhnt, dass viele der kleineren Atmega-MCUs serielle Programmierpins auf der SPI-Schnittstelle hatten, aber ich war gebissen von der Tatsache, dass bei einigen der größeren Atmega-MCUs serielle Programmierpins nicht auf der SPI-Schnittstelle waren.

Während ich gerne in die verschiedenen verfügbaren Programmiermethoden eintauchen würde, hat jemand anderes dies bereits getan. Hier ist das Tutorial von Dean Camera zu AVRFreaks, AVR-Programmiermethoden :

Es gibt viele Möglichkeiten, AVR-Mikrocontroller zu programmieren. Da viele Leute irgendwann nach verschiedenen Fragen fragen, 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 übersehe oder einen Fehler mache.

METHODE 1: In Systemprogrammierung (ISP)

Unterstützt von: Die überwiegende Mehrheit der AVRs (siehe Beiträge unten)
Unterstützte Programmierer: AVRISP MKI/II, JTAG MKII, STK500, STK600, Dragon, AVRISP-Klone, AVR910-Programmierer, AVRONE

In System Programming ist vielleicht die gebräuchlichste Methode zum Programmieren von Flash, EEPROM, Fuse und Lockbytes der gesamten AVR-Reihe. Der 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-Bastler. Es gibt viele, viele AVRISP-Klone und AVR910-Programmierer auf dem Markt, zusätzlich zu einfachen Do-it-yourself-Dongles, die an den parallelen Anschluss Ihres Computers angeschlossen werden.

Neuere Dongle-Designs können den seriellen Anschluss des Computers verwenden, es gibt jedoch anekdotische Hinweise darauf, dass diese Methode aufgrund technischer Einschränkungen extrem langsam ist.

Der ISP erfordert, dass der Ziel-AVR mit einer Taktrate von mindestens dem Vierfachen der ISP-Uhr läuft. Dies ist eine häufige Falle und eine Quelle der Verwirrung für viele AVR-Neulinge.

METHODE 2: JTAG

Unterstützt von: Siehe AVRStudio Tools-Hilfe für MKI- und MKII-Geräteunterstützung. 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. Dennoch ermöglicht die JTAG-Schnittstelle die Programmierung eines AVR, der dies unterstützt.

JTAG ist ein systeminternes Debugging-Tool, mit dem Sie den Status eines unterstützten AVR manipulieren und untersuchen können, während er in einer Schaltung läuft. JTAG ermöglicht es dem Benutzer, die Ausführung jederzeit zu stoppen, die Manipulation der internen Register des AVR und vieles mehr.

Die offiziellen JTAG-ICE-Einheiten von ATMEL wurden durch die JTAG-ICE MKII ersetzt, die das neuere und breiter unterstützte 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 begrenzte Kompatibilität mit nur einer Handvoll AVRs schränkt jedoch ihre Nützlichkeit ein. Unabhängig davon, wenn Ihr AVR die JTAG-Schnittstelle unterstützt, bleibt JTAG-ICE eine sehr schöne und effektive Debugging-Methode und Programmierer.

METHODE 3: DebugWire

Unterstützt von: Viele kleinere AVRs
Unterstützte Programmierer: JTAG-ICE MKII, Dragon, AVRONE

Auch hier ist DebugWire eher eine Debugging- als eine Programmierschnittstelle, kann aber zum Laden von Programmen in unterstützte AVRs verwendet werden. Die dW-Schnittstelle verwendet einen einzelnen AVR-Pin (die /RESET-Leitung) für die gesamte Kommunikation, wodurch sie sich ideal für AVR-Geräte mit geringer Pin-Anzahl eignet.

METHODE 4: Bootloader

Unterstützt von: Die meisten neueren AVRs
Unterstützte Programmierer: N/A

Wieder technisch keine Programmiermethode. Ein Bootloader ist ein kleines AVR-Programm, das sich in einem vom Benutzer einstellbaren reservierten Bereich des regulären Flash befindet. Bootloader nutzen die in den neueren AVRs verfügbaren Flash-Selbstmodifikationsfunktionen, damit der AVR sich selbst über Programmdaten programmieren kann, die von einer externen Quelle geladen werden. Bootloader können ihre Daten von jedem Ort beziehen (z. B. externer Dataflash oder SD-Karte), jedoch kommuniziert der bei weitem gebräuchlichste Typ von Bootloader mit einem PC über den (seriellen) RS-232-Anschluss des AVR.

Bootloader sind insofern begrenzt, als sie Flash-Speicherplatz verbrauchen (was die Größe des für die AVR-Anwendung verfügbaren Flashs begrenzt) und die Fusebits des AVRs nicht ändern können.

Bootloader sind im Internet weit verbreitet zum Download verfügbar, aber sie leiden unter einem „Henne-und-Ei“-Problem; Sie benötigen einen anderen hier aufgeführten Programmierertyp, um überhaupt im Bootloader zu programmieren. Dies wird normalerweise durch den Bau eines einfachen Parallelport-Dongles (siehe ISP-Abschnitt) oder durch den Kauf eines bereits mit einem Bootloader vorinstallierten AVR (z. B. das AVRButterfly-Board) gelöst.

METHODE 5: Hochspannungs-Parallelprogrammierung (HVPP)

Unterstützt von: Die meisten Nicht-TINY-AVRs (mit Ausnahmen)
Unterstützte Programmierer: STK500, STK600, Dragon, Homebrew Dongles, AVRONE

Hochspannungs-Parallelprogrammierung ist eine Programmiermethode, die aufgrund der aufwändigen Einrichtung selten verwendet wird. Trotzdem wird die HVPP-Programmierung häufig verwendet, um AVRs "wiederzubeleben", deren Fusebits über eine andere Programmiermethode falsch konfiguriert wurden.

Sowohl der STK500 als auch der Dragon unterstützen HVPP. Während HVPP wird der /RESET-Pin des Targets auf den ungewöhnlich hohen Wert von 12 V angehoben, wodurch die interne parallele Programmierschaltung aktiviert wird. Der /RESET-Pin ist der einzige Pin des AVR (bei HVPP-unterstützten AVRs), der sicher auf diesen Pegel angehoben werden kann.

Sie können Ihren eigenen HVPP-Dongle mit Online-Plänen wie diesem erstellen.

METHODE 6: Serielle Hochspannungsprogrammierung (HVSP)

Unterstützt von: Viele TINY AVRs (mit Ausnahmen)
Unterstützte Programmierer: STK500, STK600, Dragon, Homebrew Dongles, AVRONE

HVSP ähnelt HVPP, außer dass die Datenübertragung seriell und nicht parallel durchgeführt wird. 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 basierend auf dem debugWire-Protokoll für die AVRs der XMEGA-Reihe. 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-Linie von AVRs mit begrenzten Pins, wie dem 6-Pin-ATTINY10. Wie dW verwendet TPI die /RESET-Leitung des Geräts als Teil der Kommunikationsschnittstelle, aber hier endet die Ähnlichkeit. Da den winzigen TINY AVRs eine On-Chip-Debugging-Schaltung fehlt, 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-Programmierkarte unterstützt.

Bonus-FAQ-Bereich!

  1. Welches ist die beste Methode?
    Es gibt keine universelle „beste“ Methode. Die ISP-Programmierung ist einfach und sehr beliebt, aber alle oben genannten Methoden funktionieren. Die zwei Hochspannungs-Programmiermodi (je nachdem, was auf Ihr Gerät zutrifft) sind die funktionsreichsten, da sie die Reparatur eines AVR ermöglichen, dessen Sicherungen falsch konfiguriert wurden. Diese Methoden sind jedoch mühsam einzurichten, daher der Grund, warum sich die meisten Benutzer für ISP entscheiden.

  2. Ich habe einen Parallelport-Dongle gemacht. Kann ich es mit AVRStudio verwenden?
    Ich fürchte nein. AVRStudio kann nicht mit irgendwelchen "dummen" Dongles zusammenarbeiten - es erfordert ein intelligentes Programmiergerät - das selbst einen Mikrocontroller enthält - um das von ihm gesendete Kommunikationsprotokoll zu entschlüsseln. Einfache Dongles ohne Mikrocontroller müssen selbst "bit-banged" (dh die entsprechenden Signale durch den Dongle über den Computer simuliert) werden.

  3. Dann ist mein Dongle also nutzlos?
    Nein. Sie können immer noch über einen hausgemachten Dongle mit einem Programmiersoftware-Tool eines Drittanbieters programmieren. AVRDude ist ein gutes, bekanntes, kostenloses Befehlszeilenprogramm - und es ist im WinAVR-Paket enthalten.

  4. Welche Möglichkeiten habe ich, wenn ich möchte, dass mein Programmierer mit AVRStudio arbeitet?
    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 gelöst 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.

  5. Ok, ich möchte einen Bootloader verwenden. Wie bekomme ich das überhaupt rein?!
    Um einen Bootloader in einem AVR zu verwenden, müssen Sie zuerst den Bootloader einprogrammieren. Wenn Sie keinen vorhandenen Programmierer haben (selbst ein einfacher dummer Dongle reicht für die anfängliche Programmierung aus), können Sie alternativ AVRs kaufen, die mit einem vorprogrammiert sind Bootloader von mehreren Anbietern.
    Atmel stellt auch das Butterfly-Demoboard her, dessen MEGA169 AVR mit einem vorinstallierten AVR-Studio-kompatiblen Bootloader geliefert wird.

  6. Hilfe! Ich habe mit den Sicherungen herumgespielt und meinen AVR kaputt gemacht, während ich ISP benutzt habe! Der häufigste Fehler besteht darin, die Taktauswahlsicherungen auf eine ungültige Einstellung zu ändern. Versuchen Sie, eine externe Uhr an den XTAL1-Pin des AVR anzuschließen, und sehen Sie, ob das hilft.
    Andernfalls verwenden Sie nach Möglichkeit eine der Hochspannungsmethoden. Diese beheben alle Fehlkonfigurationen, einschließlich solcher, die die Taktquelle betreffen, da die Hochspannungsmethoden dem AVR einen eigenen Takt zur Programmierung zur Verfügung stellen.

  7. Wie stelle ich eine Schnittstelle zu meinem Programmiergerät her?
    Welche Software Sie für die Schnittstelle mit Ihrem Programmiergerät verwenden, hängt von der Art des Programmiergeräts ab, das Sie verwenden.
    Einfache "dumme" Dongles erfordern Software von Drittanbietern wie PonyProg oder AVRDude. Dies können Befehlszeilen- oder GUI-Tools sein – schauen Sie sich im Internet um und Sie werden eines finden, das Ihren Anforderungen entspricht.
    Programmierer und Bootloader, die auf dem AVR910-Protokoll basieren, können innerhalb von AVRStudio verwendet werden. Wählen Sie im Tools-Menü die Option „AVRProg“, um einen GUI-Bildschirm zu öffnen, um mit Ihrem Programmiergerät zu kommunizieren. Alternativ sind Tools von Drittanbietern wie AVRDude auch AVR910-kompatibel.
    Offizielle Tools sind fest in AVRStudio integriert, insbesondere bei den Debugging-Varianten (JTAG/Dragon/etc). Wählen Sie im Menü „AVRStudio Tools“ das Untermenü „Program AVR…“ und klicken Sie auf „Connect“. Wählen Sie im neuen Fenster Ihr Werkzeug und seine Verbindungsschnittstelle aus und klicken Sie auf OK.
    Wie bei den dummen Dongles und AVR910-Programmierern können die offiziellen Tools auch mit Programmiersoftware von Drittanbietern verwendet werden.

(C) Dean Camera, 2009. Alle Rechte vorbehalten. Nicht zur Reproduktion auf anderen Websites als AVRFreaks.net ohne vorherige ausdrückliche Genehmigung.

Vervielfältigung natürlich mit vorheriger ausdrücklicher Genehmigung!

Ich möchte noch etwas zur Diskussion hinzufügen.

SPI ist eine sehr verbreitete Schnittstelle für Chips. Die Anspielung auf 3-Draht ist der Modus von SPI, bei dem Sie den Auswahlstift des Chips nicht verwenden.

I2C ist der Hauptwettbewerb für die Schnittstelle, da es unabhängig von der Anzahl der Chips nur 2 Drähte verwendet, während das SPI ein weiteres Kabel pro Schnittstelle benötigt, aber langsamer ist.

In der Lehre betrachte ich die Vermittlung von Schnittstellen als eine der wichtigsten Aufgaben.

Community-Wiki für diejenigen verfügbar, 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 keinen Grund gibt, warum es nicht der Einstiegspunkt für einen Bootloader sein könnte, nehme ich an ...
@vicatcu, ich habe es gerade als sehr häufige Schnittstelle hinzugefügt.

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 sich eingehender damit befassen, werden Sie feststellen, dass die Pins, die die Schnittstelle auf dem Mikrocontroller verwendet, wichtiger sind - wenn Sie diese Pins für Sensoren verwenden, können sich die Signale beim Programmieren des Geräts stören. Sollte dies ein Problem sein, besteht die einfachste Lösung darin, die Sensoren während der Programmierung abzuklemmen.

Einige Schnittstellen (einschließlich JTAG) ermöglichen das Debuggen des Geräts - aber dann benötigen Sie einen Programmierer (und Software zum Ansteuern), der dies ebenfalls unterstützt. In einer früheren Frage wurde ich auf den Dragon zum Debuggen von AVR-Geräten hingewiesen - ich beabsichtige, einen zu bekommen und zu spielen, wenn meine aktuelle Projektrunde kurz vor dem Abschluss steht.

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, die ich kenne, in die Hardware eingebaut, ursprünglich und hauptsächlich für etwas anderes als das Debuggen von Prozessoren verwendet, aber sie verwenden es auch dafür. Wenn jtag verfügbar ist, ist es aus diesem Grund im Allgemeinen die beste Schnittstelle, aber es gibt Ausnahmen. Wenn die Pins beispielsweise nicht für jtag bestimmt sind, könnten Sie einen Fehler im Code haben und/oder einen dieser Pins absichtlich für etwas anderes verwenden, wodurch es nicht möglich ist, mit jtag auf den Chip zuzugreifen (wenn es die Software im Flash startet, das verwendet diese Pins neu). Eine weitere Ausnahme ist, wenn der Prozessorkern durch einen Fehler in der Software im Flash hängen bleiben kann und ein hängender Kern nicht per jtag debuggbar ist. Ich würde das einen Fehler im Hardwaredesign nennen, habe mich aber kürzlich in einem kommerziellen Teil damit befasst.

Auf dem AVR zum Beispiel der PDI, den die Leute hier vielleicht spi nennen, vielleicht auch nicht. es scheint zumindest auf xmega, dass pdi und externes jtag intern in eine gemeinsame pdi-schnittstelle eingespeist werden. Die PDI-Pins geben Ihnen also direkten Zugriff darauf anstelle des Jtag-Overheads. Solange diese Schnittstelle funktioniert, wenn Software in Flash den Kern aufgehängt hat, wäre dies die ideale Schnittstelle für diese Familie. Das Protokoll ist veröffentlicht und relativ einfach und in Hardware integriert. Es hat den Nachteil eines bidirektionalen Datenbusses wie i2c.

Arm hat ein jtag mit weniger Drähten namens swd, das nicht unbedingt offen veröffentlicht werden soll. Die Open-Source-Tools implementieren es jedoch. dies ist theoretisch ein serielles jtag, die verschiedenen jtag-signale werden irgendwie sequentiell auf einer leitung gesendet, anstatt parallel auf vielen leitungen. Ich nehme an, dass es innerhalb des Teils wieder parallelisiert wird und die normale Jtag-Logik speist. Dies hat den Nachteil, dass ARM es halb geheim halten will und ARMs jtag-Debugger sowieso ein königlicher Schmerz sind. Das ist also eine Menge Arbeit. Wenn / wann openocd es zum Laufen bringt, kann es eine andere Geschichte sein. Sie müssen sich auch immer noch Gedanken über umfunktionierte Stifte machen 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, je nachdem, auf welche Weise ein Stift oder zwei oder drei gezogen werden, hängt davon ab, von welchem ​​​​Flash Sie booten. Sie könnten also vom Benutzer-Flash booten, oder Sie könnten von einem Flash booten, der zumindest ab Werk über einen seriellen Port-basierten Bootloader verfügt, oder einen, der über einen USB-basierten Bootloader verfügt. Für jeden Anbieter können und werden diese Softwarelösungen variieren, das serielle Protokoll ändert sich auf subtile oder mehr als subtile Weise, die USB-Lösung kann sich ziemlich ändern. Das Gute und das Schlechte ist, dass Sie einige dieser Flashs erreichen können, also können Sie den seriellen Bootloader ändern, das ist sowohl gut als auch schlecht, gut, dass Sie ihn an Ihr Produkt anpassen können, schlecht, dass es möglich ist um es versehentlich zu löschen und das Teil zu mauern, zumindest für diese Schnittstelle zu mauern.

Früher kosteten Jtag-Tools Tausende von Dollar, jetzt nicht mehr. Für etwa 15 Dollar können Sie ein ftdi-Breakout-Board bekommen und es mit openocd wiederverwenden. Für 50 US-Dollar plus oder minus einige können Sie eine ftdi-basierte USB-Lösung erhalten, die mit openocd sofort einsatzbereit ist. Sie können einen nicht-kommerziellen J-Link für etwa 75 bis 80 US-Dollar erhalten. Und dann gibt es die für mehrere Tausend Dollar, die schnell und sicher sind, aber im Allgemeinen das Geld nicht wert sind. Sie kaufen diese, wenn Sie ein riesiges Unternehmen mit viel Geld sind und für 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 vs. Windows oder RHEL, ist der Linux-Support kostenlos, aber Sie bekommen, was Sie bekommen. Wie auch immer, das macht jtag viel attraktiver,

Sie sollten jtag-Tools in Ihrem Debugging- und Entwicklungsarsenal haben, wann und wo immer sie erschwinglich sind. sparkfun hat ftdi-basierte USB-zu-Seriell-Boards und die ftdi-Teile können in Big Banger umfunktioniert werden, Sie können diese für spi oder i2c oder pdi oder jtag oder andere Schnittstellen verwenden. Idealerweise bekommen Sie Boards, die für den Bus / das Teil hergestellt sind, an dem Sie interessiert sind, und verwenden die dazugehörige kostenlose / Open-Source-Software. Verwenden Sie auch diese seriellen Karten, idealerweise mit einer Versorgung von 3,3 V und 5 V (jeweils etwa 15 US-Dollar, die Sie für Lillypads und Arduino-Minis usw. verwenden), um sie an serielle Ports für die verschiedenen Mikros anzuschließen, die über eine Art serielles Protokoll verfügen. Ich finde es einfacher, meinen eigenen Loader basierend auf diesen Protokollen zu schreiben, besonders wie die Arduino/Avr-Leute, wo die Bootloader-Quelle veröffentlicht wird und eine beträchtliche Teilmenge des angeblichen Standards ist, den sie unterstützen. YMMV.

Kurz gesagt, es gibt keine gute Lösung, alle haben 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 Stiftlöcher auf die Platine und bestücken Sie sie nicht unbedingt. Haben Sie für Ihre persönliche oder Laborentwicklung eine vollständige Suite von Tools und seien Sie darauf vorbereitet, von einem zum anderen zu wechseln, wenn Sie Chips bauen und Boards wiederherstellen müssen oder wenn Sie Ihren eigenen Bootloader, USB-Firmware usw. entwickeln.