Forum: Mikrocontroller und Digitale Elektronik Firmwareupdate von USB-Geräten


von Stefan M. (mannitb303)


Lesenswert?

Hallo,

ich habe ein MIDI-Controller für USB gebaut. Als USB-Controller Chip 
kommt ein AT90USB162 mit der LUFA Hiduino Software zum Einsatz und als 
Mikrocontroller ein AT328P.

Das Gerät wird als USB-AUDIO-MIDI Device erkannt und läuft auch als 
solches schon.
Angenommen ich vermarkte das Gerät und stelle ein Firmwareupdate zur 
Verfügung,kann das einfach über USB auf den AT328P geflashed werden, 
ohne spezielles Programmiergerät?

Wie mache ich das bzw. welche Voraussetzungen sind dafür erforderlich?


Danke im voraus...

Grüße

Stefan

von jemand (Gast)


Lesenswert?

Ja, geht über USB.
Dazu gibt es, sofern implementiert, das DFU Interface (Device Firmware 
Update).

Das Gerät muss dann z.b. duch drücken einer Taste am Gerät in den DFU 
Modus versetzt werden, was dazu führt, dass das Gerät vom USB Bus 
getrennt (Softwareseitig) und danach als DFU-Gerät wieder enumeriert 
wird. Das taucht dann mit anderer Bezeichnung wieder im Geräte-Manager 
auf. Dann wird es über eine gesonderte Software neu geflasht.

Dazu gibt es auch bei Atmel ein Paper. Musst du nur nur mal nach suchen.

von Stefan M. (mannitb303)


Lesenswert?

Hallo,

danke für die Antwort.

Wird dann der AT90USB162 oder der AT328P neu geflashed bzw.welcher der 
beiden muss dann in den DFU Modus? Der AT90USB162 soll ja nicht neu 
geflashed werden sondern wenn dann nur der AT328P. Kann man das drücken 
einer Taste auch per Software irgendwie machen (sieht ja nicht 
Professionell aus wenn man da erst was drücken muss)?


Danke

Gruß

Stefan

von Thomas (Gast)


Lesenswert?

DFU ist schon der richtige Weg solange es unter Win einen Treiber gibt. 
Das ist meines Wissens bis einschließlich W7 nicht der Fall. Ich habe 
das deshalb direkt über den  Control EP und vendor Requests eingebaut. 
Alternativ kommt auch noch ein zusätzliches HID Interface in Frage oder 
MIDI sysex.
Wie immer unter USB ist es eine Frage der Treiber. Da dein Gerät den USB 
Audio Class Treiber benutzt kannst du nicht so ohne weiteres einen 
anderen Treiber installieren.
Ich würde dir empfehlen ein zweites Interface in die Descriptoren 
einzubauen was als HId funktioniert in der Hoffnung das dein Chip 
genügend EPs hat.
HId funktioniert immer und du kannst direkt vom Usermode dein Update 
implementieren.

von Wolfgang (Gast)


Lesenswert?

jemand schrieb:
> Das Gerät muss dann z.b. duch drücken einer Taste am Gerät in den DFU
> Modus versetzt werden, was dazu führt, dass das Gerät vom USB Bus
> getrennt (Softwareseitig) und danach als DFU-Gerät wieder enumeriert
> wird.

Warum braucht man dafür eine Taste? Jeder Arduino macht das über die 
DTR-Emulation via USB.

Stefan M. schrieb:
> Angenommen ich vermarkte das Gerät und stelle ein Firmwareupdate zur
> Verfügung,kann das einfach über USB auf den AT328P geflashed werden,
> ohne spezielles Programmiergerät?

Das kommt auf dein Programm drauf an. Der AT90USB162 kann z.B. als 
Programmiergerät für den ATmega328 programmiert sein. Du musst ihn nur 
für das FWUpdate in den "Programmiergerät"-Modus versetzen.

Warum eigentlich 2 µCs und nicht ein ATmega32u4 o.ä.?

von Clemens L. (c_l)


Lesenswert?

Stefan M. schrieb:
> Angenommen ich vermarkte das Gerät und stelle ein Firmwareupdate zur
> Verfügung,kann das einfach über USB auf den AT328P geflashed werden,
> ohne spezielles Programmiergerät?

Du solltest über den selben Mechanismus (DFU, HID, oder was auch immer) 
die erste Firmware flashen; dann weißt du schon mal, dass es 
funktioniert.

von Stefan M. (mannitb303)


Lesenswert?

Erst einmal danke für eure Antworten,

@Wolfgang: Dafür kenne ich mich zu wenig aus um in der USB-Branche.... 
:). Müsste mal schauen ob es Totorials o.ä. gibt wo das evtl. gut 
beschrieben ist.

Habe ich auch schon überlegt einfach einen Chip für beides zu benutzen.
Da ich aber echt nicht weiss wie ich das Hiduino und meine Software 
zusammen in einen Sketch bringe habe ich mich für diese (umständliche) 
Variante entschieden.
Die Hiduino wird ganz normal Compiliert und das .hex File über AVRDude 
geflashed.
Da ich meine Software über die Arduino IDE programmiere und auch darüber 
flashe, weiss ich nicht wie ich beide kombiniere. Denke mal über Include 
oder sowas, muss mich da mal einlesen.



@Clemens_L: Deshalb die zwei Chip Variante, es funktioniert. Kann meine 
eigene USB VID/PID mit einbringen (wenn ich eine hab) und es läuft. Das 
mit den FW-Update war auch nur so eine Idee. Die Software läuft 
eigentlich stabil so das ein Update eigentlich nicht notwendig ist.


Gruß

Stefan

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.