Forum: Mikrocontroller und Digitale Elektronik MSP430 USB Firmware update


von Frank B. (rank_b)


Lesenswert?

Hallo,
vielleicht hat sich ja schon mal jemand von euch mit dem Thema 
beschäftigt.
Ich arbeite hier mit einem MSP430G2955. Nun war meine Überlegung, ob es 
eine Möglichkeit gibt, an diesen Prozessor eine USB Schnittstelle 
anzuschließen und das Firmwareupdate über USB zu ermöglichen. Bei den 
Prozessortypen, welche schon USB von sich aus unterstützen 
(MSP430F563x...) ist dies ja kein Problem. Aber würde dies auch z.B. mit 
dem MSP430G2955 funktionieren?
Hat schon jemand Erfahrungen hiermit?

mfg
Frank

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Frank B. schrieb:
> Nun war meine Überlegung, ob es
> eine Möglichkeit gibt, an diesen Prozessor eine USB Schnittstelle
> anzuschließen

Nimm einen FT23x von FTDI oder CP210x von SiLabs. Der spuckt dann 
normales UART Signal aus, dafür müsste es einen Bootloader geben.

USB in Software-only ist derart aufwändig, dass Du mit der Firmware 
Entwicklung "ewig" beschäftigt wärst - und dabei auch noch Software für 
den PC enwickeln müsstest.

Wenn Du nicht grade Sückzahlen >1E5 anstrebst, ist der extra USB Chip 
die schnellere und preiswertere Lösung. Oder man nimmt den 
nächstgrößeren MSP mit USB.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jim M. schrieb:
> Der spuckt dann normales UART Signal aus, dafür müsste es einen
> Bootloader geben.

Naja, alle MSP430 enthalten einen seriellen Bootloader, der aber ein 
etwas ungewöhnliches Protokoll umsetzt. Das nennt sich BSL.

Natürlich könnte man auch einen separaten, selbstgeschriebenen 
UART-Bootloader zusätzlich zum eh' vorhandenen BSL in den 'G2955 packen, 
man muss sich halt Gedanken darum machen, wo im Speicher der 
unterzubringen ist.

Einfacher dürfte es sein, eine BSL-Implementierung mit einer 
USB-UART-Bridge à la FT232 hinzubekommen.

von Jim M. (turboj)


Lesenswert?

Siehe auch: http://hackaday.com/2012/12/03/msp430-bit-banged-usb-1-1/

Offenbar gibt es eine 15 MHz Version:
http://mecrisp.sourceforge.net/mecrimus-b.htm

Ich persönlich hätte aber eher auf einen modernen preiswerten Cortex-Mx 
mit USB umgestellt. Die Einarbeitung in einen kleinen ARM dürfte in etwa 
so lange dauern wie die Integration von Software USB in ein bestehendes 
Projekt...

von Frank B. (rank_b)


Lesenswert?

erstmal danke für die Antworten. Vielleicht ist die USB-UART-Bridge ein 
interessanter Ansatz. Werde mich damit mal beschäftigen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jim M. schrieb:
> Siehe auch: http://hackaday.com/2012/12/03/msp430-bit-banged-usb-1-1/

Das halte ich für einen Schritt in eine komplett falsche Richtung. Ja, 
sicher, in der AVR-Welt ist das dank V-USB verbreitet, und kleine 
Arduino-Varianten à la Digispark/Digistump nutzen das auch, aber ...


Frank sollte das hier präzisieren:

Frank B. schrieb:
> Nun war meine Überlegung, ob es eine Möglichkeit gibt, an diesen
> Prozessor eine USB Schnittstelle anzuschließen

Soll das bedeuten, daß das ohne zusätzliche Hardware geschehen soll?

Oder impliziert "USB Schnittstelle anschließen" den Gebrauch üblicher 
USB-UART-Bridges à la FT232, CH340 etc.?

von Max G. (l0wside) Benutzerseite


Lesenswert?

