Forum: Mikrocontroller und Digitale Elektronik Automatischer SWD-Programmer


von Flo (Gast)


Lesenswert?

Hallo,

ich  bin auf der Suche nach einem "automatischen" SWD-Programmer. Ideal 
wäre es in einem USB-Stick Format.
Also Ziel sollte sein, dass man den Programmer einmalig über einen PC 
mit der neuen Firmware beschreibt, ihn anschließend an den SWD Port 
steckt und der Controller wird automatisch geflasht.
In meinem Fall bräuchte ich ihn für einen STM32F429.

Ich habe jetzt schon ne Weile hier im Forum gesucht aber leider nichts 
gefunden. Ich kann mir aber nicht vorstellen, dass darauf bisher noch 
keiner gekommen ist.

Gruß
Flo

von Timmo H. (masterfx)


Lesenswert?


: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Du könntest eine Black Magic Probe nehmen und entsprechend erweitern und 
das zu flashende Programm z.B. aus einem SPI-Flash lesen.

Warum die Black Magic Probe? Weil die komplett im Sourcecode verfügbar 
ist:
https://github.com/blacksphere/blackmagic

von Philipp K. (philippk) Benutzerseite


Lesenswert?

Bei meinem alten Arbeitgeber haben wir früher diese von E-Lab verwendet. 
Die SW wird auf eine SD-Karte geladen die Programmierung wird entweder 
über einen Taster gestartet oder über einen digital IO am Programmer.

http://www.e-lab.de/programmer/upp1.html

Sobald man das Ding mittels Bastelsoftware vom Hersteller eingerichtet 
hat laufen die sehr zuverlässig und schnell.

von Max B. (theeye)


Lesenswert?

Ich kann auch nur ein Eigenbauprojekt für AVRs anbieten: 
http://www.avrfreaks.net/forum/automated-programmers-half-price

Gruß Max

von Flo (Gast)


Lesenswert?

Vielen Dank schon mal für die Antworten.

Da sind ein paar interessante Lösungen dabei aber die sind wahnsinnig 
teuer.

Wenn ich mir da folgendes ansehe müsste das doch auch günstiger gehen.

http://www.ebay.de/itm/ST-Link-V2-Mini-Metal-Shell-STM8-STM32-Emulator-Downloader-Programming-Unit-/251708537849?hash=item3a9aff7bf9

Da kann doch nicht soviel drin sein. Ein Platinchen, ein Controller, ein 
Flash und ein Gehäuse mit Taster. Das wars ja dann auch schon fast. Vom 
Materialpreis her müsste man da doch weit unter 10€ bleiben.

Oder es gibt einfach keinen Markt dafür ?!?

von Jim M. (turboj)


Lesenswert?

Flo schrieb:
> Da kann doch nicht soviel drin sein. Ein Platinchen, ein Controller, ein
> Flash und ein Gehäuse mit Taster. Das wars ja dann auch schon fast. Vom
> Materialpreis her müsste man da doch weit unter 10€ bleiben.

10 EUR kostet Dich schon die nötige SD Karte fast allein. ;-)
Und der Controller wäre entweder sehr speziell für wenige MCU Typen 
ausgelegt oder muss was größeres sein.

> Oder es gibt einfach keinen Markt dafür ?!?

Der ist ziemlich überschaubar.

Aber man könnte sich sowas auch mit einem Raspberry Pi und OpenOCD 
selbst stricken, dabei wäre der Materialaufwand überschaubar.

von Timmo H. (masterfx)


Lesenswert?

Diese Dongles (die es übrigens auch schon für 2,5€ aus China gibt), ist 
wie bei den Discovery-Boards ein STM32F103 drin, der das SWD-Interface 
zur Verfügung stellt. Die Firmware für diese Dinger ist nur in 
Verschlüsselter Form zu bekommen 
http://www.taylorkillian.com/2013/01/retrieving-st-linkv2-firmware-from.html 
und das Auslesen aus dem Controller ist geblockt.
Irgendwie ist es den Chinesen wohl gelungen trotzdem daran zu kommen und 
nun findet sie sich in diesen kleinen Dongles wieder (welche übrigens 
wunderbar funktionieren).

Das SWD-Protokoll ist aber offen, es hindert dich also niemand daran es 
selbst zu implementieren

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Flo schrieb:
> Oder es gibt einfach keinen Markt dafür ?!?

