Forum: Mikrocontroller und Digitale Elektronik AVR-Chip flashen


von Jan (Gast)


Lesenswert?

Ich möchte gerne ein fertig kompiliertes HEX-File auf einen AVR-Chip 
laden (aus Windows od. Linux heraus).gehe ich richtig in der Annahme, 
dass ich da eine firmware auf dem chip brauche, damit er vom system 
erkannt wird? Was brauche ich da genau? Es sollte auch möglich sein, 
dass drittanwender das hex-file uploaden können, also mit einer kleinen 
(freeware?-)software, also quasi ei firmware-update- tool?

von 513 (Gast)


Lesenswert?

Jan schrieb:
> gehe ich richtig in der Annahme,
> dass ich da eine firmware auf dem chip brauche, damit er vom system
> erkannt wird?
Nicht zwingend, mit einem ISP Programmer geht es auch one Bootloader.

von Ingo L. (corrtexx)


Lesenswert?

Du brauchst nur ein Programmer (z.B. AVR ISP mk2) und AtmelStudio oder 
eine anderes Tool zum flashen.

Jan schrieb:
> gehe ich richtig in der Annahme,
> dass ich da eine firmware auf dem chip brauche, damit er vom system
> erkannt wird?
Nein, brauchste alles nicht

: Bearbeitet durch User
von 513 (Gast)


Lesenswert?

Mehr zum Thema hier: AVR In System Programmer

von bl (Gast)


Lesenswert?

Einen AVR mit Usb, oder eine Bastellösung mit V-Usb wäre am sinnvollsten 
wenn der Endnutzer die Möglichkeit haben soll den Code zu erneuern.
Möglich wäre es auch über Uart oder mit einer SD - Karte.
Dafür mußt du dir aber immer noch einen SPI - Programmiergerät zulegen.

Wenn es nur um einen kleinen Attiny geht, könntest du auch einen 
"cheepit sparrow" verwenden der über die Audioleitung programmiert wird.

Einfach wird das Vorhaben als Anfänger allerdings nicht.

von Jan (Gast)


Lesenswert?

ja genau, der endbenutzer sollte das ohne zusätzlich hardware können, es 
muss also der USB-anschluss irgendwie erkannt werden.
was meinst du mit AVR mit Usb? gibt es da spezialmodelle? und was ist 
V-Usb?

Meinst du damit so etwas wie einen bootloader beim Arduino? Gibt es 
etwas ähnliches auch in der nicht-arduino welt?


> Einen AVR mit Usb, oder eine Bastellösung mit V-Usb wäre am sinnvollsten
> wenn der Endnutzer die Möglichkeit haben soll den Code zu erneuern.

von 2K (Gast)


Lesenswert?

Jan schrieb:
> ja genau, der endbenutzer sollte das ohne zusätzlich hardware
> können, es
> muss also der USB-anschluss irgendwie erkannt werden.
> was meinst du mit AVR mit Usb? gibt es da spezialmodelle?
ATMEGA32U4 zB ,ist auch in der Arduino Welt zu finden

 und was ist
> V-Usb?

Virtual USB , google kann helfen


> Meinst du damit so etwas wie einen bootloader beim Arduino? Gibt es
> etwas ähnliches auch in der nicht-arduino welt?

Bootloader gibt es viele

>> Einen AVR mit Usb, oder eine Bastellösung mit V-Usb wäre am sinnvollsten
>> wenn der Endnutzer die Möglichkeit haben soll den Code zu erneuern.

von Jan (Gast)


Lesenswert?

Ok, ich habe mir das Projekt auf
https://www.obdev.at/products/vusb/bootloadhid.html
angesehen, aber ich weiß nicht genau, wo ich am besten ansetzen soll.

Ich beschreibe mal kurz mein Problem:

Ich möchte gerne aus der Arduino-Welt in die Standard C++ - Welt 
wechseln. Hardwaremäßig sollte das Programmieren eines Arduino UNO oder 
Mega auch mit Standard-Tools (WinAVR,...), ganz ohne Arduino IDE möglich 
sein. Ich habe einen Mega2560 und einen UNO. Kann ich einen der beiden 
als ISP verwenden, um den Bootloader des anderen zu programmieren? Oder 
soll ich mir einen zusätzlichen ISP zulegen. Welchen würdet ihr 
empfehlen?




2K schrieb:
> Virtual USB , google kann helfen

von Klaus (Gast)


Lesenswert?