Den MSP430G2955 verwende ich auch. Viel Speicher, wenig Peripherie. Von 
USB ist der meilenweit entfernt.
Umstellung auf einen USB-fähigen MSP430 wäre prinzipiell möglich, 
allerdings ist die Portierung von einem 2er auf einen anderen mäßig 
lustig, weil die Unterschiede nicht unerheblich sind. Und die 
USB-fähigen MSP430 sind teuer.
Bei den 5ern kann man den BSL-Code durch eigenen ersetzen, in den 2ern 
ist der fest drin. Du wirst also ein eigenes Protokoll erfinden müssen; 
USB-to-serial-Wandler gibt es genug. BSL wirst du darüber aber nicht 
emulieren können, dafür ist es zu komplex (man muss zum richtigen 
Zeitpunkt an /RST wackeln).
Schreibe einen eigenen Lader, der über das Linker Command File in einen 
fixen Speicherbereich geschrieben wird und dort für alle Zeiten bleibt. 
Den Rest des Speichers kannst du dann aus dieser Routine heraus fröhlich 
überschreiben. Flash löschen und schreiben ist auf dem MSP430 zum Glück 
relativ unproblematisch. Passe auf, dass du INFOA nicht platt machst, 
und Finger weg von Mass Erase.
Du musst weiter sicherstellen, dass du auch nach ungeplantem Reset usw. 
in diesen Lader kommst. Sonst hast du schnell einen Ziegelstein 
fabriziert. Dazu ist es auch notwendig, sowohl die übertragenen Daten 
als auch den geflashten Programmcode mit einer Checksumme zu sichern. 
Leider hat der G2955 keine CRC-Engine, aber das geht auch von Hand.

Viel Erfolg!

Max

von Frank K. (fchk)


Lesenswert?

Max G. schrieb:

> Bei den 5ern kann man den BSL-Code durch eigenen ersetzen, in den 2ern
> ist der fest drin. Du wirst also ein eigenes Protokoll erfinden müssen;
> USB-to-serial-Wandler gibt es genug. BSL wirst du darüber aber nicht
> emulieren können, dafür ist es zu komplex (man muss zum richtigen
> Zeitpunkt an /RST wackeln).

Du kannst einen PIC16F1454 als USB-Bridge verwenden. Der wird zum Einen 
unter der Bezeichnung MCP2221 als USB-UART/I2C Bridge verkauft, aber Du 
kannst auch den unprogrammierten PIC kaufen, die UART-Demoapplikation 
nehmen und für BSL anpassen. Das wird preisweter als ein FTDI-Chip.

Oder Du sparst Dir die PIC-Programmierung und nimmst einen 
FT232H/FT2232D/FT2232H/FT4232H und hängst den an den JTAG-Port. Der 
FT2232 ist quasi zwei FT232H, d.h. Du kannst an Port A JTAG anklemmen 
und an Port B UART.

fchk

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank K. schrieb:
> und hängst den an den JTAG-Port.

Dann braucht man nur noch 'ne Software, die das ansteuert. Immerhin hat 
sich TI in der Zwischenzeit bewegt und den Kram offengelegt, so daß 
alternative Programmieradapter jetzt nicht mehr ausgeschlossen sind ...

Eine Alternative zu JTAG ist hier SBW, das hat den Vorteil, daß es nur 
zwei Anschlüsse braucht, und daß diese in den meisten Anwendungen auch 
keine Zweitfunktion haben.

SBW wurde zu Zeiten des 'F20xx eingeführt und wird seitdem von jedem 
neueren MSP430-Derivat unterstützt, so natürlich auch der kompletten 
G-Reihe.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Du kannst einen PIC16F1454 als USB-Bridge verwenden. Der wird zum Einen
> unter der Bezeichnung MCP2221 als USB-UART/I2C Bridge verkauft, aber Du
> kannst auch den unprogrammierten PIC kaufen, die UART-Demoapplikation
> nehmen und für BSL anpassen. Das wird preisweter als ein FTDI-Chip.

Das kann man machen, aber zwei verschiedene uC auf einem Gerät machen 
Entwicklung und Fehlersuche auch nicht leichter. Wenn er sich schon in 
einen neuen uC einarbeiten muss, kann er gleich auf einen passenden 
MSP430 oder ARM umsteigen.

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.