Forum: Mikrocontroller und Digitale Elektronik STM32H7 und JTAG: Irgendwelche Fallstricke


von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich bin gerade dabei, eine selbst entwickelte Hardware auf Basis eines 
STM32H753 in Betrieb zu nehmen und habe Probleme beim JTAG. Ein aufs 
nötigste reduzierter Schaltplan ist im Anhang. Der Debug-Stecker ist 
nicht als Stiftleiste, sondern als Stecker für einen Folienleiter 
ausgeführt, um die Bauhöhe gering zu halten. Von der Belegung her 
entspricht er dem üblichen ARM 20-Pin Header, wobei ich noch einen 
Debug-UART auf unbenutzte Pins gelegt habe. Auf der anderen Seite des 
Folienleiters ist ein kleines Adapterplatinchen mit dem üblichen 
20-poligen Stecker.

Debugger ist Olimex ARM-USB-OCD-H oder ein JLink. Zum Test nehme ich 
OpenOCD mit dieser Config
1
adapter driver jlink
2
transport select swd # oder jtag
3
source [find target/stm32h7x_dual_bank.cfg]

Mit "transport select jtag" bekomme ich diese Fehler, und zwar sowohl 
beim JLink als auch beim Olimex-Adapter:
1
ubuntu@hsw:~/scripts$ openocd -f openocd-2hj.cfg 
2
Open On-Chip Debugger 0.10.0+dev-snapshot (2020-11-18-11:20)
3
Licensed under GNU GPL v2
4
For bug reports, read
5
  http://openocd.org/doc/doxygen/bugs.html
6
Info : Listening on port 6666 for tcl connections
7
Info : Listening on port 4444 for telnet connections
8
Info : J-Link Ultra V4 compiled Jan  7 2020 16:52:38
9
Info : Hardware version: 4.00
10
Info : VTarget = 3.323 V
11
Info : clock speed 1800 kHz
12
Info : JTAG tap: stm32h7x.cpu tap/device found: 0x6ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x6)
13
Info : JTAG tap: stm32h7x.bs tap/device found: 0x06450041 (mfg: 0x020 (STMicroelectronics), part: 0x6450, ver: 0x0)
14
Info : TAP auto0.tap does not have valid IDCODE (idcode=0x0)
15
Info : TAP auto1.tap does not have valid IDCODE (idcode=0x0)
16
Info : TAP auto2.tap does not have valid IDCODE (idcode=0x0)
17
Info : TAP auto3.tap does not have valid IDCODE (idcode=0x0)
18
Info : TAP auto4.tap does not have valid IDCODE (idcode=0x0)
19
Info : TAP auto5.tap does not have valid IDCODE (idcode=0x0)
20
Info : TAP auto6.tap does not have valid IDCODE (idcode=0x0)
21
Info : TAP auto7.tap does not have valid IDCODE (idcode=0x0)
22
Info : TAP auto8.tap does not have valid IDCODE (idcode=0x0)
23
Info : TAP auto9.tap does not have valid IDCODE (idcode=0x0)
24
Info : TAP auto10.tap does not have valid IDCODE (idcode=0x0)
25
Info : TAP auto11.tap does not have valid IDCODE (idcode=0x0)
26
Info : TAP auto12.tap does not have valid IDCODE (idcode=0x0)
27
Info : TAP auto13.tap does not have valid IDCODE (idcode=0x0)
28
Info : TAP auto14.tap does not have valid IDCODE (idcode=0x0)
29
Info : TAP auto15.tap does not have valid IDCODE (idcode=0x0)
30
Info : TAP auto16.tap does not have valid IDCODE (idcode=0x0)
31
Info : TAP auto17.tap does not have valid IDCODE (idcode=0x0)
32
Info : TAP auto18.tap does not have valid IDCODE (idcode=0x0)
33
Warn : Unexpected idcode after end of chain: 83 0x00000000
34
Warn : Unexpected idcode after end of chain: 115 0x00000000
35
Warn : Unexpected idcode after end of chain: 147 0x00000000
36
Warn : Unexpected idcode after end of chain: 179 0x00000000
37
Warn : Unexpected idcode after end of chain: 211 0x00000000
38
Warn : Unexpected idcode after end of chain: 243 0x00000000
39
Warn : Unexpected idcode after end of chain: 275 0x00000000
40
Warn : Unexpected idcode after end of chain: 307 0x00000000
41
Warn : Unexpected idcode after end of chain: 339 0x00000000
42
Warn : Unexpected idcode after end of chain: 371 0x00000000
43
Warn : Unexpected idcode after end of chain: 403 0x00000000
44
Warn : Unexpected idcode after end of chain: 435 0x00000000
45
Warn : Unexpected idcode after end of chain: 467 0x00000000
46
Warn : Unexpected idcode after end of chain: 499 0x00000000
47
Warn : Unexpected idcode after end of chain: 531 0x00000000
48
Warn : Unexpected idcode after end of chain: 563 0x00000000
49
Warn : Unexpected idcode after end of chain: 595 0x00000000
50
Warn : Unexpected idcode after end of chain: 627 0x00000000
51
Error: double-check your JTAG setup (interface, speed, ...)
52
Error: Trying to use configured scan chain anyway...
53
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 2 -expected-id 0x00000000"
54
Error: auto0.tap: IR capture error; saw 0x0000 not 0x0001
55
Warn : Bypassing JTAG setup events due to errors
56
Info : stm32h7x.cpu0: hardware has 29 breakpoints, 11 watchpoints
57
Info : stm32h7x.cpu0: external reset detected
58
Info : starting gdb server for stm32h7x.cpu0 on 3333
59
Info : Listening on port 3333 for gdb connections
60
^Cshutdown command invoked

