Kann ich einen Bootloader brennen und mit einem AVR-ISP programmieren?

Ich habe überlegt, einige ATMega-Chips zu kaufen, um einfache Realisierungen von Projekten zu erstellen, ohne ein Entwicklungsboard (z. B. Arduino) zu opfern.

Jetzt verstehe ich, dass der Bootloader erforderlich ist, um von einem USB-zu-Seriell-Gerät zu lesen. Der AVR ISP (oder gleichwertig) brennt den Bootloader, dann verwenden die Leute oft entweder ein USB-to-Serial oder das Arduino selbst, um den Chip zu programmieren.

Was um alles in der Welt macht der AVR ISP eigentlich? Wenn es einen Bootloader brennen kann (ist er darin gespeichert, ein generischer für alle AVRs, die er unterstützt?), Warum kann er das Gerät nicht auch programmieren (wie die Leute anscheinend nie anweisen, auch wenn das es einfach macht)

Warum erlaubt Ihnen der ISP auch, sich über USB mit einem Computer zu verbinden, um ihn mit Strom zu versorgen? für benutzerdefinierte Bootloader? Kann es sogar ein kompiliertes Programm in Flash über etwas wie avr-gcc "programmieren" (vorausgesetzt, die Arduino-IDE erledigt Dinge, für die der Bootloader erforderlich ist)

Ich kann einfach nicht mit Kopf und Zahl sagen, was erforderlich ist. Ich strebe nach einem "neuen Chip programmieren, in die Steckdose stecken und loslegen" ohne mehrfaches Brennen oder Programmieren.

Antworten (4)

Sie können einen ATMega vollständig mit dem AVR ISP programmieren.

Ich habe Anfang dieses Jahres einen MIDIpal gebaut. Der mitgelieferte ATMega-Chip war nicht vorprogrammiert. Nachdem ich die Platine verlötet hatte (viel einfacher als ich erwartet hatte. SMT ist nichts zu befürchten), steckte ich meinen TinyISP ein und lud den Binärcode darauf herunter. Jetzt funktioniert mein MIDIpal wie angekündigt.

Ich bin mit dem Bootloader-Teil nicht vertraut, stelle mir aber vor, dass er in der von Mutable bereitgestellten Firmware enthalten sein muss.

Das ist dann gar nicht schlimm, danke. Ich frage mich, warum in aller Welt die Leute vorschlagen, USB-to-Serial für einmalige Projekte zu manipulieren. Anscheinend kompiliere ich eine .hex-Datei (wird sich ordentlich anfühlen!) Mit avrdude? oder so. Verwenden Sie dann das a-Programm mit dem Adapter, um die Binärdatei zu installieren.
Ich denke, das USB-zu-Seriell-Kabel ist die billigste Lösung. Aber Sie können einen ISP für weniger als 20 Dollar bekommen oder bauen, also bin ich einfach diesen Weg gegangen.

Was um alles in der Welt macht der AVR ISP eigentlich?

Es ermöglicht das Lesen/Schreiben aller Speicherbereiche der AVR-Chips (Flash, Eeprom und Fuses). Das „IS“ in ISP bedeutet „In-System“: Sie müssen den Chip nicht aus der Schaltung entfernen, um ihn zu programmieren (früher gab es „externe“ Programmierer, Sie mussten den Chip aus Ihrer Schaltung ziehen, einfügen es in den Programmierer, dann fügen Sie es wieder in Ihre Schaltung ein ... mühsam!)

warum kann es das Gerät nicht auch programmieren (wie die Leute anscheinend nie anweisen, auch wenn das es einfach macht)

Es kann! Sie können absolut und sicher auf einen Bootloader auf dem Chip verzichten. Stellen Sie einfach sicher, dass der Chip so konfiguriert ist, dass er von Adresse 0 bootet, anstatt aus dem Bootloader-Bereich zu booten. Bei AVRs wird dies durch Sicherungen konfiguriert.

avr-gcc ist der Compiler, der C/C++-Programme in Maschinencode umwandelt (der letztendlich als .hex-Datei gespeichert wird).

