Ist es möglich, eine JTAG-Schnittstelle mit einem Arduino herzustellen?

Wenn ja, könnte man mich auf eine Seite verweisen, die erklärt, wie man das macht? Ich glaube, ich habe vielleicht einen Weg gefunden , aber ich bin mir nicht sicher, ob es noch funktionieren würde oder nicht (muss etwas finden, um es zu testen).

Diese Frage bezieht sich auf eine frühere Frage von mir, die sich hier befindet.

Falls weitere Hintergrundinformationen benötigt werden.

JBailey Ich bin gerade auf Ihre Frage zur Verwendung von Arduino zur Herstellung eines JTAG-USB-Konverters gestoßen und habe mich gefragt, wie Sie das gemacht haben? \

Antworten (4)

Ja, es ist möglich, einen Arduino in einen ARM JTAG-Adapter zu verwandeln.

Es gibt drei Probleme, Spannung, Geschwindigkeit und Treiber.

Der Arduino läuft nativ bei 5V. Die meisten ARM-Mikrocontroller sind an ihren JTAG-Pins nicht 5-V-tolerant und benötigen 3,3 V. Die einfachste Lösung besteht darin, Ihren Arduino mit 3,3 V zu betreiben, andernfalls benötigen Sie eine Art Pegelumwandlung (siehe I2C 3,3 bis 5,0 V-Umwandlung für Ideen).

Der Arduino ist über eine serielle Verbindung mit einem PC verbunden. Ich bezweifle, dass es schneller als 115200 bps gehen kann, was interaktive Aktivitäten wie das schrittweise Durchlaufen von Code in einem Debugger sehr langsam macht. Sie können jedoch Code hochladen und Geräte neu flashen.

JTAG ist ein für jede Prozessorfamilie spezifisches High-Level-Protokoll, das eine SPI-ähnliche Schnittstelle zum Datenaustausch verwendet. Die meisten JTAG-Dongles bieten lediglich eine SPI-Schnittstelle über USB und überlassen den Rest der Arbeit einer PC-Anwendung. OpenOCD und URJTag sind beliebte Optionen. In einem davon benötigen Sie einen Treiber für Ihr Arduino JTAG-Protokoll.

Der Bus-Pirat ist dem Arduino (langsamer Mikrocontroller + FTDI-Chip) sehr ähnlich. Es unterstützt JTAG mit OpenOCD, also ist es sicherlich möglich.

Wenn Sie ein Teensy/Opendous oder ein anderes AVR-USB-Board verwenden, können Sie eStick-JTAG verwenden .

Aber für verlorene JTAG-Kosten würde ich einen der FTDI2232-basierten Dongles empfehlen. Sie sind billig und werden von OpenOCD gut unterstützt.

Es ist möglich, aber sehr schwierig. Ich mag die FTDI-basierten JTAGs nicht, weil die FTDI-Chips fertige Black Boxes sind und man nicht wirklich lernt, indem man sie benutzt.

Wenn ich einen USB-JTAG mit AVR bauen wollte, würde ich einen mit mindestens USB-Full-Speed-Unterstützung im Chip bekommen. Holen Sie sich dann den AVR-USB-Stack (C-Quellcodes) und sehen Sie sich ein USB-to-Serial-Beispiel an. Da Bitbanging über USB eine schlechte Idee ist (hohe Latenz), muss es in Befehle auf höherer Ebene konvertiert werden, die die MCU anweisen, das Bitbanging selbst durchzuführen (oder wenn möglich SPI zu verwenden) und das High-Level-Ergebnis über USB zurückzugeben (vollständige Bytes ). Aber dann kommt die Notwendigkeit, Treiber für die IDE zu schreiben, um das neue JTAG-Gerät zu unterstützen, um es zu debuggen. OpenOCD und URJTag haben Quellcode von Treibern für viele jtag-Geräte, also müssen Sie einen für Ihr neu erfundenes Gerät bekommen und überarbeiten. Sehen Sie, wie einige Leute ähnliche Arbeit geleistet haben: http://code.google.com/p/estick-jtag/

Siehe openocd. Die Backends basieren hauptsächlich auf dem Parallelport-Bit-Bang-Ansatz, ich denke, es geht so weit, dass nur ein Bit auf einmal geändert wird. Es ist ziemlich einfach, das zu nehmen, was sie meiner Meinung nach das Dummy-Backend nennen, das ein Beispiel ist. Senden Sie einen beliebigen Schreibbitbefehl an das Arduino und lassen Sie dieses Bit setzen oder löschen. Wenn Sie aufgefordert werden, das Eingangsbit zu lesen, senden Sie einen Befehl an das Arduino, um diese Aufgabe auszuführen und die Ergebnisse zurückzugeben.

Ich habe genau das mit Erfolg gemacht, aber nicht mit einem Arduino, ich hatte Openocd-Talk von einem Host in einen simulierten Armkern, der in einem HDL-Simulator läuft.

Beachten Sie, dass einige jtag-Spezifikationen geschlossen sind, der Cortex-m3 zum Beispiel ist eine Art serialisierter jtag mit reduzierter Anzahl von Pins, der das letzte Mal, als ich nachsah, ohne NDA nicht verfügbar war. das spielt vielleicht keine Rolle, denn openocd kümmert sich um all das für Sie, solange Sie eine jtag-Schnittstelle verwenden, die openocd unterstützt. Das Bit-Banged-Back-End ist der Ort, an dem Ihr Arduino und die Schnittstelle, die Sie verwenden, um zu/von ihm zu gelangen, ins Spiel kommen .

Wie bereits von Joby angemerkt, müssen Sie mit Spannungen (nicht alle Arduino-Varianten haben 5 V und nicht alle Armsteuerungen 3,3 Volt) und Signalkonditionierung und Erdung und all dem Zeug vorsichtig sein. Wenn Ihre Zielplatine von einer Versorgung versorgt wird, die sich auf einem anderen Niveau befindet als das, mit dem Sie Ihr Arduino versorgen, könnten Sie etwas einschmelzen, wenn Sie die beiden verbinden.

Beachten Sie, dass die Verwendung einer seriellen (oder schlimmer noch USB mit seinem paketierten Transport) Schnittstelle zum Proxy-Bit-Banging extrem langsam sein kann. Es ist viel effizienter, den Mikrocontroller vollständige Operationen ausführen zu lassen und mit ihm auf einer höheren Ebene zu kommunizieren, dh ihm zu sagen, dass er dieses Register lesen, dieses schreiben oder sogar diesen Datenblock programmieren soll.
Diese Antwort weist auf ein Tool zum Ansteuern eines JTAG-Adapterchips hin, aber die Frage bezieht sich nicht auf Adapter.

Es ist möglich, und ich habe es tatsächlich implementiert und alles hier erklärt .

Auf Github gibt es hier eine Bibliothek , die aus zwei Teilen besteht: dem Programm, das auf Arduino läuft, und einem Python-Skript, das XSVF-Dateien an Arduino sendet.

Sie werden höchstwahrscheinlich ein paar Widerstände benötigen, um 5 V in 3,3 V umzuwandeln, da die meisten FPGAs und CPLDs diesen Spannungspegel verwenden.

Ich habe auch einige Erfahrungen damit gemacht, einen Assembler/Disassembler für XSVF-Dateien zu schreiben, der Code befindet sich in derselben Github-Bibliothek und wird in diesem Beitrag hier erklärt .