Mit "transport select swd" sieht das ganze besser aus: (nur Jlink, der 
Olimex kann kein SWD)
1
ubuntu@hsw:~/scripts$ openocd -f openocd-2hj.cfg 
2
Open On-Chip Debugger 0.10.0+dev-snapshot (2020-11-18-11:20)
3
Licensed under GNU GPL v2
4
For bug reports, read
5
  http://openocd.org/doc/doxygen/bugs.html
6
Info : Listening on port 6666 for tcl connections
7
Info : Listening on port 4444 for telnet connections
8
Info : J-Link Ultra V4 compiled Jan  7 2020 16:52:38
9
Info : Hardware version: 4.00
10
Info : VTarget = 3.321 V
11
Info : clock speed 1800 kHz
12
Info : SWD DPIDR 0x6ba02477
13
Info : stm32h7x.cpu0: hardware has 8 breakpoints, 4 watchpoints
14
Info : starting gdb server for stm32h7x.cpu0 on 3333
15
Info : Listening on port 3333 for gdb connections
16
^Cshutdown command invoked

Was mache ich falsch? Funktioniert JTAG bei STM32 nicht richtig? Falsch 
angeschlossen? Falsche OpenOCD-Config?

fchk

von jo mei (Gast)


Lesenswert?

Frank K. schrieb:
> Was mache ich falsch?

Zunächst zeigst du nicht den kompletten Schaltplan. Auf dem Teil
den man nicht sieht können jede Menge Fehler sein.

von Johannes S. (Gast)


Lesenswert?

Die H7 sind komplizierter was den ROM Tablescan angeht, da hat der U. 
Bonnes auch viel Zeit für die BMP reingesteckt. BMP, JLink und STLink V3 
sollten da sicher funktionieren. Als Stecker ist da von ST ein neuer mit 
14 pol 50 mil eingeführt worden, der hat auch einen VCOM Port.
Warum JTAG? SWD funktioniert genauso gut für den µC, JTAG macht IMO nur 
Sinn wenn mehrere Devices daran hängen.
Dann sollte Boot0 für den Normalbetrieb auf GND liegen, mit Boot0=high 
startet man in den Bootloader. Ein Connect sollte damit aber trotzdem 
möglich sein.

von Frank K. (fchk)


Lesenswert?

Ich habe JTAG vorgesehen, weil ich dafür einen FT2232-basierten Debugger 
habe, den ich auch schon für andere Prozessoren verwendet habe, und 
diese Debug-Verbindung ist Quasi-Standard bei vielen Boards bei uns. 
TI-Prozessoren (Tiva und C28xxx) kann ich z.B. damit problemlos flashen. 
Offensichtlich hat STM32 da einige Quirks, und JTAG geht tatsächlich nur 
für Boundary Scan.

fchk

von Jedzia D. (Firma: Rast und Ruh) (jedzia)


Lesenswert?

*OpenOCD-20210519-0.11.0*
im Gegensatz zu "Open On-Chip Debugger 0.10.0+dev-snapshot 
(2020-11-18-11:20)"

Nur so ne Idee, also das Alter von deiner Toolchain. Ist ja so 'lala 
neu, der dual-Heiner.

