Forum: Mikrocontroller und Digitale Elektronik STM32 + DFU + Java


von Markus M. (mmax)


Lesenswert?

Hi,

Ich würde gerne von einem einem Java Programm via DFU Firmware auf einem 
STM32 Controller spielen. Hat das schon jemand gemacht oder kennt ein 
Java-Programm (bzw. dessen Source) das sowas kann?

Soll dann eine eigene Software werden, über die ein Update der Firmware 
möglich sein sollte. Oder hat jemand eine bessere Idee um dem 
Endanwender ein Update machen zu lassen?

lG,
Max

von Lukas K. (carrotindustries)


Lesenswert?

http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916# 
In dem ZIP ist Wohl auch noch ne DLL mit Doku dabei. Sollte sich dann 
mit SWIG oder so wrappen lassen. Alternativ gibt's da noch 
http://dfu-util.sourceforge.net/ Das könnte man im Hintergrund aufrufen.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Markus Manninger schrieb:
> Oder hat jemand eine bessere Idee um dem
> Endanwender ein Update machen zu lassen?

Anders ja, ob besser, weiss ich nicht. Die STM32 haben doch einen 
eingebauten System memory boot, der über einen FTDI-Adapter-Clone und 
USB-VCOM auch ein Update ermöglicht.

Steht im stm32 AN2606.

https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Markus Manninger schrieb:
> Oder hat jemand eine bessere Idee um dem
> Endanwender ein Update machen zu lassen?

Ich würds auf jeden Fall ohne Java machen. Der Endanwender wird zu Recht 
verärgert sein wenn er feststellt daß der winzige Updater für 2 Sekunden 
trivialste Arbeit mal eben noch eine monströse Laufzeitumgebung benötigt 
die erst installiert werden muss (samt unerwünscht reingemogelter 
Browser-Toolbar Adware).

Machs in C++/Qt oder C++/wxWidgets oder FPC/LCL und es wird genauso 
Plattformübergreifend (Windows/Linux/Mac) sein, nur mit 100MB weniger 
Ballast und schönerer Optik obendrein.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Bernd K. schrieb:
> genauso
> Plattformübergreifend (Windows/Linux/Mac) sein, nur mit 100MB weniger
> Ballast

Wenn es danach ginge:
1
C:>copy NewFirmware.bin \\.\com12 /b

Geht das Plattformübergreifend (Windows/Linux/Mac)? dann spart man 
nochmal ein paar KBytes.

von Markus M. (mmax)


Lesenswert?

Ja, hab auch schon daran gedacht ... vielleicht eh besser - bin ja auch 
keine Freund von Java aber ich dachte mir dass die JRE sowieso unter 
Windows installiert ist bzw. sehr wahrscheinlich.

lG,
Max

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Markus Manninger schrieb:
> vielleicht eh besser

Für mich wäre das ein Kaufgrund:
Kein Risiko von Viren, Trojanern und Spyware!

Wie ist das mit Script-Dateien bei Linux/Mac aus?

Markus Manninger schrieb:
> sowieso unter Windows installiert

Unter Windows funktionieren *.vbs und *.js Scripte meines Erachtens 
out-of-the-box. Dann könnte man zumindest 'ne Meldung ausgeben, ob der 
Vorgang erfolgreich war und ein kleines Menü machen, um den Port und die 
Baudrate (automatisch?) einzustellen.

: Bearbeitet durch User
von Markus M. (mmax)


Lesenswert?

Torsten C. schrieb:
>> vielleicht eh besser
>
> Für mich wäre das ein Kaufgrund:
> Kein Risiko von Viren, Trojanern und Spyware!
>
> Wie ist das mit Script-Dateien bei Linux/Mac aus?

Scripting funktioniert unter Linux allgemein besser als auf Win aber 
wenn man die breite Masse ansprechen will, muss man eine Windows 
Software haben. Aber ich will wenig externe Abhängigkeiten haben.

> Markus Manninger schrieb:
>> sowieso unter Windows installiert
>
> Unter Windows funktionieren *.vbs und *.js Scripte meines Erachtens
> out-of-the-box. Dann könnte man zumindest 'ne Meldung ausgeben, ob der
> Vorgang erfolgreich war und ein kleines Menü machen, um den Port und die
> Baudrate (automatisch?) einzustellen.