Es verwirrt mich, dass Du von dem "Drittanwender" oder "Endanwender" 
schreibst. Meinst Du damit Dich selbst oder willst Du ein Hex-File an 
jemanden Anderen weiter geben? Möglicherweise auch verkaufen? Ich frage 
hauptsächlich wegen der technischen und Handhabungs-Folgerungen daraus.

Bei den USB-HID Geschichten handelt es sich darum, dass man ein Programm 
auf den AVR laden kann, ohne das ein Treiber in Windows geladen werden 
muss. In dem AVR muss also schon ein Bootloader enthalten sein. Ich 
würde das aus eher nicht-technischen Gründen nicht so machen, aber es 
ist ein möglicher Weg.

Technisch gesehen müsste man einen Arduino zum ISP umfunktionieren 
können. Vielleicht gibt es da sogar schon einen "Sketch" dazu. Ob es 
auch Lösungen gibt die mit dem AVR-Studio zusammen arbeiten weiss ich 
nicht. Man könnte sie schreiben, aber ob Du das kannst, weisst Du im 
Moment besser als ich.

Langfristig gesehen ist ein ISP für die Entwicklung vorzuziehen, weil Du 
im Laden eher einen unprogrammierten AVR bekommst als einen der einen 
Bootloader enthält.

Man muss auch wissen, dass jeder Bootloader sozusagen eine Insellösung 
darstellt. Protokoll und Verhalten sind nicht standardisiert und können 
eklatant voneinander abweichen. Wenn Du also tatsächlich Software an 
Kunden ausliefern willst, die sie dann selbst programmieren können 
sollen, musst Du ihnen entweder auch einen AVR mit Deinem Bootloader 
liefern oder auf einem so weit verbreiteten Bootloader aufsetzen, dass 
es den Kunden leicht fällt ihn zu bekommen.

Ich denke allerdings auch, dass Du als jemand der bisher nur mit Arduino 
zu tun hatte, erst einmal noch einen weiten Weg vor Dir hast, bis Du gut 
C oder C++ programmieren kannst. Arduino hat Dich bis jetzt sehr von 
vielen Details isoliert, die Du nun erst einmal lernen musst. Das ist ja 
gerade der Zweck dieses Arduino-Paradigmas.
Von daher ist für Dich alleine ISP das wichtigste. So in einem oder zwei 
Jahren, kannst Du dann mal anfangen zu überlegen, wie und was Du Kunden 
anbieten willst.
Diese letzten beiden Absätze könnte man mit mehr Detailkenntnisse über 
Deine Vorhaben noch relativieren. Aber im Groben ist das so weit nicht 
falsch.

von Jan H. (jan_m_h)


Lesenswert?

Wenn du einen Bootloader suchst, der ohne spezielle Treiber läuft, kuck 
dir mal SOUNDRX hier im Forum an. Du müsstet zwar die hex-Dateien 
vorher übersetzen, aber ein anderer Nutzer kann es über 
Soundkarte/MP3-Player oder Handy mit einem AUX-Kabel flashen.
Und so was hat fast jeder irgendwo rumliegen.

von Jan (Gast)


Lesenswert?

Hallo Klaus,

Ja, es geht darum, dass ich das Hex-File als Firmware-Update weitergeben 
möchte. Es geht also um einen AVR, der einen Bootloader drauf hat, damit 
ich und Endkunden ein FW- Update ohne externen Programmer machen können. 
Bis dato habe ich genau das in der Arduino-Welt realisiert. (Bootloader 
ist ja schon drauf, Hex-File flashen geht mit "XLoader"). Jetzt möchte 
ich gerne eine ähnliche Situation ohne Arduino-Software herstellen, am 
besten (vorerst) mit der Hardware, die mir zur Verfügung steht, nämlich 
Arsuino UNO und Mega2560.
Wo fange ich d also am besten an?

laus schrieb:
> "Drittanwender" oder "Endanwender" schreibst. Meinst Du damit Dich
> selbst oder willst Du ein Hex-File an jemanden Anderen weiter geben?

von Norbert S. (norberts)


Lesenswert?

Nimm einen einfachen ISP wie z.B. USBTiny oder USBasp, die gibts für 
wenige € vom Chinamann.
Dann AVRdude und Du stellst dem Endanwender ein Batch-Script dafür zur 
Verfügung. Das kriegt man mit relativ wenig Aufwand idiotensicher hin.
Einen "allgemeinen" Bootloader gibt es eher nicht, ist alles proprietär.
Und der Endanwender braucht dann auch immer eine Anwendung die vom PC 
aus den Bootloader anspricht.
Nachteil: Der Endanwender braucht den (billigen) ISP. Alles Andere 
spricht aber dafür. Der wirkliche Vorteil eines Bootloaders ausser bei 
sowas wie Arduino hat sich mir sowieso nie erschlossen, wenn der µC 
nicht von Haus aus USB kann.

