Ist JTAG die Standardmethode zum Programmieren von ARM-Prozessoren?

Irgendein Elektrotechniker hat mir mal gesagt, dass jeder ARM M3 Prozessor gleich geflasht werden kann, egal von welchem ​​Hersteller er kommt.

Ich nehme an, er meinte die Verwendung von JTAG, oder gibt es einen anderen Weg?

Übrigens, ich möchte einen leeren ARM-Prozessor ohne Bootloader flashen.

ARM-basierte Mikros werden über JTAG oder SWD geflasht. Einige akzeptieren die Programmierung über beide Protokolle, während andere das eine oder andere erfordern. Beispielsweise ist der Nordic Semiconductor nRF52 nur SWD. Und nur weil alle M3s auf die gleiche Weise geflasht werden können, heißt das nicht, dass die Software frei austauschbar ist.

Antworten (1)

Ich nehme an, er meinte die Verwendung von JTAG, oder gibt es einen anderen Weg?

Wahrscheinlich nicht. ARM hat seinen eigenen Debugging-Bus-Standard – SWD (Single Wire Debug), der sehr gut spezifiziert ist. JTAG hingegen ist lediglich ein elektrischer Standard und ein Standard auf Schieberegisterebene, und es liegt an den Geräteherstellern, JTAG-Endpunkten und -Aktionen eine Bedeutung zu geben.

SWD-Programmierer sind für <5€ zu haben. Suchen Sie nach Produkten mit der Bezeichnung "STLink v2-kompatibel" oder so. Das ST im Namen rührt daher, dass sie auf dem Protokoll basieren, dass STmicro USB-zu-SWD-Adapter zwischen Hostrechner und Adapter sprechen, aber da sie nur SWD „transportieren“, funktionieren sie mit jedem SWD-kompatiblen Mikrocontroller.

