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?
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.
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
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.
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.
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.
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
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.
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.
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?
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
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.
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?
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
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.
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.
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.
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.
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