Raspberry Pi als JTAG-Programmierer?

7

Gibt es einen praktischen Grund, warum der GPIO-Port eines Raspberry Pi nicht als JTAG-Programmierer verwendet werden kann, abgesehen von dem offensichtlich nicht trivialen Problem beim Schreiben der Software? Ich frage, weil ich einige Hobbyarbeiten mit der Anbindung einer CPLD an meinen Raspberry Pi mache und es praktisch wäre, sie direkt programmieren zu können, anstatt ein separates JTAG-Gerät und einen separaten Computer zu verwenden.

Gibt es Probleme mit Spannungen, Timing usw.?

John Burton
quelle
Bitbangen jtag aus dem Benutzermodus unter Linux ist wahrscheinlich ein bisschen langsam, aber es ist machbar. Sie könnten in Betracht ziehen, die Funktionalität eines externen jtag-Adapters zu nutzen und ihn für eine höhere Effizienz in ein Kernelmodul zu stecken. Leider sind die GPIO-Details des Himbeer-Pi in der öffentlichen Literatur nicht so gründlich dokumentiert wie die der meisten Prozessoren, die für diese Art von Aufgabe verwendet werden, aber Sie können wahrscheinlich genügend Informationen finden, damit es im Grunde funktioniert.
Chris Stratton
Vielen Dank, für die CPLDs, an denen ich interessiert bin, ist langsam akzeptabel, da die Dateien sehr klein sind, aber das ist eine gute Idee.
John Burton
Ah, ich habe die CPLD-Erwähnung übersehen, was sie vernünftiger machen sollte als große FPGAs oder deren Konfigurationsblitze. Sie können nach Beispielen für parallele PC-Ports als Ausgangspunkt suchen. Oder holen Sie sich die JAM- oder SVF-Player-Quelle oder was auch immer der Anbieter anbietet, und erstellen Sie diese mit einer modifizierten Ausgangsstufe.
Chris Stratton

Antworten:

7

OpenOCD verfügt über einen generischen sysfsgpio-Treiber und hat seit einiger Zeit einen speziellen Raspberry Pi BCM2835-Treiber. AFAICT ist die Geschwindigkeit in Ordnung (z. B. ist das STM32F1-Blinken durch die Blitzgeschwindigkeit begrenzt) - etwa 4 MHz sind leicht erhältlich und für viele Verwendungszwecke Es ist keine externe Schaltung erforderlich. Es gibt auch Unterstützung für SWD , aber es ist noch nicht vorgelagert.

Sie sollten den aktuellen Git HEAD klonen und nativ mit kompilieren --enable-bcm2835gpiound dann config from verwenden interface/raspberrypi-native.cfg.

Einzelheiten entnehmen Sie bitte dem offiziellen README- und Texinfo- Handbuch.

In Bezug auf den Hardware-Teil der Frage: Wenn die Zielspannung gleich oder sehr nahe bei 3,3 V liegt, können Sie die Pins des Raspberry Pi direkt an die Zielschnittstelle anschließen. Wenn nicht, werden Sie möglicherweise (nicht immer benötigt, da viele moderne Mikrocontroller "5 V haben -tolerante "Pins, damit sie ohne Beschädigung an Quellen mit höheren Spannungen als V cc angeschlossen werden können. Überprüfen Sie jedoch zuerst die Dokumentation!) und fügen Sie einen geeigneten Spannungsübersetzungspuffer hinzu.

Um eine bessere Impedanzanpassung zu gewährleisten, wird empfohlen, an jeder Signalleitung in der Nähe des Raspberry Pi-Anschlusses Widerstände der Serie 47-100 Ohm anzubringen. Weitere Informationen finden Sie in der ausführlichen Erläuterung von Michael Schwingen zu Re: High Output Drive Capability in Raspberry Pi .

Paul Fertser
quelle
1

Eine Sache, die ich in Betracht ziehen würde, ist, dass Sie, selbst wenn die Bit-Banging-E / A langsam ist, möglicherweise eine CPLD (langsam) programmieren können, die dann verwendet werden kann, um andere Operationen viel schneller auszuführen. Wenn Sie beispielsweise zehn Ausgangspins D0-D9 hatten, die sich alle am selben E / A-Port befanden, zusammen mit einem Eingangspin, könnten Sie D9 als "Trigger" -Eingang verwenden, an dem sich der Zustand ändert (steigend oder fallend). würde nach einer kurzen Verzögerung (lang genug, damit sich alle anderen Pins setzen können) die CPLD dazu veranlassen, etwas zu tun. D8 könnte auswählen, ob das "Etwas" "Daten auf D0-D7 ausgeben" oder etwas anderes sein soll. D4-D7 könnte dann eine von 16 auszuführenden Operationen auswählen (Aktivieren / Deaktivieren eines Modus, in dem die Ausgänge einfach den Zuständen von D0-D2 folgen).

Superkatze
quelle
0

Sie können eine kleine Schnittstellenschaltung erstellen, die Daten liest, die über die GPIO-Pins kommen, und diese mit den richtigen Spannungspegeln, dem richtigen Timing usw. erneut sendet. Die Spannung muss möglicherweise verschoben werden, wenn der Raspberry Pi mit einer Spannung läuft, die niedriger / höher als die ist CPLD, aber ich habe keine Ahnung über das Timing.

Saad
quelle
Nun, das ist wirklich was ich frage. Da ich meistens ein Programmierer bin, der ein bisschen Elektronik für ein Hobby macht, könnte ich wahrscheinlich den notwendigen Code dafür schreiben, aber ich wollte nur wissen, ob es überhaupt praktisch ist, bevor ich meine Zeit damit verschwendete. Wenn es einen zusätzlichen Adapter benötigt, kann ich auch einfach meinen vorhandenen Programmierer verwenden.
John Burton
Nun, vielleicht ist es möglich, wenn beide mit den gleichen Spannungspegeln laufen.
Saad
Ok, danke, es sieht so aus, als könnten Sie den jtag mit einer Reihe von Spannungen auf dem cpld betreiben, einschließlich 3,3 V, obwohl ich denke, dass er 1,8 V auf dem Board verwendet, das ich habe
John Burton