avrdude ist ein "Programmlader", der für das Lesen/Schreiben von Daten auf den Chip über eine Programmierschnittstelle (z. B. verschiedene Arten von ISP-Programmierern) verantwortlich ist. Hier ist der avrdude-Befehl zum Schreiben von FIRMWARE.hex auf einen atmega328P-Chip über einen AVR ISP mkII-Programmierer, der über USB an den Computer angeschlossen ist:

avrdude -V -p m328p -P usb -c avrispmkII -U flash:w:FIRMWARE.hex:i

Warum erlaubt Ihnen der ISP auch, sich über USB mit einem Computer zu verbinden, um ihn mit Strom zu versorgen? für benutzerdefinierte Bootloader? Kann es sogar ein kompiliertes Programm in Flash über etwas wie avr-gcc "programmieren" (vorausgesetzt, die Arduino-IDE erledigt Dinge, für die der Bootloader erforderlich ist)

Wenn Sie einen Chip flashen müssen, müssen die Daten vom Computer zum Chip übertragen werden, richtig? Kein Wunder also, dass der ISP-Programmierer sowohl mit dem Chip als auch mit dem Computer verbunden ist.

Ich schlage vor, dass Sie einige nicht auf Arduino bezogene Tutorials zur AVR-Programmierung lesen . Kehren Sie zu den Grundlagen zurück. Denken Sie daran, dass die Vorgehensweise im Arduino-Land (das Programm über einen USB-> seriellen Chip an einen benutzerdefinierten Bootloader senden, der auf dem Chip läuft) nicht die Norm ist. Das Arduino-Zeug ist eine Lösung für ein bestimmtes Problem (wie können Sie Leute dazu bringen, Programme ohne Programmierer an einen Chip zu senden?), Aber für Ihr Projekt und Ihre eigene geistige Gesundheit müssen Sie es nicht replizieren. Kaufen Sie einfach einen 25-Dollar-Programmierer, stecken Sie einen ISP-Sockel auf Ihr Board und vergessen Sie für eine Weile USB, FTDI-Chips, Bootloader usw.

Bootloader werden nur benötigt, wenn Sie möchten, dass Ihr System über andere Mittel als den ISP-Programmierer vor Ort aktualisiert werden kann. Es gibt serielle Bootloader (wie die von Arduino), SD-Karten-Bootloader, MIDI-Bootloader, Bootloader für USB-Massenspeichergeräte usw.

Was um alles in der Welt macht der AVR ISP eigentlich?

Das Dokument AVR910: In-System Programming von Atmel ist wahrscheinlich ein guter Anfang, um ein besseres Verständnis zu bekommen. Es beschreibt das erforderliche und erwartete Verhalten für die ISP-bezogenen Pins und dokumentiert auch das Programmierprotokoll, das vom Programmierer verwendet wird, und gibt Beispiele für Befehle und Antworten für Befehle wie „Programming Enable “ und „Read Device Code“ .

Feldprogrammierung ist in diesem Markt wichtig. Mehrere Auswahlmöglichkeiten zu haben hilft. Einige Produkte, sowohl von Atmel als auch von anderen, haben einen Bootloader, den wir nicht umprogrammieren können, der es Ihnen ermöglicht, USB oder seriell oder andere auszuwählen, wenn Sie Riemenstifte verwenden. Einige versuchen nur zu erkennen, was Sie tun möchten, und bei anderen erhalten Sie nur eine Auswahl, z. B. jtag oder serial.

Ich mag die AVR-Lösung insofern, als der Prozessor zurückgesetzt wird. Wenn Sie (ich) also etwas Dummes tun (ja, das wurde schon gemacht) und den Prozessor aufhängen (sagen Sie, Sie aktivieren Uhren von der PLL, ohne die PLL korrekt zu konfigurieren), oder Sie konfigurieren die falschen GPIO-Pins neu, um herauszufinden, dass dies die Pins sind, die Sie für die Programmierschnittstelle benötigen. Nun, Sie können mit einem gemauerten Brett oder Chip enden. Das Zurücksetzen des Prozessors schützt uns zumindest vor unserem Selbst.