würde ich auch sagen. Denn wo will man einen Controller programmieren, 
hat aber keinen PC in der Nähe? Notebooks, Tablets, Smartphones,... sind 
mobil und quasi überall vorhanden.

Was ist denn Dein Einsatzszenario?

von Max B. (theeye)


Lesenswert?

Der Entwickler des von mir verlinkten Moduls nutzt es für 
Firmwareupdates bei Kunden. Entweder bei schwerer Zugänglichkeit oder um 
die Kunden das Update leicht selbst vornehmen zu lassen.

Gruß Max

von Flo (Gast)


Lesenswert?

Ich entwickle gerade eine Steuerung. Diese soll in mittleren Stückzahlen 
weltweit verkauft werden. Dabei war mein Ziel das Flashen für jedermann 
(also auch total Elektronikfremde) so einfach wie möglich zu machen.
Das geht jetzt ganz einfach über einen USB-Stick. Software auf den Stick 
kopieren, in die Steuerung stecken, warten, piep-piep und fertig. Total 
einfach! Damit bin ich unabhängig von irgendwelchen Apps oder 
PC-Software. Damit verbinde ich nur Probleme(Windows, OSX, Android, 
iPhone,...).

Allerdings braucht es hierfür eine Flash-Software, die einmalig in den 
Controller geflasht wird. Was, wenn die mal Bugs hat oder erweitert 
werden soll? Dafür brauche ich dann entweder SWD oder den ST-Bootloader 
mit DFU. Für den Bootloader muss ich dem Kunden aus "Irgendwo" wieder 
aufwändig erklären, wo er die PC-SW herbekommt und wie er vorgehen soll. 
Deshalb habe ich an SWD gedacht. Und das dann wieder so einfach wie 
möglich - natürlich :-)
Außerdem muss ich in der Produktion die Flash-Software auf alle Kisten 
flashen. Auch dafür wäre es praktisch. Und man braucht dafür keine 
besondere Ausbildung.

Theoretisch wäre das gleiche Konzept auch über DFU denkbar. Hier hat man 
wieder das Problem wie man in den Bootloader kommt. Entweder 
aufschrauben und Jumper (Boot0) setzen oder per SW in den Bootloader 
springen. Und was, wenn gar keine SW drauf ist? :-)


@Jim Meba: Wozu denn eine SD-Karte? Die 2 MB für meine SW bekomme ich 
doch über USB auch auf einen Flash-Baustein auf der Platine.

von Flo (Gast)


Lesenswert?

Ja genau!Im Prinzip hat er die richtige Lösung. Nur brauche ich das für 
nen STM32.

von Flo (Gast)


Lesenswert?

So jetzt nochmal :-)

Max B. schrieb:
> Ich kann auch nur ein Eigenbauprojekt für AVRs anbieten:
> http://www.avrfreaks.net/forum/automated-programmers-half-price

Ja genau!Im Prinzip hat er die richtige Lösung. Nur brauche ich das für
nen STM32.

von Bernd K. (prof7bit)


Lesenswert?

Flo schrieb:
> Für den Bootloader muss ich dem Kunden aus "Irgendwo" wieder
> aufwändig erklären, wo er die PC-SW herbekommt und wie er vorgehen soll.

Wieso? Du kannst ihm doch ein Tool bauen das nur aus einer einzigen .exe 
besteht und nur einen Button hat: "update", dann muss er keine andere 
Software von Drittherstellern irgendwo herbekommen oder irgendwie anders 
vorgehen als nur anstöpseln und auf den Button klicken.

von Timmo H. (masterfx)


Lesenswert?

Flo schrieb:
> Ich entwickle gerade eine Steuerung. Diese soll in mittleren Stückzahlen
> weltweit verkauft werden. Dabei war mein Ziel das Flashen für jedermann
> (also auch total Elektronikfremde) so einfach wie möglich zu machen.
> Das geht jetzt ganz einfach über einen USB-Stick. Software auf den Stick
> kopieren, in die Steuerung stecken, warten, piep-piep und fertig. Total
> einfach! Damit bin ich unabhängig von irgendwelchen Apps oder
> PC-Software. Damit verbinde ich nur Probleme(Windows, OSX, Android,
> iPhone,...).
Du könntest aber alternativ auch das Update via SD-Karte machen. Ob man 
nun ein File auf USB-Stick oder SD-Karte kopiert ist doch eigentlich 
wurst. Ein SD-Kartenleser hat doch fast jedes Notebook eingebaut. Da 
brauchst du halt nur ein paar freie Pins an deinem Controller (SPI oder 
SoftSPI).
Dann auf deinem Controller ein Bootloader rauf, der via SD-Karte 
(FAT16/FAT32) das Update-File liest und dann flasht.