Zwecks Nachvollziehbarkeit unterstützt mein vorsteinzeitlicher J-link 
keine STM32H7 ... super. Mit standard St-Linkv2 im JTAG Modus:
1
C:\Toolchain\OpenOCD\OpenOCD-20210519-0.11.0\bin>openocd.exe -s ..\scripts\ -f frank-test-jtag2.cfg -f target\stm32h7x.cfg
2
Open On-Chip Debugger 0.11.0 (2021-05-19) [https://github.com/sysprogs/openocd]
3
Licensed under GNU GPL v2
4
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
5
For bug reports, read
6
        http://openocd.org/doc/doxygen/bugs.html
7
hla_jtag
8
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
9
Info : Listening on port 6666 for tcl connections
10
Info : Listening on port 4444 for telnet connections
11
Info : clock speed 1800 kHz
12
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
13
Info : Target voltage: 3.223715
14
Info : stm32h7x.cpu0: hardware has 8 breakpoints, 4 watchpoints
15
Info : starting gdb server for stm32h7x.cpu0 on 3333
16
Info : Listening on port 3333 for gdb connections
17
shutdown command invoked

via cfg:
1
#
2
# STMicroelectronics ST-LINK/V1, ST-LINK/V2, ST-LINK/V2-1, STLINK-V3 in-circuit
3
# debugger/programmer
4
#
5
6
adapter driver hla
7
hla_layout stlink
8
hla_device_desc "ST-LINK"
9
hla_vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753
10
11
# Optionally specify the serial number of ST-LINK/V2 usb device.  ST-LINK/V2
12
# devices seem to have serial numbers with unreadable characters.  ST-LINK/V2
13
# firmware version >= V2.J21.S4 recommended to avoid issues with adapter serial
14
# number reset issues.
15
# eg.
16
#hla_serial "\xaa\xbc\x6e\x06\x50\x75\xff\x55\x17\x42\x19\x3f"
17
18
adapter speed 4000
19
transport select hla_jtag
20
#transport select hla_swd

Deine Fehlermeldung lässt sich nach dem Kommentar auf 
http://openocd.org/doc-release/doxygen/jtag_2core_8c_source.html 
interpretieren, wie wenn der H7 im Bypass Modus wäre. ... naja ich weiss 
nicht, Software ...

Prüf lieber nochmal, zum X-ten mal, die korrekte Verbindung der 
JTAG-Anbindung und die ordentliche Stromversorgung. Ich hätte gerne mit 
einem funktionierenden J-Link Connect + Log zum Vergleich geholfen 
grummel. Das macht halt dann hoffentlich jemand anders.
Viel Erfolg, Frank!:)

von Frank K. (fchk)


Lesenswert?

Jedzia D. schrieb:
> *OpenOCD-20210519-0.11.0*
> im Gegensatz zu "Open On-Chip Debugger 0.10.0+dev-snapshot
> (2020-11-18-11:20)"
>
> Nur so ne Idee, also das Alter von deiner Toolchain. Ist ja so 'lala
> neu, der dual-Heiner.

Danke, das hat eine deutliche Verbesserung gebracht:
1
ubuntu@hsw:~/op-scripts$ openocd -f openocd-2hj.cfg 
2
Open On-Chip Debugger 0.11.0
3
Licensed under GNU GPL v2
4
For bug reports, read
5
  http://openocd.org/doc/doxygen/bugs.html
6
Info : Listening on port 6666 for tcl connections
7
Info : Listening on port 4444 for telnet connections
8
Info : J-Link Ultra V4 compiled Jan  7 2020 16:52:38
9
Info : Hardware version: 4.00
10
Info : VTarget = 3.326 V
11
Info : clock speed 1800 kHz
12
Info : JTAG tap: stm32h7x.cpu tap/device found: 0x6ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x6)
13
Info : JTAG tap: stm32h7x.bs tap/device found: 0x06450041 (mfg: 0x020 (STMicroelectronics), part: 0x6450, ver: 0x0)
14
Info : stm32h7x.cpu0: hardware has 8 breakpoints, 4 watchpoints
15
Info : starting gdb server for stm32h7x.cpu0 on 3333
16
Info : Listening on port 3333 for gdb connections
17
^Cshutdown command invoked

Auch mein FT2232H-basierter Debugger funktioniert jetzt. Ich bekomme 
zwar immer noch Fehlermeldungen, aber "bessere":
"Info: DAP transaction stalled (WAIT) - slowing down"

Flashen geht jedenfalls, und das geflashte läuft auch.

Ich hatte das gar nicht so auf dem Schirm gehabt, weil die alte 
OpenOCD-Version mit dem Nucleo-H753ZI-Board und seinem Onboard STLink 
einwandfrei funktioniert.

fchk

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.