Wie werden Daten in den Speicher des Mikrocontrollers übertragen?

Ich arbeite seit einiger Zeit mit Arduino und dachte daran, AVR-Mikrocontroller im Steckbrett zu verwenden. Ich habe mehrere Tutorials zum Übertragen von .hex-Dateien auf den AVR-Mikrocontroller gesehen. Sie zeigten, wie man den USB-Programmierer verwendet, um die .hex-Datei zu übertragen, aber wenn ich sagen möchte, dass ich wissen möchte, wie man einen USB-Programmierer zum Laufen bringt, wie ist die Struktur eines USB-Programmierers? Ich habe nichts gefunden, kann mir jemand eine gute Antwort geben, wie die .hex-Datei in den Speicher des Mikrocontrollers übertragen wird, dh Codesegment im Speicher.

Danke,

Antworten (1)

Es gibt zwei Möglichkeiten, ein AVR-Gerät zu programmieren.

Die erste erfolgt über einen externen Programmierer, der eine Schnittstelle mit "versteckter" Hardware auf dem Chip herstellt. Die häufigste Form davon ist ISP, beschrieben in AVR910 . Es gibt auch andere Methoden, Einzelheiten finden Sie im Datenblatt des entsprechenden AVR-Geräts.

Die andere ist die Selbstprogrammierung, bei der Code auf dem AVR-Gerät ausgeführt wird, um die zu programmierenden Daten über einen oder mehrere Pins auf dem Chip zu akzeptieren und dann spezielle Opcodes zu verwenden, um die Daten in Flash und EEPROM zu schreiben. Dies ist in AVR109 beschrieben .

Beachten Sie, dass "Programmierung per USB" eigentlich Selbstprogrammierung ist, bei der der Bootloader eine serielle Verbindung öffnet und die Programmiersoftware die Daten über diese serielle Verbindung sendet. Dies gilt sowohl für Geräte mit separatem USB-Schnittstellenchip wie dem Arduino Uno als auch für Geräte mit integrierter USB-Unterstützung wie dem Arduino Leonardo.

Selbstprogrammierung aktualisiert einen AVR, der zuvor programmiert wurde, um diese Funktion zu unterstützen (wie Arduino); aber ein brandneuer, nie programmierter AVR-Chip erfordert ISP (In System Programming), richtig?
@MarkU: Es hängt davon ab, von welchem ​​​​Gerät Sie sprechen. Sicherlich kommt der ATmega328 ab Werk komplett leer, aber der ATmega32U4 kommt vorprogrammiert mit einem USB-basierten Bootloader.