Forum: Mikrocontroller und Digitale Elektronik STM32 Seriennummer vergeben


von Phantomix X. (phantomix)


Lesenswert?

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?

von Max D. (max_d)


Lesenswert?

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

von Phantomix X. (phantomix)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Dass die STM32 von Haus aus bereits eine eindeutige ID mitbringen reicht 
dir nicht?

von Phantomix X. (phantomix)


Lesenswert?

Nein, leider nicht. Es soll eine Zahl sein die bspw. ab 1000 losgeht und 
dann hochzählt.

von (prx) A. K. (prx)


Lesenswert?

Ach so. Damit jeder Kunde weiss, wieviele du schon verkauft hast.

von Phantomix X. (phantomix)


Lesenswert?

bitte konstruktive kommentare. danke. Ist ja nicht meine Idee, sondern 
Vorgabe.

von Max D. (max_d)


Lesenswert?

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 ^^

von Phantomix X. (phantomix)


Lesenswert?

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!

von greg (Gast)


Lesenswert?

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.

von Phantomix X. (phantomix)


Lesenswert?

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.

von Ich (Gast)


Lesenswert?

Ich habe den Flasher ARM von Segger. Damit gehts automatisch und Stand 
Alone. Ka ob die Investition in Frage kommt.

von Phantomix X. (phantomix)



Lesenswert?

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?

von Hubert A. (Gast)


Lesenswert?

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

von Klaus I. (klauspi)


Lesenswert?

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.

von Phantomix X. (phantomix)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von Phantomix X. (phantomix)


Lesenswert?

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
Noch kein Account? Hier anmelden.