Die Programmierschnittstelle ist gut dokumentiert. Die Xmegas oder die, mit der ich gespielt habe, verwenden eine völlig andere Schnittstelle als die Tinys und so. Die kleineren sind nur SPI und Sie können sich Zeit nehmen, das Ding zurücksetzen, Kippschalter verwenden und sie von Hand umlegen, wenn Sie möchten. Beim xmega ist das Timing kritisch, man wartet zu lange und der Chip verlässt den Programmiermodus. (es ist kein spi) In jedem Fall ist es gut dokumentiert.

Sie können die handelsüblichen Lösungen verwenden und avrdude oder was auch immer verwenden, aber diese Schnittstellen sind einfach, und Sie können alles verwenden, womit Sie spi generieren können (andere Mikrocontroller, ein Himbeer-Pi, jedes ftdi-Teil / -Board mit mpsse-Anweisungen und den exponierten Pins). , was auch immer). Und die Entwicklung Ihrer eigenen ist keine schwierige Aufgabe. Pädagogisch, und vielleicht möchten Sie in Ihrer Produktionslinie avrdude verwenden oder nicht, oder Sie können es aus irgendeinem Grund nicht.

Ja, diese AVR-ISP-Schnittstelle kann verwendet werden, um einen Bootloader oder eine beliebige Anwendung zu programmieren. Sie müssen nicht das eine mit einer Schnittstelle und das andere mit einer anderen Schnittstelle machen.

Warum dann einen anderen Bootloader verwenden? Nun, ein serieller Bootloader könnte nur einen oder zwei Pins verwenden, oder drei, wenn Sie einen Riemen wünschen, oder im Fall von Arduino einen dritten, um den Chip zurückzusetzen und dann etwas zu senden, bevor der Bootloader an die Anwendung übergibt.

Manchmal möchten Sie also seriell in Ihrem Design für die Feldprogrammierung verwenden, die Pins reduzieren oder das ist einfach Ihre bevorzugte Sache. Sie möchten vielleicht jtag, Sie möchten vielleicht USB oder verwenden in diesem Fall die ganze Zeit den AVR ISP. Einige Chips ermöglichen es Ihnen, Flash-Blöcke zu löschen/schreiben, während Sie auf einem Flash-Block laufen, was bedeutet, dass Sie Ihren eigenen Bootloader mit einem beliebigen Protokoll schreiben können. Was die Arduino-Leute getan haben, sie behaupten, ein Protokoll zu unterstützen, aber schauen Sie sich ihren Bootloader-Code an, um die Wahrheit zu sehen.

Egal, ob Sie Hardware und Software von der Stange verwenden oder Ihre eigene, diese AVR-ISP-Schnittstelle ist wahrscheinlich der richtige Weg, um sie in eine Halterung zu stecken und zu programmieren, dann in eine Steckdose zu stecken und loszulegen, einmal brennen und fertig. Esp, wenn Sie am Ende einen Fehler in der Software haben, können Sie zum Programmierer zurückkehren und neu programmieren. Gelöschte und nicht gelöschte Flashs werden gleichermaßen unterstützt.

Unter dem Strich geht es also um Entscheidungsfreiheit. Programmieren Sie in einer Vorrichtung, bewegen Sie dann das Teil, programmieren Sie an Ort und Stelle, RE-programmieren Sie an Ort und Stelle, Programmiergeschwindigkeit, erforderliche Stifte, Softwareanforderungen, Programmiervorrichtungs-Hardware/Software/Kostenanforderungen. Es gibt nicht die eine Lösung, die alle glücklich macht. Der Anbieter bietet also eine oder zwei oder drei Lösungen an, dann können Sie manchmal Ihre eigenen hinzufügen.

ABER, Sie sollten die Dokumentation des Chipherstellers für das Produkt, an dem Sie interessiert sind, gelesen haben, sie alle bieten Programmierinformationen, ohne diese Dokumentation ist dieses Produkt ein Fehler, weil niemand es in einer Produktionslinie verwenden könnte. Es ist nicht unsere Aufgabe, die Dokumente für Sie zu lesen.