Wie werden Programme in einen Mikrocontroller geschrieben? Welche Rolle spielt JTAG?

Ich kann Programme für einen Arduino schreiben, und alles, was ich tue, ist, ihn anzuschließen und auf "Hochladen" zu klicken. Mein kompilierter Code gelangt in den Programmspeicher des ATMega. Einfach richtig?

Nun, ich würde gerne wissen, was genau im Allgemeinen passiert. Der Mikrocontroller hat etwas Speicher, also gibt es eine Methode, Rohdaten von einem USB-Kabel zu nehmen und in den Mikrocontroller zu schreiben, als wäre es ein Flash-Laufwerk oder so etwas. Ich weiß jedoch zufällig, dass dies nicht möglich ist, es sei denn, ein spezielles Bootloader-Programm ist bereits auf dem Mikrocontroller vorhanden.

Also jetzt bin ich verwirrt. Wie kann ich Programme auf ein Arduino hochladen, wenn es keinen Bootloader hat? Wie programmiere ich andere Mikrocontroller (z. B. einen ARM) ohne die benutzerfreundliche Oberfläche von Arduino?

Bonusfrage: Beim Lesen (und Nichtverstehen) einiger Webseiten habe ich herausgefunden, dass ARM über JTAG programmiert wird. Was macht das genau? Das JTAG-Modul sendet Daten in den ARM, aber welche Daten sendet es genau? Wie kann der ARM neuen Code akzeptieren, ohne dass bereits ein Programm auf dem ARM läuft, das die JTAG-Daten interpretiert und in den richtigen Speicher schreibt?

Datenblatt sagt?
Der Chip, den ich verwende, ist dieser: st.com/content/ccc/resource/technical/document/datasheet/c5/ed/… Wenn die Informationen dort sind, kann ich sie nicht finden
Ein Bootloader kann eine Zustandsmaschine mit Hooks in den Rest der MCU sein. Oder ein paar Worte in Firmware.
Ein Arduino hat einen Bootloader, aber wie kam der Bootloader Ihrer Meinung nach auf den Arduino?

Antworten (1)

Die ATmega µC-Serie verfügt über verschiedene Möglichkeiten, sie zu programmieren:

  • Selbstprogrammierung. Das macht der Bootloader. Es lädt Daten z. B. über die UART-Schnittstelle in den RAM und flasht dann die Nicht-Bootloader-Flash-Speicherseiten.
  • Parallele Programmierung. Bei der traditionellen Methode benötigen Sie dafür ein ziemlich spezielles Programmiertool. Nur erforderlich, wenn Sie die ISP-Programmierung deaktiviert haben, weil Sie den RESET-Pin als GPIO-Pin verwenden wollten. Erfordert das Entfernen des µC aus der Schaltung.
  • ISP-Programmierung. Das ist die einfachste Methode, erfordert ein einfaches Tool, das Sie leicht selbst bauen können, und einige kostenlose Programmiersoftware (avrdude). Manchmal muss der µC aus der Schaltung entfernt werden, aber Designer können beim Zuweisen von GPIOs darauf achten, dies zu vermeiden.
  • DebugWire. ISP auf Steroiden. Verwendet nur den RESET-Pin, benötigt bis vor kurzem ein ziemlich komplexes Tool und eine proprietäre Software. Es muss fast nie der µC aus der Schaltung entfernt werden, da der RESET-Pin normalerweise genau das ist, RESET.

JTAG hingegen ist ein "Standard"-Protokoll und eine Schnittstellendefinition, die mit einer großen Anzahl von Chips verwendet werden kann. Die ursprüngliche Absicht war, die Flipflops, die den internen Zustand eines Geräts darstellen, von außen zu füllen. Es ist eine Testschnittstelle. Heutzutage kann und wird es auch für die Flash-Programmierung verwendet. Die Programmiersoftware muss alles wissen, wie der jeweilige Chip zu programmieren ist, dafür gibt es keinen Standard.

Abgesehen von der Selbstprogrammierung sind alle diese Programmiermethoden in den Chips fest verdrahtet. Die frühesten Versionen von JTAG waren nichts weiter als ein 1000-Stufen-Schieberegister.