Hallo, Ich stehe nun vor der Aufgabe, mehr als 1000x STM32 Firmware zu flashen und Seriennummer zu vergeben. Leider findet sich dazu im Internet keine schöne [kostenlose?] Lösung. Als Programmiertools kenne ich bis jetzt das ST-Link Utility und den ST Visual Programmer (aus dem ST Toolset). Beide sind nicht in der Lage, mir eine Art Seriennummerierung während des Flashs anzubieten. Zum Vergleich: So hat Silabs das gelöst: http://i1-win.softpedia-static.com/screenshots/Silicon-Labs-MCU-Production-Programmer_1.png?1346644501 Gibt es so etwas auch von/für ST? Und möglichst ohne vierstellig zu kosten?
Selbermachen ist die Devise. Schreib ein Skript das auf Knopfdruck den ST-Progger callt (wir ja wohl ein Commandline interface geben) und danach in deinem Proggerfile (was is das bei nem stm ? ihex ? elf ?) die Seriennummer-Stelle hochzählt. fertig ist die Laube Dauert vlt. 20 minuten das zusammenzuwerfen....
Naja, schon irgendwie russisch... Aber klar, an die Möglichkeit hab ich auch schon gedacht. Dachte nur, dass ich etwas grundlegendes übersehe weil es im Internet so gar keine Info zu dem Thema gibt... Ich werd also eine kleine GUI zusammenklicken mit C# die dann Kommandozeile macht und mit einstellbarer Seriennummer usw. Sollte machbar sein...
Nein, leider nicht. Es soll eine Zahl sein die bspw. ab 1000 losgeht und dann hochzählt.
bitte konstruktive kommentare. danke. Ist ja nicht meine Idee, sondern Vorgabe.
Phantomix Ximotnahp schrieb: > Naja, schon irgendwie russisch... Das ist hier halt zu einem guten Teil ein Bastlerforum und entsprechend fallen die Ideen halt aus. Die Chinesen zeigen uns zur Zeit ja auch wie gut man mit etwas Pfuscherei doch ans Ziel kommt ^^
Stimmt. Na dann werd ich doch mal nen Tag investieren müssen, und vielleicht springt ja auch was für hier mit raus (Tool), danke!
Bin ich der Einzige, der die von Max D. beschriebene Möglichkeit nicht irgendwie "russisch" oder als "Pfusch" ansieht? Das ist doch eine ganz normale Lösung, wie sie x-fach eingesetzt wird.
Ja, ich machs ja auch so, nur kommt noch ne GUI rundrum um das ganze bedienbar / einstellbar zu machen. Schade dass es da nichts fertiges gibt.
Ich habe den Flasher ARM von Segger. Damit gehts automatisch und Stand Alone. Ka ob die Investition in Frage kommt.
Hallo! Nachdem ich nun ein paar Tage investiert habe, möchte ich meinen aktuellen Zwischenstand zeigen. Erstmal die Anforderungen an das Projekt:
1 | - Ein-Klick-Ausführung des Prozesses |
2 | - Kommandozeilen- + GUI-Ausführung des Prozesses |
3 | - Projekteinstellungen |
4 | - Lesen & Speichern von Projekteinstellungen (XML) |
5 | - Speichern von Zusatzinfo (aktuelle Seriennummer etc) |
6 | |
7 | - Log-Ausgabe speichern |
8 | - Pro Projekt / Pro Datum / Pro Ausführung |
9 | - CSV-Export |
10 | |
11 | - HEX-Datei einlesen |
12 | - Gültigen Speicherbereich definieren |
13 | - Füllbyte definieren für Speicherbereiche die "undefiniert" sind |
14 | |
15 | - HEX-Datei ausgeben |
16 | - Gültigen Speicherbereich definieren |
17 | |
18 | - Aliase (Variablen) definieren |
19 | - Lesen aus dem Speicher |
20 | - Aus Tasks wie bspw. Seriennummer |
21 | - Schreiben in den Speicher |
22 | |
23 | - Binärdaten intern definieren |
24 | - als Hexwerte / Statische Byte-Werte definieren |
25 | |
26 | - als Alias |
27 | |
28 | - Binärdatei (Rohdaten) einlesen |
29 | - Offsetkorrektur (an die richtige Stelle schieben) |
30 | |
31 | - Inputdaten mergen (zuletzt eingelesene Datei überschreibt evtl vorherige Daten) |
32 | |
33 | - Externes Programm aufrufen mit Parametern |
34 | - Programmausgabe in Logfenster darstellen können |
35 | - SUCCESS/FAIL - Analyse anhand des Ausgabetextes (string.contains(...), evtl RegEx) |
36 | |
37 | - Einfache Anzeige des Ergebnisses mit RotKreuz/GrünHaken/GrauFragezeichen-Symbol |
38 | |
39 | - Seriennummer erzeugen |
40 | - Alias |
41 | - Breite 8, 16, 24, 32 Bit |
42 | - Big - / Little Endian |
43 | - Seriennummer hochzählen: Immer / bei Erfolg |
44 | |
45 | - CRC-Berechnung über Speicherbereich |
46 | - Speichern der CRC |
47 | |
48 | - Überall Aliase als Platzhalter ermöglichen, bspw bei |
49 | - Ausgabedateien |
50 | - Log-Texten / CSV-Export |
51 | ... |
52 | |
53 | - Erfolgsmeldung / Fehlschlagmeldung frei definierbar (bspw um Alias mit einzubauen) |
54 | |
55 | - Multi-Language |
56 | |
57 | |
58 | - Entferne / Belasse Zwischendateien bei Erfolg / Fehlschlag |
Aus den Screenshots wird bereits ersichtlich, dass das Projekt auf einem "guten Weg" ist. Als Entwicklungsumgebung+Sprache kommt VS2013 mit C# zum Einsatz. Generell wäre ich nicht abgeneigt, das Ganze am Ende kostenlos (evtl. auch Open Source) zur Verfügung zu stellen. Wäre so ein Tool für euch nützlich / Was hättet ihr gern noch drin?
Find ich gut (+1) und wäre natürlich an einer Open Source Lösung interessiert. Was mir konkret einfällt: - Seriennummer string konfigurierbar mit ASCIIs (z.B. Global Index, Jahr, Datum, etc). - Nach erfolgreichem Flashen - Batch ausführbar mit konfigurierbaren Parametern und Parameterüber (z.B. für Python Script das einen Eintrag in eine SQL DB vornimmt) ...
Max D. schrieb: > Phantomix Ximotnahp schrieb: >> Naja, schon irgendwie russisch... > > Das ist hier halt zu einem guten Teil ein Bastlerforum und entsprechend > fallen die Ideen halt aus. Die Chinesen zeigen uns zur Zeit ja auch wie > gut man mit etwas Pfuscherei doch ans Ziel kommt ^^ Ich bin z.B. auch in einem ganz anderen Fachforum unterwegs. Und da werden manchmal solche Fragen gestellt, die könntest Du gar nicht glauben. Man kann da nur feststellen, Aha: Dahin sind also die ganzen Fachkräfte-Stellen hinverlagert worden. Sei mir bitte nicht böse, aber ich werde diese Dilletanten auch noch nicht in meiner Freizeit födern.
Hubert A. schrieb: > Find ich gut (+1) und wäre natürlich an einer Open Source Lösung > interessiert. Was mir konkret einfällt: > - Seriennummer string konfigurierbar mit ASCIIs (z.B. Global Index, > Jahr, Datum, etc). Wird auch möglich sein durch den Task "Define Variable": - Man legt eine Seriennummer an, diese erhält ein Alias - Dann definiert man ein neues Alias(Variable) und hat die Möglichkeit, in einer Textzeile bspw. zu schreiben: "SN-%SERIAL_NUMBER%-%YEAR%-%MONTH%-%DAY%" usw. > - Nach erfolgreichem Flashen - Batch ausführbar mit konfigurierbaren > Parametern und Parameterüber (z.B. für Python Script das einen Eintrag > in eine SQL DB vornimmt) ... Das ist im Prinzip schon mit den Mitteln möglich, die ich da habe: Es hindert dich niemand, zwei Tasks "Run external Program" zu definieren: Eins fürs flashen, eins fürs DB schreiben.
Bei manchen STM32 hast Du eine OTP-Area von 512 Byte. Die ist genau für so etwas gedacht. Was machst Du, wenn Du ein Softwareupdate einspielen willst? Nur personalisierte Files einspielen? Vorher Seriennummer auslesen? Nein, eine Seriennummer mitten drin im normalen Flash ist dann doof. Entweder in die letzte Flash Page, in ein externes 1W/I2C PROM (mit Schreibschutz), oder eben den dafür vorgesehenen OTP-Bereich. Dann überleben Seriennummer, Produktionsdatum und MAC-Adresse auch Updates. Ich habe mir mal ein sauteures Raritan IPMI Remote KVM Board geschossen, weil die Flaschen bei diesem Thema gepennt hatten und bei einem Update die MAC Adresse des Ethernet Interfaces genullt wurde. fchk
Das ist eine völlig andere Baustelle - und bereits gelöst. Ich sollte vielleicht für das SW-Projekt ein neues Thema aufmachen... Immerhin betrifft das nicht nur STM32 sondern auch alle anderen Architekturen, die einen Command Line Programmer mitbringen... Zu deiner Frage: Am Anfang des Flashes steht ein "Bootloader" der beim Update nicht mit überschrieben wird. In dem gleichen Bereich steht dann auch die Seriennummer. Nochmals Tipp für Leute, die Read-out-Protection beim STM32F1 benutzen wollen: Die ersten 4 KByte werden dadurch Read-Only! Edith(tm): ja, auch den OTP-Bereich kann man für S/N benutzen, ändert aber nichts daran, dass man das bei der Produktion irgendwie hinein kriegen muss. Das einzige was dann anders ist, ist das Linker-Mapping
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.