Ich will ein Programm schreiben um Parameter des Controllers zu 
verändern und Werte von Sensoren, in meinem Fall Liftdruck eines 
barometrischen Sensors oder Lagesensors anzuzeigen.

Und es soll auch die Möglichkeit beiten die Firmware des MCs upzudaten.

Kommunikation wird wahrscheinlich einfach über Virtual Com Port 
realisiert und für das Protokoll werd ich Googls Protobuf [1] verwenden. 
Damit hab ich schon gute Erfahrungen gemacht und es auch auf einem STM32 
implementiert [2] .

[1] https://code.google.com/p/protobuf
[2] https://code.google.com/p/protobuf-embedded-c/

lG,
Max

: Bearbeitet durch User
von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Markus Manninger schrieb:
> Ich will ein Programm schreiben um Parameter des Controllers zu
> verändern

Das hättest Du ja auch gleich sagen können. :-(

Na denn: Java oder C#.net.

Bei beiden muss ein Setup mit Admin-Rechten ausgeführt werden, wenn die 
Bibliotheken nicht zufällig bereits installiert sind.

Damit wären wir dann wieder bei C++ von Bernd. Das kann man so 
schreiben, dass die .exe ohne Setup mit Admin-Rechten läuft.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Markus Manninger schrieb:

> Aber ich will wenig externe Abhängigkeiten haben.
> [...]
> Ich will ein Programm schreiben um Parameter des Controllers zu
> verändern und Werte von Sensoren, in meinem Fall Liftdruck eines
> barometrischen Sensors oder Lagesensors anzuzeigen.

Für so Sachen (und ganz allgemein die schnelle GUI-App für zwischendurch 
und auch umfangreichere Sachen) empfehle ich wärmstens Lazarus 
(FreePascal + LCL). Das erzeugt kompakte native statisch gelinkte 
Binaries komplett ohne Abhängigkeiten und der selbe Code läßt sich 
unverändert unter Windows, Linux und Mac kompilieren. Es existiert 
meines Wissens nach derzeit kein besseres oder auch nur annähernd 
gleichwertiges Werkzeug für solche Anwendungsfälle, am ehesten 
vielleicht noch C++/Qt aber der Qt-Designer kann leider einpacken 
angesichts der Lazarus IDE. </meinung>

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Bernd K. schrieb:
> Das erzeugt kompakte native statisch gelinkte
> Binaries komplett ohne Abhängigkeiten

Das klingt interessant. Ist die .EXE ohne Admin-Rechte und 
Setup-Prozedur überall ausführbar? Sowas brauche ich auch!

von Bernd K. (prof7bit)


Lesenswert?

Torsten C. schrieb:
> Das klingt interessant. Ist die .EXE ohne Admin-Rechte und
> Setup-Prozedur überall ausführbar? Sowas brauche ich auch!

Ja.

Als Beispiel (und um halbwegs on-topic zu bleiben) siehe beispielsweise 
mein DebugTerminal Projekt: https://github.com/prof7bit/DebugTerminal

Das ist ein Ersatz für sowas wie CuteCom oder Bray's Terminal, auf das 
wesentliche reduziert und es zeigt die Verwendung der seriellen 
Schnittstelle unter Windows und Linux (spätestens im Innern meiner 
comport.pas Unit tauchen natürlich einige IFDEFs auf, nicht alles ist 
auf allen Platformen identisch, aber wenn man die als black box ansieht 
von außen ist die Verwendung überall gleich, nirgendwo sonst im Programm 
ist noch ein ifdef zu finden).

Die herunterladbaren Binaries laufen direkt und ohne Installation auf 
der jeweiligen Platform, selbst auf jedem x-beliebigen Desktop-Linux tun 
sie das (wird ja oft kritisiert sowas ginge nicht oder nur schwer, aber 
hier wird gezeigt daß es sehr wohl geht, und zwar ohne irgendwelche 
Verrenkungen).

: Bearbeitet durch User
von Markus M. (mmax)


Lesenswert?

Schaut nicht schlecht aus. Möglichkeiten gibt es ja viele und alle haben 
ihre Vor- und Nachteile. Mit Pascal hab ich bis jetzt noch nicht 
programmiert, muss mir das also nochmal genauer anschauen.

Wichtig sind für mich wenn möglich nicht zu viele Abhängigkeiten zu 
externen Libs zu haben ... optimal wäre eine einfaches Binary (.exe) 
ohne großartige Installation so wie z.B putty

lG,
Max

von Albrecht H. (alieninside)


Lesenswert?

Lazarus / Freepascal sieht schon ziemlich gut aus! Ich hatte mir das vor 
ein paar Jahren zum letzten mal angeschaut, irgendwas war damals aber 
noch, mit der Firma der heute Delphi gehört, da gabs in den Foren 
etliche unzufriedene Stimmen, gings um irgendwelche Sachen die man teuer 
zukaufen musste um Pascal "professionell" nutzen zu können? Keine 
Ahnung, Schnee von gestern wahrscheinlich.

Inzwischen wirkt Lazarus / Freepascal aber ziemlich komplett, (auf 
Xubuntu 14.04, getestet), es gibt Konnektoren für alle möglichen 
Datenbanken, jede Menge GUI-Controls und sogar etwas 
"DataGridView"-artiges. Die IDE erinnert ein wenig an Visual-Studio-.net 
mit VB/C#.

Bei der Gelegenheit habe ich auch gleich nocheinmal "Mono" installiert, 
das .net-Framework für Linux.
Ich habe dann mit "Ms Visual Studio Express 2012" eine Windows-Form 
(Framework .net 3.5) erstellt und mit allen möglichen grafischen 
Controls zugekleistert, (Buttons, Menü-Leiste, Status-Leiste, 
FileDialog, Font-Auswahl-Dialog,  ColorDialog, DateTimePicker, 
DataGridView).
Die daraus erzeugte .exe (any, x86, x64) habe ich auf meinen 
Xubuntu-Rechner kopiert, dann rechter Maus-Klick -> “Open with Mono 
Runtime” und siehe da: Das Ding startet ohne jede Fehlermeldung, alle 
Controls sind da und scheinen auch zu funktionieren (FileDialog, 
Font-Auswahl-Dialog,  ColorDialog etc.).

In einem zweiten Versuch hat sich sogar das DataGridView mit Daten aus 
der im LAN bereitstehenden PostgreSQL-Datenbank gefüllt, (was mich echt 
gewundert hat, ich dachte zuerst die "Npgsql.dll" wäre 
windowsspezifisch).

Das fand ich schon sehr beindruckend, denn grafische Benutzeroberflächen 
mit VB.net oder C#.net zu erstellen ist nun wirklich vergleichsweise 
einfach.

Ganz perfekt war es dann allerdings doch nicht: Das Setzen von 
"DataGridView.HorizontalScrollingOffset" (verschiebt die Spalten eines 
DataGridViews, programmgesteuert nach rechts oder links), hat z.B. nicht 
funktioniert und auch sonst scheint es, laut zahlreicher Forenbeiträge 
und Bug-Reports, noch etliche Detail-Baustellen zu geben.

Also vorerst ist mono mit WinForms noch keine echte 
Multiplattform-Konkurrenz, zu was auch immer. Man könnte zwar alternativ 
Mono und C#/VB mit GTK verwenden aber da hat Lazarus / Freepascal 
definitiv die hübscheren und flexibleren Controls out-of-the-box.

Eventuell tut sich ja noch was in nächster Zeit jetzt nachdem Microsoft 
das .net-Framwork zu Open-Source gemacht hat.

von Markus M. (mmax)


Lesenswert?

Leider muss man ja den BOOT0 Pin auf VDD legen um Firmware via USB/DFU 
einspielen zu können ... dass ist natürlich etwas unpraktisch wenn es 
der Enduser machen und dafür noch ein Gehäuse aufschrauben muss.

Hat schon mal jemand versucht eine Firmware via VCP auf den Controller 
zu spielen, der speichert die z.B auf einem Flash zwischen und ein 
spezieller Bootloader liest dann nach dem Reset diese Firmware vom Flash 
um sie auf dem MC neu einzuspielen?

lG,
Max

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Markus Manninger schrieb:
> Leider muss man ja den BOOT0 Pin auf VDD legen um Firmware via USB/DFU
> einspielen zu können

Ist das so? Oder kann man alternativ einfach den ProgrammCounter per SW 
auf den Bootloader setzen?

von Markus M. (mmax)


Lesenswert?

Laut Application Note AN3156 von STM ja aber vielleicht kann man dem MC 
auch via SW ein Telegramm schicken um ihm mitzuteilen dass er auf den 
Bootloader springen soll und dann die neue Firmware mit DFU übertragen.

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.