Gruß,
Norbert

von Axel S. (a-za-z0-9)


Lesenswert?

Jan schrieb:

> ... es geht darum, dass ich das Hex-File als Firmware-Update weitergeben
> möchte. Es geht also um einen AVR, der einen Bootloader drauf hat, damit
> ich und Endkunden ein FW- Update ohne externen Programmer machen können.
> Bis dato habe ich genau das in der Arduino-Welt realisiert. (Bootloader
> ist ja schon drauf, Hex-File flashen geht mit "XLoader"). Jetzt möchte
> ich gerne eine ähnliche Situation ohne Arduino-Software herstellen

Dann mach doch einfach. Du brauchst dazu keine "Arduino-Software". Dem 
µC und dem Bootlader ist völlig egal, ob das .hex File aus der 
Arduino-IDE gefallen ist oder aus dem gcc oder gar von vom Luna-Compiler 
erzeugt wurde. Es muß lediglich die richtige Ladeadresse haben (ich 
kenne mich mit dem Arduino-Krempel gar nicht aus, vielleicht kann da 
jemand anderes was dazu sagen).

Also: einfach passende Arduino-Hardware mit dem Arduino-Bootloader 
verwenden und fertig.

von Jan (Gast)


Lesenswert?

das ist aber nur der halbe weg von dem, was ich erreichen möchte. Ich 
möchte die arduino-hardware verwenden, ohne dass sie als 
arduino-hardware erkannt wird - so, als ob ich mir die komponenten ganz 
ohne arduino selbst zusammengestellt hätte. Oder anders gesagt: wie 
müsste ich vorgehen, wenn ich ein pcb mit einem avr-chip ohne bootloader 
und einer USB->seriell-Schnittstelle vor mir hätte? Welchen bootloader 
sollte ich dan verwenden? Inwiefern muss der an die hardware anpassen? 
Gibt es keinen "allgemeinen" bootloader, der zu einem atmega2560 passt? 
wenn nicht, was genau macht den bootloader denn so 
anwendungs-spezifisch? Der atmega-chip ist ja in seinem pin-layout immer 
der gleiche, egal, ob er sich auf einer arduino-platine oder einem 
anderen pcb befindet, oder? Der chip kann ja nicht hardware-programmiert 
werden wie ein fpga z.b. Wenn er also hardwaremäßig immer gleich ist, 
inwiefern ist ein bootloader dann umgebungs-spezifisch?

von Norbert S. (norberts)


Lesenswert?

Hi,

weil der Bootloader ein Programm ist, das ganz am Ende vom Flash sitzt 
und beim Start oder aus der eigentlichen Firmware heraus angesprungen 
wird.
Der BL nimmt dann über die Schnittstelle das Hexfile in Empfang und 
beschreibt damit den Flash. Das Protokol, das Datenformat der Firmware 
(Hex, Bin, könnte alles Mögliche sein), Checksumme, die Schnittstelle - 
da ist nichts festgelegt. Der Bootloader muß zu der Anwendung auf dem 
PC, Android oder sonswas passen und umgekehrt.
Der Bootloader muß erstmal per ISP in den AVR, anders geht es nicht.

Gruß,
Norbert

von Axel S. (a-za-z0-9)


Lesenswert?

Jan schrieb:
> das ist aber nur der halbe weg von dem, was ich erreichen möchte. Ich
> möchte die arduino-hardware verwenden, ohne dass sie als
> arduino-hardware erkannt wird

Warum? Und warum sagst du nicht einfach von Anfang an klipp und klar 
was genau du erreichen willst?

> - so, als ob ich mir die komponenten ganz
> ohne arduino selbst zusammengestellt hätte.

Fertig gekaufte Arduino-Hardware sieht genauso aus wie selber zusammen- 
gebastelte - zumindest solange du den Arduino-Bootloader verwendest.

Auch das ist Absicht.

> Oder anders gesagt: wie
> müsste ich vorgehen, wenn ich ein pcb mit einem avr-chip ohne bootloader
> und einer USB->seriell-Schnittstelle vor mir hätte? Welchen bootloader
> sollte ich dan verwenden? Inwiefern muss der an die hardware anpassen?
> Gibt es keinen "allgemeinen" bootloader, der zu einem atmega2560 passt?

