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