von Gerd E. (robberknight)


Lesenswert?

Flo schrieb:
> Dabei war mein Ziel das Flashen für jedermann
> (also auch total Elektronikfremde) so einfach wie möglich zu machen.

Ok. Das klassische Aufgabengebiet eines Bootloaders.

Was hilft Dir da ein spezieller automatisierter Hardware-Programmer? Den 
muss der Kunde ja auch erst mal haben. Wenn Du ihn gleich mitlieferst, 
verliert ihn der Kunde (glaub mir, wie häufig bei uns in der Firma 
Zubehör nachbestellt wird, welches wir bei den Produkten immer gleich 
mitliefern...)

> Allerdings braucht es hierfür eine Flash-Software, die einmalig in den
> Controller geflasht wird. Was, wenn die mal Bugs hat oder erweitert
> werden soll?

Auch Dein automatischer SWD-Programmer kann Bugs haben oder muss 
erweitert werden...

> Außerdem muss ich in der Produktion die Flash-Software auf alle Kisten
> flashen. Auch dafür wäre es praktisch. Und man braucht dafür keine
> besondere Ausbildung.

Na das ist doch überhaupt kein Problem: Du gibst den Leuten in der 
Produktion ne bootbare CD mit nem Mini-Linux drauf. Das bootet quasi auf 
jedem normalen PC und erkennt automatisch den angesteckten Controller 
und flasht den. Dann führt es automatisch auch noch ein paar Tests aus 
und sagt dann ok. Das ist den Leuten aus der Produktion ein ein paar 
Minuten erklärt und vorgeführt. Ganz dumm sind die normalerweise auch 
nicht.

> Theoretisch wäre das gleiche Konzept auch über DFU denkbar. Hier hat man
> wieder das Problem wie man in den Bootloader kommt. Entweder
> aufschrauben und Jumper (Boot0) setzen.

Ein von außen erreichbaren (z.B. mit Büroklammer eindrückbaren) Taster 
anbringen. Mit dem kann der Benutzer dann das Boot0 aktivieren.

: Bearbeitet durch User
von Schreiber (Gast)


Lesenswert?

Flo schrieb:
> Ich entwickle gerade eine Steuerung. Diese soll in mittleren Stückzahlen
> weltweit verkauft werden. Dabei war mein Ziel das Flashen für jedermann
> (also auch total Elektronikfremde) so einfach wie möglich zu machen.

Einen gesockelten µC verwenden?!
Zum Update den alten raus und einen neuen rein?

Alternativ eben mit einem Bootloader per RS232 oder Ethernet (ja, das 
geht auch mit einem AVR über TFTP)
bei letzterem kann man die Updates sogar automatisch ohne zutun des 
Kunden verteilen. Ideal für die 'Freunde von Bananenfirmware (die reift 
erst beim Kunden...)

von Gerd E. (robberknight)


Angehängte Dateien:

Lesenswert?

> Ein von außen erreichbaren (z.B. mit Büroklammer eindrückbaren) Taster
> anbringen. Mit dem kann der Benutzer dann das Boot0 aktivieren.

Anbei ein kleiner Schaltungsausschnitt den ich für diese Funktion schon 
mehrfach erfolgreich verwendet habe:

Ein kurzer Druck auf den Taster löst einen normalen Reset aus. Wenn Du 
länger als 3 Sekunden draufbleibst und dann loslässt, wird der Reset 
beendet und der im Controller integrierte Bootloader gestartet.

: Bearbeitet durch User
von Flo (Gast)


Lesenswert?

Ja genau!Im Prinzip hat er die richtige Lösung. Nur brauche ich das für
nen STM32.

Gerd E. schrieb:
> Na das ist doch überhaupt kein Problem: Du gibst den Leuten in der
> Produktion ne bootbare CD mit nem Mini-Linux drauf. Das bootet quasi auf
> jedem normalen PC und erkennt automatisch den angesteckten Controller
> und flasht den. Dann führt es automatisch auch noch ein paar Tests aus
> und sagt dann ok. Das ist den Leuten aus der Produktion ein ein paar
> Minuten erklärt und vorgeführt. Ganz dumm sind die normalerweise auch
> nicht.