Es gibt gefühlt 1000 Bootloader in der freien Wildbahn. Die 
unterscheiden sich darin, über welche Schnittstelle sie angesprochen 
werden, welche µC sie unterstützen, welche Tools (für welche 
Computer/Betriebssysteme) es zum Programmieren gibt, ob sie 
Verschlüsselung unterstützen etc. pp.

Mach eine Liste der Anforderungen die du an den Bootloader hast und dann 
such dir einen passenden aus.

> wenn nicht, was genau macht den bootloader denn so
> anwendungs-spezifisch?

Na gar nichts. Das ist doch gerade der Punkt an einem Bootloader. Er muß 
allerdings an die Hardware angepaßt sein. Das geht i.d.R. so, daß man 
ein paar Makros in einem Headerfile passend setzt und dann den 
Bootloader compiliert.

> Wenn er also hardwaremäßig immer gleich ist,
> inwiefern ist ein bootloader dann umgebungs-spezifisch?

Der Bootloader ist ein Programm. Und als solches ist er so spezifisch 
wie jedes andere Programm auch. Allerdings hast du mit einem Bootloader 
ein Henne-Ei-Problem. Um den Bootloader (das Programm!) in den leeren µC 
zu bekommen, brauchst du eine Programmiermöglichkeit. Und offensichtlich 
kann das nicht der Bootloader sein. Arduino löst das dadurch, daß der 
Hersteller den Arduino-Bootloader für dich schon in den µC programmiert.

von Jan (Gast)


Lesenswert?

Ja, genau! Ich suche daher eine kombination aus bootloader (den uch per 
isp hochlade)und einer windows-software, mit der ich dann ein .hex-file 
(per USB) auf den avr-chip flashen kann. Gibt es da keine fertige lösung 
ausserhalb der arduino-welt, ähnlich einem bios auf dem pc, das ja auch 
immer gleich ist, egal welchee os-version ich dann aufspiele?


Norbert S. schrieb:
>Das Protokol, das Datenformat der Firmware
> (Hex, Bin, könnte alles Mögliche sein), Checksumme, die Schnittstelle -
> da ist nichts festgelegt. Der Bootloader muß zu der Anwendung auf dem
> PC, Android oder sonswas passen und umgekehrt.
> Der Bootloader muß erstmal per ISP in den AVR, anders geht es nicht.

von Karl M. (Gast)


Lesenswert?

Sorry Jan,

ich greife mir schon mehrfach an den Kopf, von Kompetenz sehe ich hier 
nichts.

Viele Tipps und Links wurden schon genannt.
Nun musst Du auch mal lesen, verstehen und selbst entscheiden.

von Jan H. (jan_m_h)


Lesenswert?

Jan schrieb:
> ähnlich einem bios auf dem pc, das ja auch immer gleich ist, egal
> welchee os-version ich dann aufspiele?

Ein Bootloader ist ein Programm auf dem µC. Am anderen Ende der 
Verbindung muss aber auch das passende Programm sitzen, sonst klappt 
nichts.
Du musst also immer das dazugehörige PC-Programm an den Endnutzer 
liefern. Das geht ja auch über Link zur Seite des Ersteller des 
Bootloaders. Wenn der Entwickler aber nicht mehr dran arbeitet, könntest 
du Probleme mit zukünftigen Betriebssystemen bekommen.

Bezüglich Hardware des Endnutzers: Damit der nichts spezielles braucht, 
musst du entweder: USB nutzen, einen UART-Bootloader mit USB--> UART auf 
der Platine oder halt SOUNDRX.

Braucht alles nur Standard-Kabel.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Jan schrieb:
> Ja, genau! Ich suche daher eine kombination aus bootloader (den uch per
> isp hochlade)und einer windows-software, mit der ich dann ein .hex-file
> (per USB) auf den avr-chip flashen kann. Gibt es da keine fertige lösung
> ausserhalb der arduino-welt, ähnlich einem bios auf dem pc, das ja auch
> immer gleich ist, egal welchee os-version ich dann aufspiele?

Schau her:

http://www.fourwalledcubicle.com/AVRISP.php

Damit baust Du Dir selber einen AVR ISP mkii in Dein Projekt ein. 
Bootloader ist überflüssig, weil dieses Teil Deinen AtMega direkt per 
ISP programmiert.

fchk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.