Forum: Mikrocontroller und Digitale Elektronik Firmware update über USB


von Daniel S. (daniel_s)


Lesenswert?

Hallo,

ich möchte ein Firmwareuptdate über USB ermöglichen. Mein Controller 
(Nuvoton Cortex M0, ist nicht auswechselbar) hat kein USB. Deshalb 
wollte ich einen FTDI chip nehmen.

Es wäre für mich am einfachsten wenn sich das Gerät als Mass storage 
device melden würde und ich einfach eine Datei mit der Firmware auf 
dieses Device kopieren könnte. Ich habe aber nicht so viel RAM, dass das 
ganze File dort hineinpassen würde.

Nun zu meinen Fragen:
- kann das jeder FTDI USB-RS232 bridge chip? Oder gehen da nur 
spezielle? Ich kenn bis jetzt nur die FTDI chips mit VCP.

- Falls das geht. Kann man die Übertragungsgeschwindikeit so drosseln, 
damit ich die Daten ins Flash schreiben kann und erst wenn sie 
geschrieben sind ein neues Paket anfordern?

Wie ihr seht kenn ich mit nicht wirklich gut aus mit USB und bräucht 
etwas Hilfe.

von CDC (Gast)


Lesenswert?

Hallo,

such Dir doch einen fertigen Bootloader (ist da nicht schon einer auf 
dem uC drauf) welcher über RS232 (respektive USB über FTDI Chip) den 
Code laden kann.

Das ist einfach und schon oft gemacht.

Gruß

von Frank K. (fchk)


Lesenswert?

Daniel S. schrieb:
> Hallo,
>
> ich möchte ein Firmwareuptdate über USB ermöglichen. Mein Controller
> (Nuvoton Cortex M0, ist nicht auswechselbar) hat kein USB. Deshalb
> wollte ich einen FTDI chip nehmen.
>
> Es wäre für mich am einfachsten wenn sich das Gerät als Mass storage
> device melden würde und ich einfach eine Datei mit der Firmware auf
> dieses Device kopieren könnte. Ich habe aber nicht so viel RAM, dass das
> ganze File dort hineinpassen würde.

Die normalen FTDI USB-Seriell-Chips sind Custom Class USB Devices. Die 
implementieren keine Standard-USB-Klasse, sondern etwas proprietäres, 
für das man die speziellen FTDI-Treiber braucht. Das ist fest verdrahtet 
und kann nicht geändert werden.

Wenn Du einen FT2232 aufs Board packst, kannst Du die Firmware über JTAG 
und OpenOCD flashen. Da brauchst Du dann auch keinen Bootloader oder so, 
denn über JTAG hast Du ja die volle Kontrolle über den Prozessor und 
kannst auch die Erstinbetriebnahme darüber machen, ohne dass überhaupt 
Code im Prozessor ist. Über den zweiten Port des FT2232 kannst Du eine 
UART-Kommunikation aufbauen.

fchk

von Daniel S. (daniel_s)


Lesenswert?

Das soll irgentwann mal verkauft werden und der Kunde soll ein Update 
machen können. Damit wir keine Treiber usw auf PC seite brauchen wäre 
ein Mass storage das einfachste, da man einfach eine Datei rüberkopieren 
könnte.

Flashen kann ich die Controller mit dem NuLink programmer das ist kein 
Problem.

Den Bootloader zu schreiben ist nicht das Problem. Mit dem Prozessor 
kenne ich mich gut aus. Ich habe bisher aber noch nichts mit USB 
gemacht.

von Jim M. (turboj)


Lesenswert?

> [... USB Mass storage Mode ...]
> kann das jeder FTDI USB-RS232 bridge chip?

Nein, die FTDI Chips können nur VCP.

> Damit wir keine Treiber usw auf PC seite brauchen wäre
> ein Mass storage das einfachste, da man einfach eine Datei rüberkopieren
> könnte.

LOL. Dann kopieren Dir die LUser aber irgendwelchen Mist auf den Chip, 
und reklamieren den dann bei Dir weils plötzlich nicht mehr tut.

