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
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
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.
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 ?!?
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.
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
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?
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
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.
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.
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.
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.
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...)
> 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.
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?
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.
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.
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.
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.
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.
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.
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?
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.
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
:-)