Für die Produktion ginge das noch. Leider sind meine PC-SW Kenntnisse 
begrenzt. Ich würde dafür ewig brauchen. Beim Kunden wird´s dann wieder 
zu kompliziert. Funktioniert dein Programm dann auf jedem PC mit jedem 
Betriebssystem - auch OSX?

von Flo (Gast)


Lesenswert?

Gerd E. schrieb:
>> Ein von außen erreichbaren (z.B. mit Büroklammer eindrückbaren) Taster
>> anbringen. Mit dem kann der Benutzer dann das Boot0 aktivieren.
>
> Anbei ein kleiner Schaltungsausschnitt den ich für diese Funktion schon
> mehrfach erfolgreich verwendet habe:
>
> Ein kurzer Druck auf den Taster löst einen normalen Reset aus. Wenn Du
> länger als 3 Sekunden draufbleibst und dann loslässt, wird der Reset
> beendet und der im Controller integrierte Bootloader gestartet.

Interessante Schaltung. Den Schalter müsste ich aber irgendwie über nen 
Reedkontakt schalten. Ist ne IP65 Steuerung.

von Gerd E. (robberknight)


Lesenswert?

Flo schrieb:
>> Na das ist doch überhaupt kein Problem: Du gibst den Leuten in der
>> Produktion ne bootbare CD mit nem Mini-Linux drauf. Das bootet quasi auf
>> jedem normalen PC und erkennt automatisch den angesteckten Controller
>> und flasht den. Dann führt es automatisch auch noch ein paar Tests aus
>> und sagt dann ok. Das ist den Leuten aus der Produktion ein ein paar
>> Minuten erklärt und vorgeführt. Ganz dumm sind die normalerweise auch
>> nicht.
>
> Für die Produktion ginge das noch. Leider sind meine PC-SW Kenntnisse
> begrenzt. Ich würde dafür ewig brauchen.

ok, das ist ein Argument. Für die Produktion würde ich dann auf eine der 
gängigen kommerziellen Programmierlösungen setzen. Die 
Elektronikfertiger haben normalerweise was fertiges in die Richtung und 
Du musst denen nur das .hex-File geben. Frag Deinen einfach mal, das 
können die sicher.

> Beim Kunden wird´s dann wieder
> zu kompliziert. Funktioniert dein Programm dann auf jedem PC mit jedem
> Betriebssystem - auch OSX?

Nein, der Trick dabei ist ja, daß gar nicht das OS des PC gestartet und 
verwendet wird, sondern das Mini-Linux von der CD. Das erkennt 
automatisch die Hardware und startet einen Prozess der das Flashen und 
Testen übernimmt.

Meine Idee war, das für die Produktion zu verwenden. Sowas könnte man 
natürlich auch dem Kunden geben. Aber ich würde als Kunde nicht meinen 
PC mit irgendeiner CD von irgendeinem Hersteller booten. Denn da könnte 
auch Schadsoftware oder ein Virus drauf sein der sich danach dann im PC 
ausbreitet.

von Gerd E. (robberknight)


Lesenswert?

Flo schrieb:
> Den Schalter müsste ich aber irgendwie über nen
> Reedkontakt schalten. Ist ne IP65 Steuerung.

Und wie kommt da dann USB rein? Das ist doch normal auch nicht 
wasserdicht.

von Flo (Gast)


Lesenswert?

Gerd E. schrieb:
> Flo schrieb:
>> Den Schalter müsste ich aber irgendwie über nen
>> Reedkontakt schalten. Ist ne IP65 Steuerung.
>
> Und wie kommt da dann USB rein? Das ist doch normal auch nicht
> wasserdicht.

Ich hab den über einen DSub-Stecker herausgeführt ;-) Da sind dann auch 
noch andere I/Os dran.

von Gerd E. (robberknight)


Lesenswert?

Flo schrieb:
> Gerd E. schrieb:
>> Flo schrieb:
>>> Den Schalter müsste ich aber irgendwie über nen
>>> Reedkontakt schalten. Ist ne IP65 Steuerung.
>>
>> Und wie kommt da dann USB rein? Das ist doch normal auch nicht
>> wasserdicht.
>
> Ich hab den über einen DSub-Stecker herausgeführt ;-)

Ist der direkt frei von außen erreichbar oder unter ner IP65-Gummikappe 
oder ähnlichem?