Was sich sagen will: Die Variante FTDI mit VCP braucht zwar einen 
Treiber auf der PC Seite, den kann sich aktuelles Windows aber von 
selbst aus dem Netz laden. Und einen Updater als PC-Programm braucht man 
schon um festzustellen ob überhaupt die korrekte Datei geflasht wird.


Dein "Mass strorage Modus" Update geht nur mit Chips, die direkt USB 
unterstützen; Ich habe das bisher nur beim LPC134x so gesehen.

Um das an den Nuvoton anzubinden müsste man einen eigenen USB-fähigen 
Microcontroller benutzen, der dann auch ein spezielles Programm braucht. 
Das ist ziemlich aufwändig: Wir haben hier ein Design mit Silabs 
8051F320 als USB Chip mit Mass strorage und 8051F020 als 
Hauptcontroller, die sich eine SD Karte als Datenspeicher teilen. Die 
Programme sind nicht trivial.

von Daniel S. (daniel_s)


Lesenswert?

folgende Möglichkeiten sehe ich

- FTDI chip über VCP und PC Programm welches die Datei rüberschiebt mit 
Acknowledge. Das wäre relativ einfach zu implementieren.

- Nuvoton Chip mit USB und dann Mass storage device. Es gibt ein 
Codebeispiel von Nuvoton welcher als USB stick fungiert. Dabei ist ein 
externes serielles Flash angeschlossen. Wenn man die Datei aber auch 
lesen will (das ist ja der Sinn) muss man ja auch FAT implementieren da 
der PC die Daten ja im FAT format auf einen Speicher schreiben will. Ich 
habe aber gar nicht so viel Ram um das zu puffern. Da müsste man schon 
arg murksen um das anständig zum Laufen zu bekommen.

- Controller mit USB und VCP drauf laufen lassen. Da gibt es auch 
Beispiele dafür.

von Frank K. (fchk)


Lesenswert?

Ich empfehle trotzdem die Lösung mit dem FT2232 und JTAG. Grund: Damit 
kann sich ein User das Gerät niemals zerschießen ("bricken"), egal was 
immer er auch anstellen mag. Der Flasher wird IMMER_ und _JEDERZEIT in 
der Lage sein, ein funktionierendes Image zu übertragen. Die anderen 
Lösungen können das nicht in JEDEM denkbaren Fall garantieren. Nur ein 
im Controller-ROM (ROM, nicht Flash!) eingebauter Bootloader wäre ein 
gleichwertiger Ersatz.

Einen Treiber wirst Du eh installieren müssen, und das Treiberpaket für 
einen FT232 ist das gleiche wie für einen FT2232 oder FT4232. Also 
entsteht Dir dadurch kein Nachteil.

Das OpenOCD ist fertig und Open Source, da wirst Du kein neues Rad 
erfinden müssen, sondern nur Deine VID und PID eintragen müssen. Und auf 
Controllerseite ist ohnehin alles Hardware, da gibts keine spezielle 
Software.

fchk

von Klaus (Gast)


Lesenswert?

>ich möchte ein Firmwareuptdate über USB ermöglichen. Mein Controller
>(Nuvoton Cortex M0, ist nicht auswechselbar) hat kein USB.
Warum nicht austauschbar?

Wenn Du da noch einen FTDI 'drankleben' kannst, dann ist Dein Design 
bisher wohl kaum in Stein gemeiselt.
Bevor Du also hier rumbastelst und den Mist dann Deinen Kunden andrehst, 
solltest Du Dir überlegen, es gleich richtig zu machen - zumal diese 
Controller auch mit USB zu haben sind.

Gruß Klaus

von Martin Beuttenmüller (Gast)


Lesenswert?

Ich glaube auch, Deine Zutaten stimmen nicht:

Entweder geeignete Hardware
oder eine neue Idee muß her!

Viel Erfolg
Martin

von Daniel S. (daniel_s)


Lesenswert?

