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.?
raspberry-pi
jtag
John Burton
quelle
quelle
Antworten:
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-bcm2835gpio
und dann config from verwendeninterface/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 .
quelle
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).
quelle
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.
quelle