Wie programmiere ich einen Mikrocontroller über USB mit JTAG? [geschlossen]

Ich habe einige Schwierigkeiten, JTAG für die Programmierung zu verstehen. Ich habe eine MCU, die nur über JTAG programmiert werden kann. Mit welchen einfachen Chips kann man beginnen, um eine MCU über JTAG zu programmieren? Ich nehme an, ich bräuchte einen Chip (im vorherigen Satz erwähnt), um die über USB empfangenen seriellen Daten in das "JTAG-Äquivalent" umzuwandeln?

Ich versuche, diese MCU zu programmieren: TM4C1294 Cortex M4, die nur über JTAG programmiert werden kann.

EDIT: Viele von euch sprechen über einen FTDI2232-Chip. Aber wie würden Sie einen FTDI-Chip mit der MCU verbinden? Ich meine, der ftdi-Chip macht (soweit ich weiß eine Konvertierung zu TTL und das wars). Sie hätten dann also alle Ihre Daten auf den TX- und RX-Pins. Aber mit JTAG braucht man einen TDI, TDO, TCK und einen TMS Pin. Also denke ich, dass Sie einen anderen Chip brauchen, um die Konvertierung durchzuführen. NEIN?

Eine beliebte Lösung sind die FTDI-Chips, die Codebeispiele bereitstellen: ftdichip.com/Support/SoftwareExamples/MPSSE.htm - wenn Sie das tun, können Sie es wahrscheinlich leicht mit OpenOCD oder ähnlicher Software zum Laufen bringen.
@ pjc50 Ich dachte, dass ftdi-Chips eine Konvertierung in TTL und nicht in das JTAG-Protokoll vorgenommen haben. Sind Sie sicher, dass dies für mich funktionieren würde? Ich versuche, diese MCU zu programmieren: TM4C1294 Cortex M4
Der FT2232 ist ein anderer FTDI-Chip als der FT232, der häufig für USB-UART verwendet wird. Während der FT2232 das immer noch kann, fügt er zusätzliche synchrone serielle Modi hinzu, die möglicherweise für jtag & swd nützlich sind.

Antworten (2)

BEARBEITEN.

Das ist ein Cortex-m-basierter MCU, der in diesem Fall ARM SWD verwendet, was wir als Jtag verwenden. Sie nennen es ein serielles Jtag, dessen Jtag bereits seriell war, aber sie nehmen angeblich die vier Jtag-Signale (TMS, TCK, TDO, TDI) und serialisieren, habe ich mich nicht mit den Details befasst. Arm verwendet es, weil es Signale auf dem Kern speichert (Pins auf dem Teil). Aufgrund der Popularität der Cortex-M-Geräte und entweder sie haben diese immer verwendet oder sicherlich alle aktuellen Kerne verwenden diese Schnittstelle, ist es einfach, Zugriff auf Tools zu erhalten.

Jemand hat gerade nach dem verbundenen Launchpad gefragt, das diesen Teil verwendet. Dieses Launchpad macht eine gemeinsame Sache, die Sie heute bei Eval-Boards sehen. Sie stellen einen Mikrocontroller vor, der im Grunde eine USB-zu-JTAG/SWD-Schnittstelle ist, und dann den Ziel-Eval-MCU, mit dem Sie spielen können. Das vordere ist nicht, damit zu spielen, es ist die Debugger-Schnittstelle, also müssen Sie keine kaufen. Da es sich häufig um eine MCU derselben Firma und nicht um ein generisches USB-zu-E / A-Gerät (FT2232) handelt, verfügt es über eine Software mit einem Protokoll, das sie ausgewählt / erfunden haben. oft proprietär, manchmal geheim. In diesem Fall können Sie lm4flash verwenden, um es zu programmieren (unter Linux) oder offensichtlich die von TI bereitgestellten Tools unter Windows. lm4 ist, weil ti luminary micro gekauft hat, das diese stellaris-Produktlinie hatte (die ersten Cortex-m-Produkte), und den stellaris-Namen für ein bisschen und die lm4-Teilenummern beibehalten hat, habe dann irgendwann alles in tiva c geändert, aber das lm4flash-tool hat den namen nicht geändert, musste es nicht. das Protokoll ist im wesentlichen im Tool lm4flash dokumentiert.

Ich glaube, Sie können das Front-End des angeschlossenen Boards für diese MCU als Programmierer für andere MCUs verwenden, die nicht auf der Platine sind. Es gibt einen Anschluss, mit dem Sie dieses Launchpad zum Programmieren von MCUs in Ihrem Projekt verwenden können, und in diesem Fall würden Sie es einfach tun Verwenden Sie die ti-Toolchain oder so etwas wie lm4flash.