Also das mit JTAG finde ich nicht wirlich passend. Die Software ist zwar 
nicht super geheim oder aussergewöhnlich aber das lädt ja gerade zum 
kopieren oder zu mods ein. Im Garantiefall kann man dann gar nicht mehr 
nachweisen was damit getrieben wurde.

Die eigentliche Funktionalität für das Gerät ohne Firmware update 
möglichkeit steht halt schon. Für einen neuen Prozessor muss die 
Firmware dann angepasst und getestet werden. Aber naja es geht wohl 
nicht anders.

VCP mit einem USB-prozessor wird wohl das Mittel der Wahl sein. Dann 
kann mann auch eine sehr einfache Verschlüsselung wählen.

Hat jemand erfahrung mit der VCP auf einem Nuvoton prozessor?

von Klaus (Gast)


Lesenswert?

>VCP mit einem USB-prozessor wird wohl das Mittel der Wahl sein. Dann
>kann mann auch eine sehr einfache Verschlüsselung wählen.
Eben nicht. Das 'Mittel zur Wahl' ist HID.

Vorteile: keine zusätzlichen Treiber auf PC-Seite und keine 
Zertifizierung für Windows (das brauchst du bei CDC/VCP).
Einschränkung: max. 64 kBytes/s. Aber das sollte bei einem 
Firmware-Update und einfachen Steuerungsaufgaben keine Rolle spielen.

Gruß Klaus

von Daniel S. (daniel_s)


Lesenswert?

Ok dann also HID.

Gibt es dafür offene APIs für Windows/Mac usw?

Man braucht ja auch ein PID and VID um das Gerät zu identifizieren und 
um erkennen zu können ob ein Gerät angeschlossen ist oder?

von Frank K. (fchk)


Lesenswert?


von Gerd E. (robberknight)


Lesenswert?

Ich kenne die Nuvoton-Teile bisher überhaupt nicht und weiß auch nicht 
wie sehr Dein Design darauf festgelegt ist.

Du könntest Dir nämlich auch mal einen STM32 mit USB anschauen. Die 
haben einen USB-Bootloader im ROM integriert der direkt als 
Mass-Storage-Device fungiert. Taucht im OS ohne extra Treiber oder 
sonstwas als Laufwerk mit FAT auf, Firmware-Datei draufkopieren, fertig. 
Sowas gibts aber glaube ich auch bei anderen Herstellern, dunkel habe 
ich es für die LPC13xx-Serie im Hinterkopf.

Vom Preis her langt FTDI ganz schön zu. Wenn Du Den Cortex M0 wegen dem 
Preis gewählt hast, würde dieser Vorteil vom FTDI gänzlich aufgefressen 
und ein Cortex M3 mit USB unterm Strich vermutlich günstiger.

von andi (Gast)


Lesenswert?

Schau dir mal den Vinculum von FTDI an! Mit dem hab ich schon mal sowas 
gemacht...

Gruß
Andi

von Daniel S. (daniel_s)


Lesenswert?

Nachdem es wohl wirklich nicht so einfach ist das Update per USB zu 
machen würde ich auch einen anderen Prozessor einsetzen wenn es damit 
viel einfacher wäre. Zum STM32 USB mass storage update mit USB im ROM 
habe ich nichts gefunden. Klar gibts wahrscheinlich von ein paar Leuten 
dazu software. Aber ob die dann immer so funktioniert wie sie soll weiss 
man nie.

Die Vinculum von FTDI sind wohl prozessoren mit USB. Gut wahrscheinlich 
sind die USB sachen recht einfach gehalten da das ja ihr Spezialgebiet 
ist aber das ist glaube ich nicht der richtige Weg für mich.

von Frank K. (fchk)


Lesenswert?

Was für einen Controller verwendest Du jetzt denn GENAU (Typcode)?

fchk

von Daniel S. (daniel_s)


Lesenswert?

Momentan den M054ZBN Aber wir werden jetzt wohl den NUC122 mit USB 
nehmen. Klar könnte man auch einen STM oder Atmel oder sonst was nehmen. 
Aber wie gesagt die Software für die eigentliche Funktion ist soweit 
fertig. Und ich hoffe die Peripherie usw wird sich innerhalb eines 
Herstellers nicht so stark ändern.

