STM32 Unique Device ID mit OpenOCD auslesen
Beim Arbeiten mit der STM32-Familie von Mikrocontrollern kann es nützlich sein, die werksprogrammierte 96-Bit-UUID über JTAG auszulesen. Auf allen gängigen Betriebssystemen bietet OpenOCD eine einfache, hochkompatible und kostenlose Lösung dafür.
In diesem Beispiel verwenden wir einen JLink-Adapter zusammen mit dem Olimex E407-Evaluationsboard. Sowohl der Adapter als auch das Board sind austauschbar, vorausgesetzt du hast funktionierende OpenOCD-Konfigurationen zur Verfügung.
Laut dem STM32F4-Referenzhandbuch wird die UUID im Speicher an Adresse 0x1FFF 7A10 gespeichert (siehe Abschnitt 39.1). Ausgehend von dieser Adresse müssen wir drei Mal 32 Bits (d.h. 3 Wörter) Speicher lesen, um die vollständige UUID zu erhalten.
Um dies zu tun, können wir den mdw-Befehl verwenden, wie unter OpenOCD General Commands dokumentiert.
openocd -f interface/jlink.cfg -f olimex-e407.cfg -c "init" -c "$target_name mdw 0x1FFF7A10 3" -c "exit"Dieses Skript weist OpenOCD an, zuerst das Zielgerät zu initialisieren, dann 3 Wörter ab 0x1FFF7A10 zu lesen und sofort zu beenden.
Beispielausgabe:
Open On-Chip Debugger 0.7.0 (2013-06-15-20:16)
Licensed under GNU GPL v2
For bug reports, read
https://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
Info : J-Link initialization started / target CPU reset initiated
Info : J-Link ARM V8 compiled Jun 19 2012 11:29:30
Info : J-Link caps 0xb9ff7bbf
Info : J-Link hw version 80000
Info : J-Link hw type J-Link
Info : J-Link max mem block 9320
Info : J-Link configuration
Info : USB-Address: 0x0
Info : Kickstart power on JTAG-pin 19: 0xffffffff
Info : Vref = 3.345 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 0 TRST = 0
Info : J-Link JTAG Interface ready
Info : clock speed 1000 kHz
Info : JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f4x.bs tap/device found: 0x06413041 (mfg: 0x020, part: 0x6413, ver: 0x0)
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
0x1fff7a10: 00370021 32314718 39313739Die letzte Zeile zeigt zuerst die gelesene Adresse, gefolgt von drei hexadezimalen Zahlen, die die drei 32-Bit-UUID-Teile darstellen.
Bei Verwendung anderer Boards oder Interfaces ersetze einfach die mit -f referenzierten Skripte durch die entsprechenden OpenOCD-Skripte.
Obwohl ich dies nicht im Detail überprüft habe, nehme ich an, dass andere STM32-Familien die UUID an der gleichen Adresse speichern.