Ti hat auch ein msp432-Launchpad, das wiederum wie die meisten dieser Boards vorne eine MCU als USB-Debugger hat, dann eine zweite, die die Evaluierungs-MCU ist, mit der man spielen kann. Das msp432-Launchpad verwendet ein anderes Protokoll, das dem CMSIS-DAP entspricht, von dem ich annehme, dass ARM versucht, dieses Problem von proprietären USB-Debuggern für eine gemeinsame Arm-SWD-Schnittstelle zu lösen. Werden sehen, wo es hinführt, aber wie bei den meisten dieser Boards können Sie das Debug-Ende des Boards elektrisch oder manchmal physisch trennen und es als Programmierer für ihren Teil in Ihrem Projekt verwenden, und da es sich um eine gemeinsame Arm-SWD-Schnittstelle handelt Auf der MCU-Seite können Sie Marken kreuzen, Sie sollten sich mit dem Ti-Header nicht auf Ti Mcus beschränken müssen. hängt von der verwendeten Software ab.

was zum stlink von st führt, ihre eval-boards haben einen st-mikrocontroller vor dem eval-mikrocontroller, einige von ihnen mit dem debug-ende können sie das board physisch abbrechen, wenn sie es generisch verwenden möchten. und wie cmsis-dap können Sie Tools wie openocd verwenden, mit denen Sie die jtag-ID des Chips angeben und im Grunde markenübergreifend verwenden können. Es gibt auch Stlink-Dongles, die Sie ohne Eval-MCU kaufen können, aber sie kosten 50% bis ein Vielfaches der Kosten eines ST-Discovery- oder Nucleo-Boards, also würde ich für mein Geld einfach ein Discovery- oder Nucleo-Board kaufen und es intakt lassen (das ist eigentlich das, was ich tue) oder es abbrechen. und verwenden Sie dann einfach openocd, um auf das Gerät zuzugreifen. Ich verwende ständig diesen markenübergreifenden Stlink, um mit st, atmels, nxp usw. zu sprechen. Vielleicht werde ich eines Tages das CMSIS-DAP-Frontend eines msp432 ausprobieren.

FT2232 oder andere MPSSE-Lösungen von FTDI. Das mpsse-Design hat dedizierte Pins für uart und jtag, Sie können nicht einfach jedem Pin für die meisten oder alle unterstützten Teile eine Funktion zuweisen. Und für ARM SWD hängt es höchstwahrscheinlich von der Software ab, aber Sie würden sich jemanden ansehen, der es bereits verkabelt und irgendwo auf einer Seite gepostet hat, oder im openocd-Quellcode nachsehen, was er für diese beiden Pins will. Die meisten, wenn nicht alle generischen Jtag-ish-Debugger werden eine "Target Sense Line" setzen, die Sie an die Stromversorgung auf der Ziel-MCU-Seite anschließen und die Unterstützung für 3,3 V oder 1,8 oder 5 V ermöglichen. Ich vermute, es ist das VDDIO für die Zielseite können Sie dieses Ende der Platine mit Strom versorgen (Zielstrom statt Hoststrom). wenn Sie Ihr eigenes Board mit all dem bauen oder einen generischen FTDI-Breakout von Hand verdrahten (das FT2232- oder FT4232-Modul kostet etwa 20 US-Dollar und funktioniert hervorragend als generischer FTDI-Breakout für alle Arten von jtag, seriell, alles, was andere mit einem ftdi machen ) Sie könnten natürlich eine andere 3,3-V-Quelle finden und müssen nicht spüren. Verbinden Sie dann swdio und swclk und bei Bedarf eine Masse, dann verwenden Sie einfach openocd.

Ich denke, der Stützarm von j-link swd, so ziemlich jeder, der weiterhin Jtag-Wiggler herstellen möchte, muss ihn unterstützen, da Arm-basierte Mikrocontroller, die jetzt Cortex-M-basiert sind, anstelle von ARM7TDMI (der den TDI verwendete, TDI, TMS, TCK real jtag).