Auf den meisten Entwicklungssystemen möchten Sie OpenOCD als "Treiber" für diese Geräte verwenden, damit Sie Bilder einfach flashen können (entweder direkt über OpenOCD oder mit zB GDB's load). Wenn Sie mit einem absurden Betriebssystem festsitzen, das selbst für generische Geräte spezielle Treiber benötigt, müssen Sie wahrscheinlich die Tools von ST installieren.

Übrigens, ich möchte einen leeren ARM-Prozessor ohne Bootloader flashen.

Ja, das klingt nach einem klassischen Fall für SWD – ARM bietet Hardware dafür in seinen Kernen an, und die meisten Hersteller entscheiden sich dafür, diese zu verwenden und Pins zuzuweisen.

Beachten Sie auch, dass die meisten Hersteller (einschließlich ST) ihre "leeren" ICs mit einer Art Bootloader ausliefern, über den Sie Firmware über eine serielle Schnittstelle oder sogar USB in das Gerät laden können – suuuuper praktisch für die Herstellung.

Für ein bisschen Diskussion über SWD empfehle ich eigentlich (aus reinem Lesespaß) PoC||GTFO 0x10, S. 26 , das mit einer Einführung in die Debugging-Infrastruktur von ARM und SWD als Protokoll beginnt und dann weitergeht um zu erklären, wie man SWD-verbundene ARMs als ausgeklügelte IO-Expander anstelle von unabhängigen MCUs verwendet.

Sie können Ihr Programm also mit SWD auf den Prozessor flashen? Ich dachte, es wäre nur zum Debuggen.
Bei der Produktionsprogrammierung über JTAG oder SWD gibt es Geräte, die mehrere Lasten gleichzeitig für einen höheren Durchsatz unterstützen. Beispiel: elprotronic.com/products?show&id=55 . Außerdem unterstützen viele (die meisten? alle?) Geräte einen seriellen Code-Upload über USB, UART oder was auch immer der Chiphersteller wählt. Dies ist normalerweise nur das Laden von Code und kein Debuggen. Bei den meisten meiner Produkte ist es JTAG/SWD für die Entwicklung und dann die serielle Aktualisierung in der Produktionsumgebung, und manchmal wird der Code vom Chip-Distributor (der normalerweise seriell ist) vorinstalliert.
Die Programmierung von MCU-Flash-Speichern über SWD ist nicht wirklich standardisiert – die Details unterscheiden sich für jeden Anbieter und bis zu einem gewissen Grad für jeden Chip. Was Sie am Ende tun, ist oft, einen Datenpuffer zu schreiben, ein winziges Programm an eine andere Stelle im RAM zu schreiben und dann dieses kleine Programm auszuführen, das die eigentlichen Flash-Speicherschreibvorgänge durchführt. Oder Sie rufen zu anderen Zeiten solchen Code auf, der in das Werks-ROM integriert ist (das möglicherweise auch Bootloader-Funktionalität bereitstellt). Normalerweise können Sie die gleichen Dinge über JTAG-Erweiterungen erreichen - SWD ist im Grunde eine Vereinfachung von JTAG.
@ChrisStratton Ich möchte dem Teil zustimmen, dass die Flash-Programmierung nicht wirklich standardisiert ist, aber hauptsächlich in dem Aspekt, dass Flash nicht immer demselben Adressraum auf AHB zugeordnet ist. Es ist eine sehr "ARM"-Sache, alle Peripheriegeräte einfach im Speicherplatz herumbaumeln zu lassen, und so kenne ich keinen Anbieter, der seinen Flash nicht auch an den normalen Speicherplatz anschließt, auf den Sie über den SWD-AHB-Zugangsport zugreifen können. Um Ihnen noch etwas zuzustimmen: Sie müssen Flash-Schreibvorgänge häufig aktivieren, bevor Sie Flash-Bänke löschen/überschreiben können.
Beachten Sie, dass OpenOCD viele Skripte hat, die bereits verschiedene ICs darstellen und angeben, wo sich der Flash-Speicher befindet und wie darauf zugegriffen wird, sodass Sie nur den Namen der Bilddatei angeben müssen: openocd.org/doc-release/html/…
@MarcusMüller - es ist nicht nur die Adresse, die sich ändert, das eigentliche Verfahren für eine gültige Programmierung ist gerätespezifisch - manchmal wird es veröffentlicht, manchmal ist es "wir werden Ihnen nicht einmal sagen, wie, Sie müssen unsere ROM-Routine aufrufen" . Nicht selten gibt es zusätzliche Details, zum Beispiel kann die Atmel SAM-Serie Fuse-Bits haben, die gesetzt werden müssen, um das Booten vom Flash zu ermöglichen, und kann optional die Adressierung der Flash-Bänke tauschen. Ja, openocd kapselt diese Dinge, aber der Punkt ist, dass es Details zu kapseln gibt, ich musste es für die Einzigartigkeit innerhalb einer unterstützten Familie patchen.
@ChrisStratton genau! Du hast absolut recht; Die wichtige Tatsache hier ist, dass Flash ein herstellerspezifisches Peripheriegerät für den ARM-Kern ist, und Sie müssen sich mit Ihrem Hersteller darüber beraten, wie Sie es verwenden können.
Wow, dieser PoC||GTFO ist wirklich ziemlich erstaunlich!
Nun, es beweist ein Konzept. Andernfalls müsste es zu GTFO.
Also, um alles zusammenzufassen, es gibt KEIN universelles Gerät, um einen ARM-Prozessor zu flashen? Wenn ich einen M3 von einem Hersteller und einen anderen von einem anderen Hersteller habe, können dann beide auf unterschiedliche Weise geflasht werden?
@ user41666 komplizierter als das: Sie können eine SWD-Schnittstelle verwenden, um mit der Hälfte der Chips zu "sprechen", JTAG für die andere Hälfte, aber keine der Schnittstellen gibt an, was zu "sagen" ist, um den Flash zu programmieren. Aber ich halte das nur für ein Detail – man könnte Firmware für einen Chip nicht unverändert auf dem anderen laufen lassen