von tip (Gast)


Lesenswert?

Hallo,

mich treibt das auch schon länger um mal USB richtig zu Implementieren.
Wir haben ein Messgerät USB fähig gemacht, und dazu den TI TUSB4310 chip 
benutzt.

Was ich noch nicht wirklich verstehe ist das setzen von VID und PID, 
habt ihr darüber nachgedacht eigene IDs zu kaufen ( meiner Information 
nach muss man dafür usb.org Mitglied werden für min. 2000$) sonst kann 
man keine eigenen IDs benutzen und kein USB Logo auf Verpackung Kabel 
etc drucken. Hat da jmd genauere Ahnung von?

Meine nächsten Ideen zu unserem Device wäre gewesen einfach über die 
TUSB4310 VCP einen UART transfer zu machen, bei dem ich dem µC vorher 
mitteile dass jetzt der Bootsecotr beschrieben wird.

Allerdings ist das bisher nur eine grobe Idee implementiert habe ich 
sowas noch nie, bin daher im Sinne Bootloader absoluter Neuling, daher 
weiss ich nicht 100 % ob das so funktionieren kann in der PRaxis.

Grüße

von Fragender (Gast)


Lesenswert?

@Daniel S.
Ich kenne den Nuvoton gar nicht
(aber Cortex-M3 von anderen Herstellern).
Darf ich fragen, was euch zum Nuvoton bewegt hat?
Hat er irgendeine Fähigkeit, den andere nicht haben?
Oder ist er vielleicht günstiger, besser zu beschaffen,
in günstiger Gehäusen, guter Support, gute Evalboards...?

von Frank K. (fchk)


Lesenswert?

Daniel S. schrieb:
> Momentan den M054ZBN Aber wir werden jetzt wohl den NUC122 mit USB
> nehmen. Klar könnte man auch einen STM oder Atmel oder sonst was nehmen.
> Aber wie gesagt die Software für die eigentliche Funktion ist soweit
> fertig. Und ich hoffe die Peripherie usw wird sich innerhalb eines
> Herstellers nicht so stark ändern.

Da würde sich der LPC1343 als Ersatz anbieten. Gleiche Packages, 
ähnliche Ausstattung, Cortex M3, USB eingebaut, USB-Treiber im ROM, 
USB-Mass Storage Boot Loader eingebaut. Schaut mal, ob der passt.

fchk

von Arc N. (arc)


Lesenswert?


von Daniel S. (daniel_s)


Lesenswert?

@Fragender: Der Nuvton ist ein Cortex M0. Die Auswahl hatte ich nicht zu 
treffen sondern der Hersteller und Auftraggeber in China. Er ist wohl in 
Stückzahlen recht günstig und die Programmer sind es auch. Ich bin sehr 
zufrieden damit. Ich konnte noch keine Bugs finden und die Peripherie 
ist auch ganz ok.


Der LPC ist schon echt der Hammer mit seinem USB. Leider geht das Update 
über Mass storage nur bei windows. Muss ich mal schauen ob das ok ist. 
Dann müsste ich nur die Software umstellen. Günstig ist der aber auch 
nicht

Die SiLabs Wandler sich ja auch super aber auch teuer. Bei 1k 1,5$ ist 
schon happig. Gut ein FTDI kostet auch so.

von Reinhard Kern (Gast)


Lesenswert?

Daniel S. schrieb:
> Die Software ist zwar
> nicht super geheim oder aussergewöhnlich aber das lädt ja gerade zum
> kopieren oder zu mods ein.

Bei einem Bootloader/Updater, den du modifizieren kannst (also nicht 
bloss mal schnell kopiert), könntest du die Firmware, die der Kunde 
bekommt, verschlüsseln. Ob sich das lohnt müsst ihr schon selbst 
beurteilen. Mindestens eine Gültigkeitsprüfung vor dem Programmieren 
wäre schon empfehlenswert.

Gruss Reinhard

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.