Einige dieser Mikrocontroller haben andere Programmiermöglichkeiten, itc, spi, seriell, und einige können direkt mit USB programmiert werden, wenn sie über eine USB-Schnittstelle verfügen. Keines davon ist natürlich jtag, alle sind proprietäre Protokolle für diesen Teil oder diese Familie oder diesen Anbieter, einige geschlossen, andere offen. Angesichts der Leichtigkeit, mit der Sie ARM-SWD-Lösungen von der Stange bekommen können, sehe ich mindestens einen Anbieter, der keinen werkseitig programmierten und geschützten Bootloader einbettet, sondern stattdessen eine Open-Source-Lösung zur Verwendung seines Protokolls hat, aber das lässt sich leicht löschen, indem das Board gemauert wird wenn Sie sich jtag nicht bereitgestellt haben. Ein Anbieter war nur jtag, keine andere Lösung. st und nxp haben immer noch uart/serielle Bootloader, die ihre traditionellen Protokolle verwenden. Ich habe mir nicht alle Teile eingehend angesehen, nur eine kleine Auswahl der großen Namen. das könnte noch eine Lösung sein, oder egal welche Marke oder welchen Core-Prozessor Sie IMMER (okay, vielleicht nicht immer für einmalig programmierbare oder Geräte, die ihre eigenen Flashs nicht intern programmieren können) Ihren eigenen Bootloader schreiben können. Je nachdem, wo Ihr Produkt verwendet wird, ist es nicht ungewöhnlich, dass Mäuse und Tastaturen und Geräte, die an einen Computer angeschlossen werden, gerade genug Firmware haben, um sie aufzuzählen, dann lädt der Host-Treiber den Rest der Firmware herunter, sodass einfache Firmware-Updates mit dem Treiber geliefert werden können . Ein früher USB-Mikrocontroller, der EZ-USB mit einem 8051 darin, funktionierte auf diese Weise. Dies ist eine Option für diese Art von Anwendungsfall, bei dem sich zusätzliche Software auf der anderen Seite der USB-Schnittstelle Ihres Produkts befindet. Wahrscheinlich müssen Sie zunächst noch etwas Firmware auf das Gerät laden, und dann wird der Rest der Firmware bei Enumeration/Driver Init heruntergeladen.

Ich versuche, diese MCU zu programmieren: TM4C1294 Cortex M4, die anscheinend nur über JTAG programmiert werden kann. Ich bin mir nicht sicher, ob ein ftdi2232, der eine Konvertierung in TTL durchführt, funktionieren würde, da TTL nur einen RX- und TX-Pin benötigt. Während JTAG TDI, TDO, TDCLK, (etc..?)

Welchen Chip verwendest du? Es gibt (leider) keine universellen Standards für USB-JTAG-Kabel, daher hängt es davon ab, welchen Chip und welche Toolchain Sie verwenden. Wenn Sie so etwas wie einen ARM-Prozessor mit einer GCC-Toolchain verwenden, können Sie Ihren Chip wahrscheinlich mit OpenOCD programmieren. In diesem Fall gibt es eine Reihe von Optionen für JTAG-Kabel, von denen die billigsten auf FTDI FT2232-Chips basieren. Der FTDI-Chip könnte auch direkt auf Ihrem Board installiert werden, wenn Sie möchten. Ein Vorteil der FT2232-Chips besteht darin, dass sie JTAG und einen USB-UART über dieselbe USB-Verbindung bereitstellen können. Bei anderen Chips müssen Sie möglicherweise proprietäre Software des Chipherstellers verwenden, die nicht unbedingt Kabel von Drittanbietern oder FTDI-basierte Kabel unterstützt.

+1 Es gibt mehr Chips als nur den FT2232 von FTDI, die MPSSE unterstützen. der 2232 ist der Klassiker, wenn Sie so wollen, und ein Teil der Software verwendet einen FT2232-Treiber, unterstützt aber wirklich eine Reihe von FTDI-Produkten. Hinweis zum OP: Nicht alle FTDI-USB-Chips unterstützen mpsse.
Die Signale mögen Standard sein, aber das USB-Protokoll zum Ansteuern einer JTAG-Schnittstelle ist es nicht. Auch die Pinbelegung und Anschlüsse sind nicht genormt.
@alex.forencich Ich dachte, dass ftdi2232-Chips eine Konvertierung in TTL und nicht in das JTAG-Protokoll durchgeführt haben. Beim FTDI-Chip werden die Daten also über einen TX- und einen RX-Pin übertragen. Kann ich einfach die TX- und RX-Pins vom ftdi-Chip an die TDI- und TDO-Pins meiner MCU anschließen? Was ist mit der TDCLK-Leitung, die auch für JTAG verwendet wird? Sind Sie sicher, dass dies für mich funktionieren würde? Ich versuche, diese MCU zu programmieren: TM4C1294 Cortex M4
Sie können kein Breakout-Board verwenden, das nicht alle Pins ausbricht. Werfen Sie einen Blick auf das Gerätedatenblatt, um zu sehen, welche Pins Sie für jtag im mpsse-Modus benötigen. Ich denke, die UART RX- und TX-Pins entsprechen TDI und TDO, aber Sie müssen noch TMS und TCK verbinden.
@alex.forencich, in der Tat. Und an welche Pins des ftdi-Chips schließe ich TMS- und TCK-Pins der MCU an?
Überprüfen Sie den mpsse-Abschnitt des Datenblatts auf den spezifischen Chip, den Sie haben.