Wenn nicht: wenn der nass wird, würde ich mir Gedanken über Kriechströme 
etc. machen...

> Da sind dann auch
> noch andere I/Os dran.

Du hast dann also ne spezielle Kabelpeitsche die das dann auf die normal 
dafür verwendeten Stecker/Buchsen umsetzt.

Ist da noch nen Pin frei? Dann könntest Du da den Taster anschließen.

von Flo (Gast)


Lesenswert?

Wer schon mal Elektronik an Elektronikfremde verkauft hat, der weiß, 
dass alles was nur in irgendeiner weise Kompliziert sein könnte, zu 
einem Telefonat führt.
Ich habe nicht vor aufgrund dieser Problematik einen Servicemitarbeiter 
einzustellen.

Mein Ziel ist es - notfalls! - die komplette SW austauschen zu können.

Da es für mein Problem scheinbar noch keine vernünftige und bezahlbare 
Lösung gibt, werde ich das mal in einer ruhigen Minute evaluieren. Es 
ist klar, dass sich so eine Entwicklung nur im großen Stil lohnen würde. 
Ich denke aber schon, dass es für eine clevere Lösung einen Markt geben 
könnte.

von Flo (Gast)


Lesenswert?

Gerd E. schrieb:
> Ist da noch nen Pin frei? Dann könntest Du da den Taster anschließen.

Dafür möchte ich ungern einen Pin spendieren. Ich weiß ja nicht wofür 
ich den noch brauchen kann. Außerdem gehen die ersten Steuerungen in ein 
paar Wochen raus. Vielleicht bei einem Redesign. Aber so ein SMD Mini 
Reedkontakt wär doch ne schöne Lösung, oder? Hat damit schon jemand 
Erfahrung?

von Gerd E. (robberknight)


Lesenswert?

Flo schrieb:
> Gerd E. schrieb:
>> Ist da noch nen Pin frei? Dann könntest Du da den Taster anschließen.
>
> Dafür möchte ich ungern einen Pin spendieren. Ich weiß ja nicht wofür
> ich den noch brauchen kann. Außerdem gehen die ersten Steuerungen in ein
> paar Wochen raus.

Das passt irgendwie nicht zusammen. Die Belegung der Pins an Deinem 
DSub-Stecker ist doch über das Layout festgelegt und kann damit nach der 
Auslieferung nicht mehr verändert werden.

> Aber so ein SMD Mini
> Reedkontakt wär doch ne schöne Lösung, oder? Hat damit schon jemand
> Erfahrung?

Du musst den innen sehr nah ans Gehäuse ranbringen, sonst kannst Du den 
durchs Gehäuse durch nicht betätigen. Mehr als ein paar Millimeter ist 
nicht. Außerdem solltest Du den Magnet irgendwie unverlierbar am Gehäuse 
befestigen. Wenn Du den nur so als loses Zubehörteil mitlieferst, werden 
die Kunden den im Fall der Fälle nicht mehr finden.

von Flo (Gast)


Lesenswert?

Gerd E. schrieb:
>> Dafür möchte ich ungern einen Pin spendieren. Ich weiß ja nicht wofür
>> ich den noch brauchen kann. Außerdem gehen die ersten Steuerungen in ein
>> paar Wochen raus.
>
> Das passt irgendwie nicht zusammen. Die Belegung der Pins an Deinem
> DSub-Stecker ist doch über das Layout festgelegt und kann damit nach der
> Auslieferung nicht mehr verändert werden.

Bei einem Redesign schon :-)

Gerd E. schrieb:
> Du musst den innen sehr nah ans Gehäuse ranbringen, sonst kannst Du den
> durchs Gehäuse durch nicht betätigen. Mehr als ein paar Millimeter ist
> nicht. Außerdem solltest Du den Magnet irgendwie unverlierbar am Gehäuse
> befestigen. Wenn Du den nur so als loses Zubehörteil mitlieferst, werden
> die Kunden den im Fall der Fälle nicht mehr finden.

Wenn ich den Reed-Kontakt auf der Unterseite montieren würde könnte es 
vom Abstand her funktionieren. Das mit dem Verlieren stimmt. Aber in 
diesem Fall muss er halt gut drauf aufpassen. Ansonsten hat doch jeder 
irgendwo einen Magneten, oder? Selbst ein alter Lautsprecher könnte noch 
funktionieren. Und wenn nicht, dann kann er bei mir für 10€ einen kaufen 
:-)

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.