Forum: Mikrocontroller und Digitale Elektronik Target mit SWD verbinden - "Vdd from Application" , GND?


von Christoph K. (chriskuku)


Lesenswert?

Immer noch Problem mit dem DIY-MORE Target.
Programmierung der Anwendung des STM32F407G-DISC1 auf der On-Board MCU 
aus STM32CUBEIDE funktioniert.

Sobald ich auf das über SWD angeschlossene externe DIY-MORE Board 
wechsle,
gibt's die Probleme. GDB Server kann nicht mit dem Target verbinden.

Einerseits wurde behauptet, es läge daran, daß das Target eine 
gefälschte MCU sei (Clone), andererseits kann ich es nicht so richtig 
glauben.

Deshalb noch eine Frage zur Verdrahtung:

Ich habe drei Drähte von der SWD Stiftleiste zum Target gehen:
SWCLK - 2
SWDIO - 4
NRST  - 5

Dann gehen noch GND und Vcc von den Stiftleisten des Targets
zu GND und +5V (an P2).

Sollte ich stattdessen GND (3) und "Vdd from application" (1) mit 3.3V 
des Targets verbinden und 5V weglassen?

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Christoph K. schrieb:
> Ich habe drei Drähte von der SWD Stiftleiste zum Target gehen:
> SWCLK - 2
> SWDIO - 4
> NRST  - 5

Auf NRST kann man fast immer verzichten - auf GND niemals.

von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Sobald ich auf das über SWD angeschlossene externe DIY-MORE Board
> wechsle,
> gibt's die Probleme. GDB Server kann nicht mit dem Target verbinden.

Es ist immer ungemein hilfreich, die wichtigen Informationen 
auszulassen.
Spionagegefahr!!! An WAS ist das Board angeschlossen bzw. an WAS soll es
angeschlossen werden???

> Ich habe drei Drähte von der SWD Stiftleiste zum Target gehen:
> SWCLK - 2
> SWDIO - 4
> NRST  - 5
>
> Dann gehen noch GND und Vcc von den Stiftleisten des Targets
> zu GND und +5V (an P2).

Von WAS ???

> Sollte ich stattdessen GND (3) und "Vdd from application" (1) mit 3.3V
> des Targets verbinden und 5V weglassen?
(1) und (3) von WAS???

von Christoph K. (chriskuku)


Lesenswert?

War aus meiner Problemschilderung nicht zu entnehmen, daß es sich um den 
SWD Anschluß des Discoveryboards handelt? Womit dann auch die Pinnummern 
und Pfosten (P2) klar sein dürften.
Ebenso habe ich das Target genannt.

Was fehlt da an Informationen?

von Christoph K. (chriskuku)


Lesenswert?

Neue Erkenntnis:
1
$ st-flash erase
2
st-flash 1.6.1
3
2022-03-31T12:24:49 WARN: unknown chip id! 0x374b
4
Failed to connect to target
5
$

Kann ich das irgendwie umgehen? Blackmagic?

von Christian G. (Gast)


Lesenswert?

Ich habe mal eine gefälschte MCU aus China erwischt. OpenOCD ist dies 
wohl egal.

Unter Projekteigenschaften kann man in der STMCubeIDE von 
ST-Link-GDB-Server auf OpenOCD wechseln (Run/Debug Settings->Edit 
Configuration -> Debugger -> Debug Probe)

von Bauform B. (bauformb)


Lesenswert?

Christoph K. schrieb:
> chip id! 0x374b

wäre ein Fälscher so blöd, eine unmögliche chip id einzubauen?
Hatten wir schon: SWD-Taktfrequenz zu hoch für dieses Target?

von Harry L. (mysth)


Lesenswert?

Oder auf dem Discovery den Debugger nicht von der internen MCU 
getrennt....

von Christoph K. (chriskuku)


Lesenswert?

Harry L. schrieb:
> Oder auf dem Discovery den Debugger nicht von der internen MCU
> getrennt....

Nein, nicht der Fall. Schrieb ich eingangs, daß es um das extern 
angeschlossene Traget geht.

von Christoph K. (chriskuku)


Lesenswert?

Bauform B. schrieb:
> Christoph K. schrieb:
>> chip id! 0x374b
>
> wäre ein Fälscher so blöd, eine unmögliche chip id einzubauen?
> Hatten wir schon: SWD-Taktfrequenz zu hoch für dieses Target?

Wo soll ich denn im CMD-line st-flash eine Clock einstellen?
1
$ st-flash --debug erase
2
st-flash 1.6.1
3
2022-03-31T14:59:44 DEBUG: *** looking up stlink version
4
2022-03-31T14:59:44 DEBUG: st vid         = 0x0483 (expect 0x0483)
5
2022-03-31T14:59:44 DEBUG: stlink pid     = 0x374b
6
2022-03-31T14:59:44 DEBUG: stlink version = 0x2
7
2022-03-31T14:59:44 DEBUG: jtag version   = 0x27
8
2022-03-31T14:59:44 DEBUG: swim version   = 0x1b
9
2022-03-31T14:59:44 DEBUG: *** looking up stlink version
10
2022-03-31T14:59:44 DEBUG: st vid         = 0x0483 (expect 0x0483)
11
2022-03-31T14:59:44 DEBUG: stlink pid     = 0x374b
12
2022-03-31T14:59:44 DEBUG: stlink version = 0x2
13
2022-03-31T14:59:44 DEBUG: jtag version   = 0x27
14
2022-03-31T14:59:44 DEBUG: swim version   = 0x1b
15
2022-03-31T14:59:44 DEBUG: stlink current mode: mass
16
2022-03-31T14:59:44 DEBUG: JTAG/SWD freq set to 0
17
2022-03-31T14:59:44 DEBUG: *** set_swdclk ***
18
2022-03-31T14:59:44 DEBUG: stlink current mode: mass
19
2022-03-31T14:59:44 DEBUG: *** stlink_enter_swd_mode ***
20
2022-03-31T14:59:44 DEBUG: *** stlink_jtag_reset ***
21
2022-03-31T14:59:44 DEBUG: *** stlink_reset ***
22
2022-03-31T14:59:44 DEBUG: *** stlink_write_debug32 5fa0004 to 0xe000ed0c
23
2022-03-31T14:59:44 DEBUG: Loading device parameters....
24
2022-03-31T14:59:44 DEBUG: *** stlink_core_id ***
25
2022-03-31T14:59:44 DEBUG: core_id = 0x0000374b
26
2022-03-31T14:59:44 DEBUG: *** stlink_read_debug32 374b is 0xe0042000
27
2022-03-31T14:59:44 WARN: unknown chip id! 0x374b
28
Failed to connect to target
29
$

von Christoph K. (chriskuku)


Lesenswert?

Mal eine Frage zum st-flash utility:

Wenn das meldet, daß eine ungültige MCU (gefälschte) angeschlossen sei, 
und früher war das nicht so, liegt das dann an der Version der ST-LINK 
Firmware? Doch wohl eher nicht am st-flash utility selbst?

Kann man eine ältere Version ins ST-LINK Interface (des 
DISCOVERY-Boards) flashen?

Und noch was: OpenOCD benutzt doch auch die ST-LINK Firmware, oder? Mit 
OpenOCD kriege ich ja auch keinen stabilen Zustand hergestellt.

von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Und noch was: OpenOCD benutzt doch auch die ST-LINK Firmware, oder? Mit
> OpenOCD kriege ich ja auch keinen stabilen Zustand hergestellt.

Wie schon mal: was "kein stabiler Zustand" ist, scheint ein großes
Geheimnis zu sein, oder??? Ist es eigentlich so schwierig, sich in die 
Lage eines Leser zu versetzen, der nur genau das wissen kann, was hier 
an Beschreibung gegeben wird? Wir (zumindest ich) sitzen (bis auf einen) 
nicht davor und sehen bzw. wissen nicht, was wo passiert/ausprobiert 
wurde, sondern sind auf eine präzise und vollständige Beschreibung der 
Gesamtumstände angewiesen.

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Hardware-Aufbau:
macOS BigSur 11.6.4
MacBookPro
An USB hängt das STM32F407G-DISC1 board.
CN3 Jumper Off (also on board MCU) abgeklemmt.
DIY-MORE Board wird über Vcc und GND vom DISCOVERY P2 Leiste Vcc GND 
versorgt.

SWCLK und SWDIO vom SWD-Interface des DISCOVERY gehen an PA14/PA13 des 
DIY-MORE Board.

Software:

st-flash erase ergibt oben gepostete Ausgabe:
1
2022-03-31T14:59:44 WARN: unknown chip id! 0x374b
2
3
Failed to connect to target
4
5
$

Starte ich OpenOCD in einem Terminalfenster, so steigt OpenOCD aus:
1
$ ./DEBUG
2
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-19:34)
3
Licensed under GNU GPL v2
4
For bug reports, read
5
  http://openocd.org/doc/doxygen/bugs.html
6
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
7
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
8
9
Info : Listening on port 6666 for tcl connections
10
Info : Listening on port 4444 for telnet connections
11
Info : clock speed 2000 kHz

Erst mal soweit.
Warum steigt OpenOCD aus?

von Thomas Z. (usbman)


Lesenswert?

Christoph K. schrieb:
> Wenn das meldet, daß eine ungültige MCU (gefälschte) angeschlossen sei,
> und früher war das nicht so, liegt das dann an der Version der ST-LINK
> Firmware? Doch wohl eher nicht am st-flash utility selbst?

ob die gefälscht ist wäre ja noch zu klären. Ich würde als Hersteller 
(ST) auch nur meine eigenen IDs unterstützen. Es ist ja z.B nicht 
sichergestellt dass andere Hersteller die gleichen Flash Operationen 
haben. Wenn das so ist hat dein Hersteller sicher auch passende 
Flashsoftware.

PS google fördert das zu tage inc Lösungen.

https://github.com/stlink-org/stlink/issues/1012

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Thomas Z. schrieb:
> Christoph K. schrieb:
>> Wenn das meldet, daß eine ungültige MCU (gefälschte) angeschlossen sei,
>> und früher war das nicht so, liegt das dann an der Version der ST-LINK
>> Firmware? Doch wohl eher nicht am st-flash utility selbst?
>
> ob die gefälscht ist wäre ja noch zu klären. Ich würde als Hersteller
> (ST) auch nur meine eigenen IDs unterstützen. Es ist ja z.B nicht
> sichergestellt dass andere Hersteller die gleichen Flash Operationen
> haben. Wenn das so ist hat dein Hersteller sicher auch passende
> Flashsoftware.

Nun wurde mir hier aber gesagt, ich solle es mal mit OpenOCD versuchen.
Aber OpenOCD benutzt doch sicher auch die im Discovery-Board 
gespeicherte ST-LINK Firmware Version, oder? Meine Frage unter anderem 
wäre die: kann ich auf eine frühere ST-LINK Firmware zurück? Habe jetzt 
kein frisches Original Discoveryboard mehr. Die drei, die ich habe, sind 
alle mit der neuesten ST-LINK Firmware geflasht.

von Thomas Z. (usbman)


Lesenswert?

wie oben geschrieben
google "Chip id 0x374b" bringt einiges zutage. Du bist nicht der 
einzige.

von Thomas Z. (usbman)


Lesenswert?

und noch was:
Im ganzen Thread habe ich nirgens gelesen welche Target CPU du denn 
eigentlich hast. Ich lese da nur von DIY MORE was ist das?

von Christoph K. (chriskuku)


Lesenswert?

Thomas Z. schrieb:
> und noch was:
> Im ganzen Thread habe ich nirgens gelesen welche Target CPU du denn
> eigentlich hast. Ich lese da nur von DIY MORE was ist das?

https://stm32-base.org/boards/STM32F407VGT6-diymore.html

von Christoph K. (chriskuku)


Lesenswert?

Thomas Z. schrieb:
...
>
> PS google fördert das zu tage inc Lösungen.
>
> https://github.com/stlink-org/stlink/issues/1012

Die vermeintlichen Lösungen funktionieren bis jetzt bei mir nicht.

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Starte ich OpenOCD in einem Terminalfenster, so steigt OpenOCD aus:
>
>
1
> $ ./DEBUG
2
> xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-19:34)
3
> Licensed under GNU GPL v2
4
> For bug reports, read
5
>   http://openocd.org/doc/doxygen/bugs.html
6
> Info : The selected transport took over low-level target control. The 
7
> results might differ compared to plain JTAG/SWD
8
> srst_only separate srst_nogate srst_open_drain connect_deassert_srst
9
> 
10
> Info : Listening on port 6666 for tcl connections
11
> Info : Listening on port 4444 for telnet connections
12
> Info : clock speed 2000 kHz
13
> 
14
> 
15
>
>
> Erst mal soweit.
> Warum steigt OpenOCD aus?

Dass es das tut, sehe ich nicht. Das sieht erst mal so aus, dass es 
weiter nichts macht: Das "Listening ..." heißt doch, "ich warte auf 
Anweisungen".
Da könnte ma ja mal mit telnet auf den Port los und mal ein paar 
interaktive Kommandos versuchen. "reset init" oder "flash probe 0" wären 
Kandidaten dafür.

Wo ist denn die Angabe der cfg-Datei für OpenOCD, und was steht da drin. 
Vielleicht versteckt sich das irgendwo hinter dem ominösen "./DEBUG", 
das ist doch vmtl. ein Script mit (mir jedenfalls) unbekanntem Inhalt. 
Um mehr Info zu bekommen, emphiehlt sich zusätzlich der Parameter "-d 
3".

von Christoph K. (chriskuku)


Lesenswert?

A. B. schrieb:
> Christoph K. schrieb:
>> Starte ich OpenOCD in einem Terminalfenster, so steigt OpenOCD aus:
>>
>>
1
>> $ ./DEBUG
2
>> xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-19:34)
3
>> Licensed under GNU GPL v2
4
>> For bug reports, read
5
>>   http://openocd.org/doc/doxygen/bugs.html
6
>> Info : The selected transport took over low-level target control. The
7
>> results might differ compared to plain JTAG/SWD
8
>> srst_only separate srst_nogate srst_open_drain connect_deassert_srst
9
>>
10
>> Info : Listening on port 6666 for tcl connections
11
>> Info : Listening on port 4444 for telnet connections
12
>> Info : clock speed 2000 kHz
13
>>
14
>>
15
>>
>>
>> Erst mal soweit.
>> Warum steigt OpenOCD aus?
>
> Dass es das tut, sehe ich nicht. Das sieht erst mal so aus, dass es
> weiter nichts macht: Das "Listening ..." heißt doch, "ich warte auf
> Anweisungen".

Ich hätte noch den $ Prompt hinzufügen sollen. Wenn ich sage, es steigt 
aus, sollte das eigentlich genügen.
Es dauert ca. 10 Sek., dann kommt der Prozeß zurück auf den Prompt.

> Da könnte ma ja mal mit telnet auf den Port los und mal ein paar
> interaktive Kommandos versuchen. "reset init" oder "flash probe 0" wären
> Kandidaten dafür.
>

Wie gesagt, der Prozeß macht kein "Listen", sondern steigt aus.
Üblicherweise steht bei einem funktionierndem Server noch etwas mehr, 
bis er in das Listen geht.


> Wo ist denn die Angabe der cfg-Datei für OpenOCD, und was steht da drin.
> Vielleicht versteckt sich das irgendwo hinter dem ominösen "./DEBUG",
> das ist doch vmtl. ein Script mit (mir jedenfalls) unbekanntem Inhalt.
> Um mehr Info zu bekommen, emphiehlt sich zusätzlich der Parameter "-d
> 3".
Mein DEBUG-Script (dem man schon einige Versuche mit anderen Versionen 
und boards entnehmen kann):
1
$ cat DEBUG
2
#!/bin/sh
3
#/Users/kuku/opt/xpack-openocd-0.10.0-14/bin/openocd -f /Users/kuku/opt/xpack-openocd-0.10.0-14/scripts/board/stm32f4discovery.cfg -c "gdb_port 3333" -c "telnet_port 4444"
4
/Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/openocd -f /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/scripts/board/stm32f4discovery.cfg -c "gdb_port 3333" -c "telnet_port 4444"
5
#/Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/openocd -f /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/scripts/board/st_nucleo_f4.cfg -c "gdb_port 3333" -c "telnet_port 4444"

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Ich hätte noch den $ Prompt hinzufügen sollen. Wenn ich sage, es steigt
> aus, sollte das eigentlich genügen.
> Es dauert ca. 10 Sek., dann kommt der Prozeß zurück auf den Prompt.

Aha, das weiß man natürlich beim Blick in die Glaskugel ...
Allein "10s" sind schon aufschlußreich, denn bei einem 
Verbindungsproblem gleich zu Beginn sollte das schon nach 1 bis 2s 
passieren.

Wie wär's denn dann mal mit

.../openocd -f.../stm32f4discovery.cfg -d3

von Christoph K. (chriskuku)


Lesenswert?

1
$ /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/openocd -f /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/scripts/board/stm32f4discovery.cfg -c "gdb_port 3333" -c "telnet_port 4444" -d3
2
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-19:34)
3
Licensed under GNU GPL v2
4
For bug reports, read
5
  http://openocd.org/doc/doxygen/bugs.html
6
User : 3 3 options.c:63 configuration_output_handler(): debug_level: 3
7
User : 4 3 options.c:63 configuration_output_handler(): 
8
Debug: 5 3 options.c:244 add_default_dirs(): bindir=bin
9
Debug: 6 3 options.c:245 add_default_dirs(): pkgdatadir=
10
Debug: 7 3 options.c:246 add_default_dirs(): exepath=/Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin
11
Debug: 8 3 options.c:247 add_default_dirs(): bin2data=../
12
Debug: 9 3 configuration.c:44 add_script_search_dir(): adding /Users/kuku/Library/Preferences/org.openocd
13
Debug: 10 3 configuration.c:44 add_script_search_dir(): adding /Users/kuku/.config/openocd
14
Debug: 11 3 configuration.c:44 add_script_search_dir(): adding /Users/kuku/.openocd
15
Debug: 12 3 configuration.c:44 add_script_search_dir(): adding /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/..//site
16
Debug: 13 3 configuration.c:44 add_script_search_dir(): adding /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/..//scripts
17
Debug: 14 3 command.c:166 script_debug(): command - ocd_find /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/scripts/board/stm32f4discovery.cfg
18
Debug: 15 3 configuration.c:99 find_file(): found /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/scripts/board/stm32f4discovery.cfg
19
Debug: 16 3 command.c:166 script_debug(): command - ocd_find interface/stlink.cfg
20
Debug: 17 3 configuration.c:99 find_file(): found /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/..//scripts/interface/stlink.cfg
21
Debug: 18 3 command.c:166 script_debug(): command - adapter driver hla
22
Debug: 19 3 command.c:166 script_debug(): command - hla_layout stlink
23
Debug: 20 3 hla_interface.c:241 hl_interface_handle_layout_command(): hl_interface_handle_layout_command
24
Debug: 21 3 command.c:166 script_debug(): command - hla_device_desc ST-LINK
25
Debug: 22 3 hla_interface.c:228 hl_interface_handle_device_desc_command(): hl_interface_handle_device_desc_command
26
Debug: 23 3 command.c:166 script_debug(): command - hla_vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754
27
Debug: 24 3 command.c:166 script_debug(): command - transport select hla_swd
28
Debug: 25 3 hla_transport.c:202 hl_swd_transport_select(): hl_swd_transport_select
29
Debug: 26 3 command.c:166 script_debug(): command - ocd_find target/stm32f4x.cfg
30
Debug: 27 4 configuration.c:99 find_file(): found /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/..//scripts/target/stm32f4x.cfg
31
Debug: 28 4 command.c:166 script_debug(): command - ocd_find target/swj-dp.tcl
32
Debug: 29 4 configuration.c:99 find_file(): found /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/..//scripts/target/swj-dp.tcl
33
Debug: 30 4 command.c:166 script_debug(): command - transport select
34
Debug: 31 4 command.c:166 script_debug(): command - ocd_find mem_helper.tcl
35
Debug: 32 4 configuration.c:99 find_file(): found /Users/kuku/Library/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/..//scripts/mem_helper.tcl
36
Debug: 33 4 command.c:166 script_debug(): command - add_usage_text mrw address
37
Debug: 34 4 command.c:166 script_debug(): command - add_help_text mrw Returns value of word in memory.
38
Debug: 35 4 command.c:166 script_debug(): command - add_usage_text mrh address
39
Debug: 36 4 command.c:166 script_debug(): command - add_help_text mrh Returns value of halfword in memory.
40
Debug: 37 4 command.c:166 script_debug(): command - add_usage_text mrb address
41
Debug: 38 4 command.c:166 script_debug(): command - add_help_text mrb Returns value of byte in memory.
42
Debug: 39 4 command.c:166 script_debug(): command - add_usage_text mmw address setbits clearbits
43
Debug: 40 4 command.c:166 script_debug(): command - add_help_text mmw Modify word in memory. new_val = (old_val & ~clearbits) | setbits;
44
Debug: 41 4 command.c:166 script_debug(): command - transport select
45
Debug: 42 4 command.c:166 script_debug(): command - expr  [ string first "jtag" $_TRANSPORT ] != -1 
46
Debug: 43 4 command.c:166 script_debug(): command - transport select
47
Debug: 44 4 command.c:166 script_debug(): command - expr  [ string first "jtag" $_TRANSPORT ] != -1 
48
Debug: 45 4 command.c:166 script_debug(): command - transport select
49
Debug: 46 4 command.c:166 script_debug(): command - expr  [ string first "swd" $_TRANSPORT ] != -1 
50
Debug: 47 4 command.c:166 script_debug(): command - swd newdap stm32f4x cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0x2ba01477
51
Debug: 48 4 hla_tcl.c:112 jim_hl_newtap_cmd(): Creating New Tap, Chip: stm32f4x, Tap: cpu, Dotted: stm32f4x.cpu, 8 params
52
Debug: 49 4 hla_tcl.c:123 jim_hl_newtap_cmd(): Processing option: -irlen
53
Debug: 50 4 hla_tcl.c:123 jim_hl_newtap_cmd(): Processing option: -ircapture
54
Debug: 51 4 hla_tcl.c:123 jim_hl_newtap_cmd(): Processing option: -irmask
55
Debug: 52 4 hla_tcl.c:123 jim_hl_newtap_cmd(): Processing option: -expected-id
56
Debug: 53 4 core.c:1468 jtag_tap_init(): Created Tap: stm32f4x.cpu @ abs position 0, irlen 0, capture: 0x0 mask: 0x0
57
Debug: 54 4 command.c:166 script_debug(): command - dap create stm32f4x.dap -chain-position stm32f4x.cpu
58
Debug: 55 4 command.c:166 script_debug(): command - tpiu create stm32f4x.tpiu -dap stm32f4x.dap -ap-num 0 -baseaddr 0xE0040000
59
Debug: 56 4 command.c:166 script_debug(): command - transport select
60
Debug: 57 4 command.c:166 script_debug(): command - expr  [ string first "jtag" $_TRANSPORT ] != -1 
61
Debug: 58 4 command.c:166 script_debug(): command - target create stm32f4x.cpu cortex_m -endian little -dap stm32f4x.dap
62
Info : 59 4 target.c:6188 target_create(): The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
63
Debug: 60 4 hla_target.c:204 adapter_target_create(): adapter_target_create
64
Debug: 61 4 hla_target.c:174 adapter_init_arch_info(): adapter_init_arch_info
65
Debug: 62 4 command.c:300 register_command(): command 'rtt' is already registered
66
Debug: 63 4 command.c:300 register_command(): command 'tpiu' is already registered
67
Debug: 64 4 command.c:166 script_debug(): command - stm32f4x.cpu configure -work-area-phys 0x20000000 -work-area-size 0x10000 -work-area-backup 0
68
Debug: 65 4 target.c:2204 target_free_all_working_areas_restore(): freeing all working areas
69
Debug: 66 4 target.c:2204 target_free_all_working_areas_restore(): freeing all working areas
70
Debug: 67 4 target.c:2204 target_free_all_working_areas_restore(): freeing all working areas
71
Debug: 68 4 command.c:166 script_debug(): command - flash bank stm32f4x.flash stm32f2x 0 0 0 0 stm32f4x.cpu
72
Debug: 69 5 tcl.c:1316 handle_flash_bank_command(): 'stm32f2x' driver usage field missing
73
Debug: 70 5 command.c:166 script_debug(): command - flash bank stm32f4x.otp stm32f2x 0x1fff7800 0 0 0 stm32f4x.cpu
74
Debug: 71 5 command.c:300 register_command(): command 'stm32f2x' is already registered
75
Debug: 72 5 command.c:300 register_command(): command 'stm32f2x lock' is already registered
76
Debug: 73 5 command.c:300 register_command(): command 'stm32f2x unlock' is already registered
77
Debug: 74 5 command.c:300 register_command(): command 'stm32f2x mass_erase' is already registered
78
Debug: 75 5 command.c:300 register_command(): command 'stm32f2x options_read' is already registered
79
Debug: 76 5 command.c:300 register_command(): command 'stm32f2x options_write' is already registered
80
Debug: 77 5 command.c:300 register_command(): command 'stm32f2x optcr2_write' is already registered
81
Debug: 78 5 command.c:300 register_command(): command 'stm32f2x otp' is already registered
82
Debug: 79 5 tcl.c:1316 handle_flash_bank_command(): 'stm32f2x' driver usage field missing
83
Debug: 80 5 command.c:166 script_debug(): command - adapter speed 2000
84
Debug: 81 5 adapter.c:180 adapter_config_khz(): handle adapter khz
85
Debug: 82 5 adapter.c:144 adapter_khz_to_speed(): convert khz to adapter specific speed value
86
Debug: 83 5 adapter.c:144 adapter_khz_to_speed(): convert khz to adapter specific speed value
87
Debug: 84 5 command.c:166 script_debug(): command - adapter srst delay 100
88
Debug: 85 5 command.c:166 script_debug(): command - transport select
89
Debug: 86 5 command.c:166 script_debug(): command - expr  [ string first "jtag" $_TRANSPORT ] != -1 
90
Debug: 87 5 command.c:166 script_debug(): command - reset_config srst_nogate
91
Debug: 88 5 command.c:166 script_debug(): command - transport select
92
Debug: 89 5 command.c:166 script_debug(): command - expr  [ string first "hla" $_TRANSPORT ] != -1 
93
Debug: 90 5 command.c:166 script_debug(): command - stm32f4x.cpu configure -event examine-end 
94
  # Enable debug during low power modes (uses more power)
95
  # DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP
96
  mmw 0xE0042004 0x00000007 0
97
98
  # Stop watchdog counters during halt
99
  # DBGMCU_APB1_FZ |= DBG_IWDG_STOP | DBG_WWDG_STOP
100
  mmw 0xE0042008 0x00001800 0
101
102
Debug: 91 5 command.c:166 script_debug(): command - stm32f4x.tpiu configure -event post-enable proc_post_enable stm32f4x
103
Debug: 92 5 command.c:166 script_debug(): command - stm32f4x.cpu configure -event reset-init 
104
  # Configure PLL to boost clock to HSI x 4 (64 MHz)
105
  mww 0x40023804 0x08012008   ;# RCC_PLLCFGR 16 Mhz /8 (M) * 128 (N) /4(P)
106
  mww 0x40023C00 0x00000102   ;# FLASH_ACR = PRFTBE | 2(Latency)
107
  mmw 0x40023800 0x01000000 0 ;# RCC_CR |= PLLON
108
  sleep 10                    ;# Wait for PLL to lock
109
  mmw 0x40023808 0x00001000 0 ;# RCC_CFGR |= RCC_CFGR_PPRE1_DIV2
110
  mmw 0x40023808 0x00000002 0 ;# RCC_CFGR |= RCC_CFGR_SW_PLL
111
112
  # Boost JTAG frequency
113
  adapter speed 8000
114
115
Debug: 93 5 command.c:166 script_debug(): command - stm32f4x.cpu configure -event reset-start 
116
  # Reduce speed since CPU speed will slow down to 16MHz with the reset
117
  adapter speed 2000
118
119
Debug: 94 5 command.c:166 script_debug(): command - reset_config srst_only
120
User : 95 5 options.c:63 configuration_output_handler(): srst_only separate srst_nogate srst_open_drain connect_deassert_srst
121
User : 96 5 options.c:63 configuration_output_handler(): 
122
Debug: 97 5 command.c:166 script_debug(): command - gdb_port 3333
123
Debug: 98 5 command.c:166 script_debug(): command - telnet_port 4444
124
Info : 99 5 server.c:308 add_service(): Listening on port 6666 for tcl connections
125
Info : 100 5 server.c:308 add_service(): Listening on port 4444 for telnet connections
126
Debug: 101 5 command.c:166 script_debug(): command - init
127
Debug: 102 5 command.c:166 script_debug(): command - target init
128
Debug: 103 5 command.c:166 script_debug(): command - target names
129
Debug: 104 5 command.c:166 script_debug(): command - stm32f4x.cpu cget -event gdb-flash-erase-start
130
Debug: 105 5 command.c:166 script_debug(): command - stm32f4x.cpu configure -event gdb-flash-erase-start reset init
131
Debug: 106 5 command.c:166 script_debug(): command - stm32f4x.cpu cget -event gdb-flash-write-end
132
Debug: 107 5 command.c:166 script_debug(): command - stm32f4x.cpu configure -event gdb-flash-write-end reset halt
133
Debug: 108 5 command.c:166 script_debug(): command - stm32f4x.cpu cget -event gdb-attach
134
Debug: 109 5 command.c:166 script_debug(): command - stm32f4x.cpu configure -event gdb-attach halt 1000
135
Debug: 110 5 target.c:1661 handle_target_init_command(): Initializing targets...
136
Debug: 111 5 hla_target.c:194 adapter_init_target(): adapter_init_target
137
Debug: 112 5 semihosting_common.c:115 semihosting_common_init():  
138
Debug: 113 5 hla_interface.c:122 hl_interface_init(): hl_interface_init
139
Debug: 114 5 hla_layout.c:95 hl_layout_init(): hl_layout_init
140
Debug: 115 5 adapter.c:144 adapter_khz_to_speed(): convert khz to adapter specific speed value
141
Debug: 116 5 adapter.c:148 adapter_khz_to_speed(): have adapter set up
142
Debug: 117 5 adapter.c:144 adapter_khz_to_speed(): convert khz to adapter specific speed value
143
Debug: 118 5 adapter.c:148 adapter_khz_to_speed(): have adapter set up
144
Info : 119 5 adapter.c:108 adapter_init(): clock speed 2000 kHz
145
Debug: 120 5 openocd.c:159 handle_init_command(): Debug Adapter init complete
146
Debug: 121 5 command.c:166 script_debug(): command - transport init
147
Debug: 122 5 transport.c:230 handle_transport_init(): handle_transport_init
148
Debug: 123 5 hla_transport.c:154 hl_transport_init(): hl_transport_init
149
Debug: 124 5 hla_transport.c:171 hl_transport_init(): current transport hla_swd
150
Debug: 125 5 hla_interface.c:55 hl_interface_open(): hl_interface_open
151
Debug: 126 5 hla_layout.c:40 hl_layout_open(): hl_layout_open
152
Debug: 127 5 stlink_usb.c:3697 stlink_open(): stlink_open
153
Debug: 128 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x3744 serial: 
154
Debug: 129 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x3748 serial: 
155
Debug: 130 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x374b serial: 
156
Debug: 131 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x374d serial: 
157
Debug: 132 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x374e serial: 
158
Debug: 133 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x374f serial: 
159
Debug: 134 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x3752 serial: 
160
Debug: 135 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x3753 serial: 
161
Debug: 136 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483 pid: 0x3754 serial: 
162
Debug: 137 7045 stlink_usb.c:3385 stlink_usb_usb_open(): claim interface failed
163
Debug: 138 7045 stlink_usb.c:693 jtag_libusb_bulk_transfer_n(): ERROR, failed to submit transfer 0, error -5
164
Debug: 139 7047 hla_layout.c:47 hl_layout_open(): failed
165
Debug: 140 7047 command.c:555 run_command(): Command 'transport init' failed with error code -4
166
User : 141 7047 command.c:619 command_run_line(): 
167
Debug: 142 7047 command.c:555 run_command(): Command 'init' failed with error code -4
168
User : 143 7047 command.c:619 command_run_line(): 
169
Debug: 144 7047 target.c:2204 target_free_all_working_areas_restore(): freeing all working areas
170
Debug: 145 7047 hla_interface.c:130 hl_interface_quit(): hl_interface_quit
171
$

: Bearbeitet durch Moderator
von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Debug: 136 5 stlink_usb.c:3709 stlink_open(): transport: 4 vid: 0x0483
> pid: 0x3754 serial:
> Debug: 137 7045 stlink_usb.c:3385 stlink_usb_usb_open(): claim interface
> failed
> Debug: 138 7045 stlink_usb.c:693 jtag_libusb_bulk_transfer_n(): ERROR,
> failed to submit transfer 0, error -5
> Debug: 139 7047 hla_layout.c:47 hl_layout_open(): failed
> Debug: 140 7047 command.c:555 run_command(): Command 'transport init'
> failed with error code -4
> User : 141 7047 command.c:619 command_run_line():
> Debug: 142 7047 command.c:555 run_command(): Command 'init' failed with
> error code -4

Hat also gar nichts mit dem Target zu tun, sondern mit dem 
USB-Interface.
Eventuell Zugriffsrechte fürs USB Device oder irgendjemand sonst 
wurschtelt an dem Device rum? Vielleicht noch eine alte Instanz von 
OpenOCD oder st-flash?

Über lsusb (gibt's das aufm Mac?) sollte man das USB Device ermitteln 
können, so etwas wie /dev/usb/.../..., dann kann man mittels 'ls' und 
'fuser' nachsehen, was da los ist.

von Stefan F. (Gast)


Lesenswert?

Versorgst du etwa beide Board über das USB Kabel? Dann hast du da 
vielleicht den Schwachpunkt.

Ich habe inzwischen eine ganze Reihe von Kabeln, die nicht einmal mehr 
für ein Nucleo Board (ohne weitere Last) taugen.

Wenn du den USB Port einmal kurzgeschlossen hattest stehen die Chancen 
auch hoch, dass dort eine Polyfuse dauerhaft schlechter leitet, als 
anfangs, so dass sie nur noch für kleine Verbraucher wie Mäuse taugt.

von Christoph K. (chriskuku)


Lesenswert?

$ lsusb
Bus 020 Device 030: ID 0483:374b STMicroelectronics ST-LINK/V2.1

Jetzt muß ich noch den device node finden.

@stefanus: Da hing monatelang eine WD Elements 5TB dran.
Im Moment ein Miniusb-Kabel 80cm (wo gibt's kurze Mini-USB Kabel?)

Ja, meiner Skizze oben kann man entnehmen, daß beide Boards an dem Kabel 
hängen.

von Christoph K. (chriskuku)


Lesenswert?

Aus dem Output von
$ system_profiler SPUSBDataType
kann ich Folgendes entnehmen:

  STM32 STLink:

          Product ID: 0x374b
          Vendor ID: 0x0483  (STMicroelectronics)
          Version: 1.00
          Serial Number: 066CFF485153826687123124
          Speed: Up to 12 Mb/s
          Manufacturer: STMicroelectronics
          Location ID: 0x14200000 / 30
          Current Available (mA): 500
          Current Required (mA): 400
          Extra Operating Current (mA): 0
          Media:
            microcontroller:
              Capacity: 41 KB (40.960 bytes)
              Removable Media: Yes
              BSD Name: disk2
              Logical Unit: 0
              Partition Map Type: Unknown
              S.M.A.R.T. status: Verified
              USB Interface: 1


Wo ich allerdings Fehlermeldungen finde, weiß ich momentan nicht.

Gleich nach dem Sterben des OpenOCD-Prozesses sehe ich in 
/var/log/system.log:

Apr  1 20:31:13 Christophs-MacBook-Pro com.apple.xpc.launchd[1] 
(com.apple.mdworker.shared.06000000-0300-0000-0000-000000000000[9876]): 
Service exited due to SIGKILL | sent by mds[95]
Apr  1 20:31:56 Christophs-MacBook-Pro com.apple.xpc.launchd[1] 
(com.apple.mdworker.shared.08000000-0000-0000-0000-000000000000[9865]): 
Service exited due to SIGKILL | sent by mds[95]
Apr  1 20:32:07 Christophs-MacBook-Pro com.apple.xpc.launchd[1] 
(com.apple.mdworker.shared.0A000000-0600-0000-0000-000000000000[9888]): 
Service exited due to SIGKILL | sent by mds[95]
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDeviceDiscoveryAgent[633]: 
Entered:_AMMuxedDeviceDisconnected, mux-device:1082
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDevicesAgent[1017]: 
Entered:_AMMuxedDeviceDisconnected, mux-device:1082
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDevicesAgent[1017]: 
Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1082
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDeviceDiscoveryAgent[633]: 
Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1082
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDevicesAgent[1017]: tid:15fb7 
- Mux ID not found in mapping dictionary
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDeviceDiscoveryAgent[633]: 
tid:1238b - Mux ID not found in mapping dictionary
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDevicesAgent[1017]: tid:15fb7 
- Can't handle disconnect with invalid ecid
Apr  1 20:32:14 Christophs-MacBook-Pro AMPDeviceDiscoveryAgent[633]: 
tid:1238b - Can't handle disconnect with invalid ecid

Ob das was damit zu tun hat, kann ich im Moment nicht agen.

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> $ lsusb
> Bus 020 Device 030: ID 0483:374b STMicroelectronics ST-LINK/V2.1

Das bedeutet vermutlich /dev/bus/usb/020/030 oder /dev/usb/020/030.

von Christoph K. (chriskuku)



Lesenswert?

A. B. schrieb:
> Christoph K. schrieb:
>> $ lsusb
>> Bus 020 Device 030: ID 0483:374b STMicroelectronics ST-LINK/V2.1
>
> Das bedeutet vermutlich /dev/bus/usb/020/030 oder /dev/usb/020/030.

Gibt's nicht. Ich beschränke mich jetzt erst einmal auf den Fall
DISCOVERY-Board mit on-Board MCU, also CN3 enabled, um zu schauen, 
welche Devices da angelegt werden und um die ganze Diskussion über 
ungültige CPU-IDs mal außen vor zu lassen, denn irgendwie funktioniert 
etwas grundsätzlich nicht.

Die folgenden Devices erscheinen im Moment, wo ich das DISCVOVERY-Board 
anschließe:
1
crw-rw-rw-  1 root   wheel     20,  10  2 Apr 09:22 io8logtemp
2
crw-rw-rw-  1 root   wheel     22,   8  2 Apr 09:23 tty.usbmodem14203
3
crw-r-----  1 root   operator   1,  11  2 Apr 09:23 rdisk2
4
brw-r-----  1 root   operator   1,  11  2 Apr 09:23 disk2
5
crw-rw-rw-  1 root   wheel     22,   9  2 Apr 09:23 cu.usbmodem14203
6
crw-rw-rw-  1 root   wheel      3,   2  2 Apr 09:23 null
7
crw-rw-rw-  1 root   tty       15,   3  2 Apr 09:23 ptmx
8
crw--w----  1 kuku   tty       16,   2  2 Apr 09:23 ttys002
9
$
Dabei erscheint auch auf dem Desktop ein Volume DIS_F407VG.
Als ich das DIY-MORE Board noch mit angeschlossen hatte, war der Effekt 
so, daß das Volume auf dem Desktop nicht sofort erschien, sondern erst 
nachdem ich OpenOCD oder st-info --probe einmal aufgerufen hatte und 
danach war zusätzlich ein FAIL.TXT in dem Volume erschienen (siehe 
Bild).

Es scheint also vorrangig erst mal ein Stromversorgungproblem zu sein.
Habe noch einen Sabrent 4-fach HUB, an den ich ein Netzteil anschießen 
kann. Werde das mal versuchen. Auch werde ich mir mal ein kurzes 
Mini-USB-Kabel basteln, obwohl das ja immer häßlich ist, diese Stecker 
aufzuschneiden (weiß jemand eine Quelle für ein superkurzes 
Mini-USB-Kabel?).

Ich werde also jetzt erst mal die physikalischen Voraussetzungen in 
Ordnung bringen. Danke erst mal für die Hilfe und schönes Wochenende.

Grüße
Christoph

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> weiß jemand eine Quelle für ein superkurzes Mini-USB-Kabel?

Du brauchst kein kurzes Kabel, sondern einfach nur ein gutes. Das sieht 
man nicht jedem Kabel von außen an. Dick ist nicht immer gut. Außwrdem 
leiern die Steckverbinder mit der Zeit aus. Da geht Probieren geht über 
Studieren.

Und du solltest zur Kenntnis nehmen, dass drei Mikrocontroller plus ein 
bisschen drumherum an einem USB Port schon grenzwertig sind. Bei mir 
klappt das auch nur mit Glück.

Lösung: Netzteile benutzen

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> weiß jemand eine Quelle für ein superkurzes Mini-USB-Kabel?
>
> Du brauchst kein kurzes Kabel, sondern einfach nur ein gutes. Das sieht
> man nicht jedem Kabel von außen an. Dick ist nicht immer gut. Außwrdem
> leiern die Steckverbinder mit der Zeit aus. Da geht Probieren geht über
> Studieren.
...
>
> Lösung: Netzteile benutzen

Habe jetzt ein 5V/2,5A Netzteil an den Hub angeschlossen. Dort unter 
Last des DISC0  Leerlauf 4,98 V. Am DISCO-Board kommen 4,64 V an.
93 cm USB-Kabel dazwischen.

von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
>
1
> crw-rw-rw-  1 root   wheel     20,  10  2 Apr 09:22 io8logtemp
2
> crw-rw-rw-  1 root   wheel     22,   8  2 Apr 09:23 tty.usbmodem14203
3
> crw-r-----  1 root   operator   1,  11  2 Apr 09:23 rdisk2
4
> brw-r-----  1 root   operator   1,  11  2 Apr 09:23 disk2
5
> crw-rw-rw-  1 root   wheel     22,   9  2 Apr 09:23 cu.usbmodem14203
6
> crw-rw-rw-  1 root   wheel      3,   2  2 Apr 09:23 null
7
> crw-rw-rw-  1 root   tty       15,   3  2 Apr 09:23 ptmx
8
> crw--w----  1 kuku   tty       16,   2  2 Apr 09:23 ttys002
9
> $
10
>

Zumindest null, io8logtemp, tty.usbmodem14203, cu.usbmodem14203, ptmx, 
ttys002
gehören ganz sicher nicht zu dem STLink. Die sind sicher auch vorher 
schon da. Das erhärtet den Verdacht auf ein Problem mit der 
Stromversorgung und/oder Kabel, sprich ein Hub oder der USB-Controller 
macht einen Reset wg. Überstrom oder sonst eines Fehlers.

Ganz "unten" muss aber ein Device-Node vom STLink sein (wenn er 
überhaupt funktioniert), "darüber" dann zusätzlich ttyUSB?, ttyACM?, 
sdc? oder disk?, je nach Treiber, der sich da angesprochen fühlt.

von Christoph K. (chriskuku)


Lesenswert?

A. B. schrieb:
> Christoph K. schrieb:
>>
1
>> crw-rw-rw-  1 root   wheel     20,  10  2 Apr 09:22 io8logtemp
2
>> crw-rw-rw-  1 root   wheel     22,   8  2 Apr 09:23 tty.usbmodem14203
3
>> crw-r-----  1 root   operator   1,  11  2 Apr 09:23 rdisk2
4
>> brw-r-----  1 root   operator   1,  11  2 Apr 09:23 disk2
5
>> crw-rw-rw-  1 root   wheel     22,   9  2 Apr 09:23 cu.usbmodem14203
6
>> crw-rw-rw-  1 root   wheel      3,   2  2 Apr 09:23 null
7
>> crw-rw-rw-  1 root   tty       15,   3  2 Apr 09:23 ptmx
8
>> crw--w----  1 kuku   tty       16,   2  2 Apr 09:23 ttys002
9
>> $
10
>>
>
> Zumindest null, io8logtemp, tty.usbmodem14203, cu.usbmodem14203, ptmx,
> ttys002
> gehören ganz sicher nicht zu dem STLink. Die sind sicher auch vorher
> schon da. Das erhärtet den Verdacht auf ein Problem mit der

Nein, die werden alle genau mit dem Einstecken des STLINK kreiiert.
Nach Ausstöpseln sind die weg.

tty und cu sind ja die serial ports, die im STLINK emuliert werden.
disk2 und rdisk2 sind die Volumes (virtuelle Filesysteme), die man ja 
auch

io8logtemp ist vielleicht ein logger, den man anzapfen kann.

$ cat /dev/io8logtemp

Wie gesagt, alle Devices sind korreliert mit Anschließen des 
STLINK/DISCO-Boards.

Komme zurück, wenn ich mein Kabel/Stromversorgungsproblem bereinigt 
habe.

von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Nein, die werden alle genau mit dem Einstecken des STLINK kreiiert.
> Nach Ausstöpseln sind die weg.
>
> tty und cu sind ja die serial ports, die im STLINK emuliert werden.
> disk2 und rdisk2 sind die Volumes (virtuelle Filesysteme), die man ja
> auch
>
> io8logtemp ist vielleicht ein logger, den man anzapfen kann.

Nun, da sind halt die Namenskonvetionen beim Mac etwas anders als beim 
"normalen" Linux ...

OpenOCD setzt aber NICHT auf denen auf, das virtuelle Filesytem (fürs 
"Drag and Drop") bzw. der serielle Port haben damit erst mal nichts zu 
tun, sondern nur auf den primären Device Node, und auch nur dessen 
Berechtigungen sind relevant.

Unter Linux geht das über die "libusb", wie das bei Max aussieht, weiß 
ich nicht. Vielleicht fehlt da auch genau diese Bibliothek:

ldd /usr/bin/openocd | grep usb
        libusb-1.0.so.0 => /usr/lib64/libusb-1.0.so.0 
(0x00007fa270480000)

von Christoph K. (chriskuku)


Lesenswert?

libusb wird auf macOS auch benutzt. Bin im Moment nicht am Rechner, 
weshalb ich nicht nachgucken kann, aber ich hatte beide, eine 1.0.24 und 
1.0.25 probiert. ( Version nur so ungefähr aus dem Kopf)

Irgendwo habe ich aufgeschnappt, daß die Ansprache des ST-LINK jetzt 
neuerdings über „native USB commands“ oder auf USB Level laufe. Kann 
mich auch irren und wenn ja, wie lief es vorher? Aber das könnte auch 
Ursach von Problemen sein.

Vielleicht sollte ich mir mal auf Linux ein System hochziehen, mit dem 
ich vergleichen kann.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Wenn eine shared lib fehlte, so würde das gemeldet. ldd gibt‘s unter 
macOS nicht.

von Christoph K. (chriskuku)


Lesenswert?

Habe jetzt auf meinem Lenovo-Notebook ( Ubuntu 21.10) stlink
installiert. Sowohl das apt-Paket stlink v1.6.1 wie auch das von github 
runtergeladene und auf dem Notebook kompilierte v1.7.0-186-gc4762e6.

DISCO Board über das neue gekürzte Mini-USB-Kabel an den SABRENT 4xHUB 
angeschlossen, HUB mit eigener 5V/2,5A Stromversorgung verbunden. An 
Notebook angeschlossen. Onboard MCU getrennt und ein zweites DISCO Board 
angeschlossen über SWD (SWCLK und SWDIO jeweils an PA14 und PA13 des 
Master DISCO Boards)

Auf Linux:
1
kuku@kuku-Lenovo-Y70-70-Touch:~/stm32/stlink/bin$ ./st-info --probe
2
Failed to parse flash type or unrecognized flash type
3
4
detected chip_id parametres
5
6
# Device Type: STM32F4x5_F4x7
7
# Reference Manual: RM0090           // RM0090 (Rev. 2)
8
#
9
chip_id 0x413
10
flash_type 3
11
flash_size_reg 0x1fff7a22
12
flash_pagesize 0x4000
13
sram_size 0x30000
14
bootrom_base 0x1fff0000
15
bootrom_size 0x7800
16
option_base 0x40023c14
17
option_size 0x4
18
flags 2
19
20
Found 1 stlink programmers
21
  version:    V2J34S25
22
  serial:     066CFF485153826687123124
23
  flash:      1048576 (pagesize: 16384)
24
  sram:       196608
25
  chipid:     0x413
26
27
detected chip_id parametres
28
29
# Device Type: STM32F4x5_F4x7
30
# Reference Manual: RM0090           // RM0090 (Rev. 2)
31
#
32
chip_id 0x413
33
flash_type 3
34
flash_size_reg 0x1fff7a22
35
flash_pagesize 0x4000
36
sram_size 0x30000
37
bootrom_base 0x1fff0000
38
bootrom_size 0x7800
39
option_base 0x40023c14
40
option_size 0x4
41
flags 2
42
43
  dev-type:   STM32F4x5_F4x7

Nun am Mac:
1
$ ./st-info --probe
2
Failed to parse flash type or unrecognized flash type
3
4
detected chip_id parametres
5
6
# Device Type: STM32F4x5_F4x7
7
# Reference Manual: RM0090           // RM0090 (Rev. 2)
8
#
9
chip_id 0x413
10
flash_type 3
11
flash_size_reg 0x1fff7a22
12
flash_pagesize 0x4000
13
sram_size 0x30000
14
bootrom_base 0x1fff0000
15
bootrom_size 0x7800
16
option_base 0x40023c14
17
option_size 0x4
18
flags 2
19
20
Found 1 stlink programmers
21
  version:    V2J34S25
22
  serial:     066CFF485153826687123124
23
  flash:      1048576 (pagesize: 16384)
24
  sram:       196608
25
  chipid:     0x413
26
27
detected chip_id parametres
28
29
# Device Type: STM32F4x5_F4x7
30
# Reference Manual: RM0090           // RM0090 (Rev. 2)
31
#
32
chip_id 0x413
33
flash_type 3
34
flash_size_reg 0x1fff7a22
35
flash_pagesize 0x4000
36
sram_size 0x30000
37
bootrom_base 0x1fff0000
38
bootrom_size 0x7800
39
option_base 0x40023c14
40
option_size 0x4
41
flags 2
42
43
  dev-type:   STM32F4x5_F4x7

Soweit wird also die Target MCU erkannt.

Jetzt das DIY-MORE Board angeschlossen an SWD:
1
$ ./st-info --probe
2
Failed to parse flash type or unrecognized flash type
3
setting new configuration (0 -> 1)
4
Failed to enter SWD mode
5
Found 1 stlink programmers
6
  version:    V2J34S25
7
  serial:     066CFF485153826687123124
8
  flash:      0 (pagesize: 0)
9
  sram:       0
10
  chipid:     0x000
11
12
detected chip_id parametres
13
14
# Device Type: unknown
15
# Reference Manual: RM0000
16
#
17
chip_id 0x0
18
flash_type 0
19
flash_size_reg 0x0
20
flash_pagesize 0x0
21
sram_size 0x0
22
bootrom_base 0x0
23
bootrom_size 0x0
24
option_base 0x0
25
option_size 0x0
26
flags 0
27
28
  dev-type:   unknown
29
$ 
30
$
1
Linux:
2
kuku@kuku-Lenovo-Y70-70-Touch:~/stm32/stlink/bin$ ./st-info --probe
3
Failed to parse flash type or unrecognized flash type
4
Failed to enter SWD mode
5
Found 1 stlink programmers
6
  version:    V2J34S25
7
  serial:     066CFF485153826687123124
8
  flash:      0 (pagesize: 0)
9
  sram:       0
10
  chipid:     0x000
11
12
detected chip_id parametres
13
14
# Device Type: unknown
15
# Reference Manual: RM0000
16
#
17
chip_id 0x0
18
flash_type 0
19
flash_size_reg 0x0
20
flash_pagesize 0x0
21
sram_size 0x0
22
bootrom_base 0x0
23
bootrom_size 0x0
24
option_base 0x0
25
option_size 0x0
26
flags 0
27
28
  dev-type:   unknown

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Da kommt offenbar gar nichts, daher funktioniert die SWD-Kommunikation 
wohl gar nicht. Nicht korrekt angeschlossen, uC kaputt ...
OpenOCD ist (mit dem -d3) etwas "geschwätziger", da gibt's vielleicht 
mehr Infos.

Ansonsten hilft wohl nur LA und/oder Scope dran ...

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

A. B. schrieb:
> Da kommt offenbar gar nichts, daher funktioniert die SWD-Kommunikation
> wohl gar nicht. Nicht korrekt angeschlossen, uC kaputt ...
> OpenOCD ist (mit dem -d3) etwas "geschwätziger", da gibt's vielleicht
> mehr Infos.
>
> Ansonsten hilft wohl nur LA und/oder Scope dran ...

Hatte das Scope (Tek 2465B) schon mal dran und sah Pulse, einen ca. 500 
µS langen burst von Clockpulsen und dazu Daten (alle Pulse negative 
Logik). An Clock sah ich Rechtecksignale von ca. 750 nS Periodenlänge, 
Taktverhältnis ca. 1:1. Immer getriggert mit Ausführen des Kommandos 
st-info --probe

Was gibt's übrigens an preiswerten LA-Lösungen?

Habe jetzt OpenOCD mal unter Linux installiert (von github geladen) und 
gebaut.

Hier ist der Debug Log von der Situation "nicht funktionierendes Target 
an DISCO" (unter Linux).

Noch ein Gedanke: Könnte es sein, daß das Target so programmiert ist, 
daß die PA14/PA13 nicht auf SWDCLK/SWDIO reagieren? Ich könnte schwören, 
daß ich ganz am Anfang meiner Odyssee das Target einmal mit STM32CubeIDE 
programmiert hatte.

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Hatte das Scope (Tek 2465B) schon mal dran und sah Pulse, einen ca. 500
> µS langen burst von Clockpulsen und dazu Daten (alle Pulse negative
> Logik). An Clock sah ich Rechtecksignale von ca. 750 nS Periodenlänge,
> Taktverhältnis ca. 1:1. Immer getriggert mit Ausführen des Kommandos
> st-info --probe

SWCLK sagt nicht viel aus, weil das ja nur vom STLink zum Target geht, 
und auch bei SWDIO ist natürlich die "Antwort" vom Target interessant. 
Man muss also ein ganzes Paket oder noch besser mehrere ansehen, um zu 
erkennen, ob das Target überhaupt antwortet. Für die Interpretation: ARM 
IHI 0031D, B4.2
Insbesondere muss vom Target immer ein Ack kommen.

> Was gibt's übrigens an preiswerten LA-Lösungen?
Die Salea-Clones, 8-Kanal bis 24MHz, mit sigrok.

> Habe jetzt OpenOCD mal unter Linux installiert (von github geladen) und
> gebaut.
>
> Hier ist der Debug Log von der Situation "nicht funktionierendes Target
> an DISCO" (unter Linux).

Die wesentliche Info ist
"stlink_usb.c:1090 stlink_usb_error_check(): 
STLINK_JTAG_GET_IDCODE_ERROR
stlink_usb.c:3752 stlink_open(): init mode failed (unable to connect to 
the target)"
Also keine Antwort vom Target.

Hm, ich würde mal direkt an die Beinchen vom Target gehen (von dort zur 
Pfostenleiste durchklingeln), vielleicht unterbrochene Leiterbahn, 
Lötstelle defekt, oder vielleicht stimmt der Aufdruck auf der Platine 
gar nicht.
Auch direkt am Gehäuse Masse und Versorgung messen.

"stlink_usb.c:1474 stlink_usb_check_voltage(): Target voltage: 2.910940"
Die 2.9V finde ich etwas mau, da würde ich schon deutlich über 3V 
erwarten.
Nicht dass der STM32F407 nicht damit funktionieren würde, aber da sind 
doch sicher überall 3.3V-Regler drauf?

Da ja vom Target nichts kommt, wird es wohl ein verhältnismäßig 
"banaler" Fehler sein. Was nicht heißen soll, dass der leicht zu finden 
ist.

von Christoph K. (chriskuku)


Lesenswert?

A. B. schrieb:
...
> Da ja vom Target nichts kommt, wird es wohl ein verhältnismäßig
> "banaler" Fehler sein. Was nicht heißen soll, dass der leicht zu finden
> ist.

Ich habe zwei von den Target Boards (mit Pfostenleisten bestückt und 
noch weitere 10 unbestückte), da müßte schon bei beiden eine 
Unterbrechung sein.

BOOT0 Pin ist auf GND gejumpert. (siehe Board Schaltung weiter oben).
BOOT1 Pin offen.

von Bauform B. (bauformb)


Lesenswert?

Christoph K. schrieb:
> Könnte es sein, daß das Target so programmiert ist,
> daß die PA14/PA13 nicht auf SWDCLK/SWDIO reagieren?

Ja.

von Christoph K. (chriskuku)


Lesenswert?

Bauform B. schrieb:
> Christoph K. schrieb:
>> Könnte es sein, daß das Target so programmiert ist,
>> daß die PA14/PA13 nicht auf SWDCLK/SWDIO reagieren?
>
> Ja.

Das ist ja interessant. Und wie bekommt man es wieder dahin?

von A. B. (Gast)


Lesenswert?

Bauform B. schrieb:
> Christoph K. schrieb:
>> Könnte es sein, daß das Target so programmiert ist,
>> daß die PA14/PA13 nicht auf SWDCLK/SWDIO reagieren?
>
> Ja.

Aber dass die "ab Werk" so programmiert sind??? Möglich schon, aber doch 
recht unwahrscheinlich. Und selbst wenn: NRST auf low halten, dann 
müsste es doch gehen. Beim F407 kann man NRST noch nicht totlegen wie 
beim G0 etwa.
Auch wenn das eine Fälschung sein sollte: Auch die Clones sollten über 
SWD ansprechbar sein. Ein "leeres" Gehäuse sollte sich auch leicht 
feststellen lassen: Multimeter auf Diodentest, '+'-Kabel an GND und dann 
alle GPIOs abklappern, da müssten jeweils 600 bis 700mV zu messen sein, 
während es bei
VDD deutlich weniger sein sollte, so um die 500mV.

von Stefan F. (Gast)


Lesenswert?

A. B. schrieb:
> Nicht dass der STM32F407 nicht damit funktionieren würde, aber da sind
> doch sicher überall 3.3V-Regler drauf?

Deswegen hatte ich die Stromversorgung weiter oben schon einmal in Frage 
gestellt. Schon im vorherigen Thread hatte er dieses Problem angedeutet:

Christoph K. schrieb:
> Info : Target voltage: 2.911243

Solange die Stromversorgung nicht in Ordnung ist, braucht man an anderen 
Stellen gar nicht weiter zu suchen.

Auf meinen Vorschlag ist er ja auch eingegangen, allerdings vermisse ich 
nach dem Tausch von Kabeln und Netzteilen eine Kontrolle, ob die 
Spannung damit nun wirklich in Ordnung ist. Bei den Zickereien die er 
nun hat, würde ich mich nicht einmal mehr auf ein simples Multimeter 
verlassen, sondern die Versorgungsspannung mit einem Oszilloskop 
kontrollieren (ob sie in Aktion stabil ist).

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

A. B. schrieb:
> Bauform B. schrieb:
>> Christoph K. schrieb:
>>> Könnte es sein, daß das Target so programmiert ist,
>>> daß die PA14/PA13 nicht auf SWDCLK/SWDIO reagieren?
>>
>> Ja.
>
> Aber dass die "ab Werk" so programmiert sind??? Möglich schon, aber doch
> recht unwahrscheinlich. Und selbst wenn: NRST auf low halten, dann
> müsste es doch gehen. Beim F407 kann man NRST noch nicht totlegen wie
> beim G0 etwa.
> Auch wenn das eine Fälschung sein sollte: Auch die Clones sollten über
> SWD ansprechbar sein. Ein "leeres" Gehäuse sollte sich auch leicht
> feststellen lassen: Multimeter auf Diodentest, '+'-Kabel an GND und dann
> alle GPIOs abklappern, da müssten jeweils 600 bis 700mV zu messen sein,
> während es bei
> VDD deutlich weniger sein sollte, so um die 500mV.

Zwischenbericht:
Nucleo-Board angeschlossen, 2 Leitungen von SWD verbunden zum Target
Target gepowert vom USB-FTDI Stick (TTL-Level). Kein extra Netzteil.

$ st-flash erase
st-flash 1.7.0
2022-04-04T11:35:41 INFO common.c: F4xx: 192 KiB SRAM, 1024 KiB flash in 
at least 16 KiB pages.
Mass erasing.............
$ ./st-info --probe #(neueste stlink verson)
Failed to parse flash type or unrecognized flash type

detected chip_id parametres

# Device Type: STM32F4x5_F4x7
# Reference Manual: RM0090           // RM0090 (Rev. 2)
#
chip_id 0x413
flash_type 3
flash_size_reg 0x1fff7a22
flash_pagesize 0x4000
sram_size 0x30000
bootrom_base 0x1fff0000
bootrom_size 0x7800
option_base 0x40023c14
option_size 0x4
flags 2

Found 1 stlink programmers
  version:    V2J37S26
  serial:     0679FF525056805035012236
  flash:      1048576 (pagesize: 16384)
  sram:       196608
  chipid:     0x413

detected chip_id parametres

# Device Type: STM32F4x5_F4x7
# Reference Manual: RM0090           // RM0090 (Rev. 2)
#
chip_id 0x413
flash_type 3
flash_size_reg 0x1fff7a22
flash_pagesize 0x4000
sram_size 0x30000
bootrom_base 0x1fff0000
bootrom_size 0x7800
option_base 0x40023c14
option_size 0x4
flags 2

  dev-type:   STM32F4x5_F4x7

Test mit openocd -> angehängte Log-Datei.

Übrigens, jetzt 3.22 V

Nachtrag: zurück zum DISCO-Board: die alten Probleme. Voltage 2.98 V 
(obwohl Versorgung des Targets genauso)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Übrigens, jetzt 3.22 V
> zurück zum DISCO-Board: Voltage 2.98 V

Das ist die Problemursache. Du hast keine stabile ausreichend belastbare 
Stromversorgung. Irgendwo fällt bei dir unter Last signifikant Spannung 
ab.

Du könntest zur Gegenprobe einfach mal noch mehr Last dran hängen, zum 
Beispiel einen 47Ω Widerstand. Wenn sie dann noch weiter absackt, hast 
du den Beweis. 100mA Reserve muss nämlich drin sein, sonst ist eh alles 
dem Zufall überlassen.

von A. B. (Gast)


Lesenswert?

Christoph K. schrieb:
> Test mit openocd -> angehängte Log-Datei.
Liefert auch die korrekte ID
Debug: 292 135 stlink_usb.c:1679 stlink_usb_idcode(): IDCODE: 0x2BA01477

Also scheint da jetzt alles ok zu sein.

> Übrigens, jetzt 3.22 V
>
> Nachtrag: zurück zum DISCO-Board: die alten Probleme. Voltage 2.98 V
> (obwohl Versorgung des Targets genauso)

Die 0.3V weniger sind eigentlich unwichtig, aber das legt die Vermutung 
nahe, dass die Versorgung schon unter geringer Last einbricht - und das 
war's dann.
Vielleicht ist der Regler auf dem Disco-Board kaputt, überlastet oder 
wird nicht ausreichend gekühlt.

von Christoph K. (chriskuku)


Lesenswert?

Neuer Stand:

1. Neues kurzes USB Kabel (15cm) bekommen
2. 3 DIYMORE Boards ausprobiert und alle geben bei
   st-info --probe vernünftigen Output von sich.
1
$ ./st-info --probe
2
Failed to parse flash type or unrecognized flash type
3
4
detected chip_id parametres
5
6
# Device Type: STM32F4x5_F4x7
7
# Reference Manual: RM0090           // RM0090 (Rev. 2)
8
#
9
chip_id 0x413
10
flash_type 3
11
flash_size_reg 0x1fff7a22
12
flash_pagesize 0x4000
13
sram_size 0x30000
14
bootrom_base 0x1fff0000
15
bootrom_size 0x7800
16
option_base 0x40023c14
17
option_size 0x4
18
flags 2
19
20
Found 1 stlink programmers
21
  version:    V2J39S27
22
  serial:     0670FF505252836687072821
23
  flash:      1048576 (pagesize: 16384)
24
  sram:       196608
25
  chipid:     0x413
26
27
detected chip_id parametres
28
29
# Device Type: STM32F4x5_F4x7
30
# Reference Manual: RM0090           // RM0090 (Rev. 2)
31
#
32
chip_id 0x413
33
flash_type 3
34
flash_size_reg 0x1fff7a22
35
flash_pagesize 0x4000
36
sram_size 0x30000
37
bootrom_base 0x1fff0000
38
bootrom_size 0x7800
39
option_base 0x40023c14
40
option_size 0x4
41
flags 2
42
43
  dev-type:   STM32F4x5_F4x7
44
$

3. openocd meldet allerdings:
1
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-19:34)
2
Licensed under GNU GPL v2
3
For bug reports, read
4
  http://openocd.org/doc/doxygen/bugs.html
5
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
6
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
7
8
Info : Listening on port 6666 for tcl connections
9
Info : Listening on port 4444 for telnet connections
10
Info : clock speed 2000 kHz
11
Info : STLINK V2J39M27 (API v2) VID:PID 0483:374B
12
Info : Target voltage: 2.905338
13
Info : [stm32f4x.cpu] Cortex-M4 r0p1 processor detected
14
Info : [stm32f4x.cpu] target has 6 breakpoints, 4 watchpoints
15
Info : starting gdb server for stm32f4x.cpu on 3333
16
Info : Listening on port 3333 for gdb connections

Und ich bekomme folgenden Fehler:
1
GNU gdb (GNU Tools for Arm Embedded Processors 8-2018-q4-major) 8.2.50.20181213-git
2
Copyright (C) 2018 Free Software Foundation, Inc.
3
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
4
This is free software: you are free to change and redistribute it.
5
There is NO WARRANTY, to the extent permitted by law.
6
Type "show copying" and "show warranty" for details.
7
This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-eabi".
8
Type "show configuration" for configuration details.
9
For bug reporting instructions, please see:
10
<http://www.gnu.org/software/gdb/bugs/>.
11
Find the GDB manual and other documentation resources online at:
12
    <http://www.gnu.org/software/gdb/documentation/>.
13
14
For help, type "help".
15
Type "apropos word" to search for commands related to "word".
16
0x5bb3b9be in ?? ()
17
.gdbinit:4: Error in sourced command file:
18
Error erasing flash with vFlashErase packet
19
(gdb) 
20
21
22
.gdbinit sieht so aus:
23
file myblinky_hse_pll_168_DIYMORE.elf
24
set mem inaccessible-by-default off
25
tar remote :3333
26
load

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt den NRST vom SWD-Interface des DISCO-Boards (5) mit dem 
Reset-Schalter des DIYMORE-Boards verbunden und zum ersten Mal konnte 
ich das Blinky-Programm erfolgreich flashen.

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> zum ersten Mal konnte ich das Blinky-Programm erfolgreich flashen.

Vermutlich war auf dem Board ein Programm drauf, das die SWD 
Schnittstelle deaktivierte. Die von Cube MX generierten Programme machen 
das alle standardmäßig.

Allerdings widerspricht dies dem:
> 3 DIYMORE Boards ausprobiert und alle geben bei
> st-info --probe vernünftigen Output von sich.

Vielleicht helfen die die folgenden Hinweise, das "Problem" besser zu 
verstehen: http://stefanfrings.de/stm32/cube_ide.html#flash

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:

> Vielleicht helfen die die folgenden Hinweise, das "Problem" besser zu
> verstehen: http://stefanfrings.de/stm32/cube_ide.html#flash

Danke für den Hinweis. Deine Anleitung hat jetzt meine Neugier 
dahingehend geweckt, doch mal SWD-Trace Messages auszuprobieren.
Habe in die Blinky-Mainloop
1
      while (1)
2
      {
3
        /* USER CODE BEGIN 3 */
4
       pin_state = !pin_state;
5
       HAL_GPIO_WritePin(Led2_GPIO_Port, Led2_Pin, pin_state);
6
       // synchronous delay for 500 ms
7
       HAL_Delay(100);
8
       ITM_SendString("LED\n");
9
      }

eingebaut und dann die Funktion ITM_SendString(*str) implementiert.
1
void ITM_SendString(char *str)
2
{
3
  while(*str){
4
    ITM_SendChar(*str);
5
    str++;
6
  }
7
}

In der Debug-Konfiguration CPU-Clock 8MHz eingestellt
Port 0 ausgewählt und auf den roten Knopf gedrückt. Es kommt aber keine 
Trace-Meldung in der SWV-ITM Dataconsole.

: Bearbeitet durch User
von Klaus W. (mfgkw)


Lesenswert?

Machst du C oder C++?
Bei C++ könnte es zwei verschiedene ITM_SendString geben (für const und 
nicht-const).

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Es kommt aber keine
> Trace-Meldung in der SWV-ITM Dataconsole.

Hast du den TRACESWO Pin denn mit dem Debugger verbunden? Hast du das 
Feature in der "Debug Configuration" eingeschaltet ([x] Enable)? Hast du 
alternativ das ST-Link Utility versucht?

Warum zeigst du keine Fotos vom Aufbau und Screenshots von deinen 
Einstellungen?

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

SWO Pin (6) am SWD Interface ist nicht angeschlossen. Wüßte jetzt im 
Moment auch nicht, wo am Target.
Ich meinte übrigens nicht Trace Messages, sondern Messages auf der 
ITM_Dataconsole.

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> SWO Pin (6) am SWD Interface ist nicht angeschlossen. Wüßte jetzt im
> Moment auch nicht, wo am Target.

Dann kann das natürlich auch nicht funktionieren! Welcher Pin TRACESWO 
ist, wirst du selbst herausfinden.

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> SWO Pin (6) am SWD Interface ist nicht angeschlossen. Wüßte jetzt im
>> Moment auch nicht, wo am Target.
>
> Dann kann das natürlich auch nicht funktionieren! Welcher Pin TRACESWO
> ist, wirst du selbst herausfinden.

Habe keine Idee, wo am STM32F407 des DIYMORE Boards der SWO pin sein 
soll.
Ich lese was vom Arm CoreSight M4 Debug Block. Am nächsten käme da von 
den Pinbezeichnungen PC11/SDIO. Muß passen.

von Klaus W. (mfgkw)


Lesenswert?

Christoph K. schrieb:
> Habe keine Idee, wo am STM32F407 des DIYMORE Boards der SWO pin sein
> soll.
> Ich lese was vom Arm CoreSight M4 Debug Block. Am nächsten käme da von
> den Pinbezeichnungen PC11/SDIO. Muß passen.

Nein, passt gar nicht.

Es gibt ein Datenblatt von STM namens DS8626.
Da steht auf Seite 58 in Tabelle 7 etwas von PB3 (JTDO/TRACESWO).
Das wäre eher ein Kandidat.

von Klaus W. (mfgkw)


Lesenswert?

Hat dein Board (auf dem es nicht klappt) einen STLink-Nachbau drauf? 
Oder nimmst du einen echten ST-Link?

Bei einem echten ST-Link müsste man das TRACESWO, also in dem Fall PB3, 
zum ST-Link Pin 13 des 20-poligen JTAG/SWD-Anschlusses ziehen (siehe 
UM1075 Table 4).
Der STLink verwurstet das dann weiter.

Auf dem F407-Diso-Board wird das intern gemacht. Da geht TRACESWO vom 
F407 über eine Lötbrücke SB12, die standardmäßig gesetzt ist (siehe 
UM1472 Table 6) in den STM32F103, der STLink spielt.

Man kann den ST-Link-Teil vom DISCO jetzt auch im Prinzip nehmen, um 
einen STM32 außerhalb des DISCO zu nutzen über SWD, indem man die Jumper 
von CN3 entfernt und den externen STM32 an CN1 auf dem DISCO-Board 
anschließt.
Ich glaube aber nicht, daß man dabei den SWO nutzen kann, weil die CN3 
nicht den TRACESWO vom F407 auf dem DISO trennen (nehme ich zumindest 
an).
Vielleicht geht es, wenn man SB12 auf dem DISCO entfernt und den 
TRACESWO von deinem Board (PB3) mit Pin6 von CN1 verbindet. Müsste man 
im Schaltplan vom DISCO schauen, ob das dann zu dem STM32F103 geleitet 
wird, der den STLink bildet.
Den Schaltplan gibt es bei ST (Stichwort MB997, weil das die Platine vom 
Disco ist, ggf. Version des MB997 auf der Platine vom DISCO 
nachschauen.)

Wenn dein Board einen STLink mehr oder weniger gut nachbildet und du den 
nimmst zum Debuggen, musst du bei dem herausfinden was er mit dem 
TRACESWO macht.
Wenn es dazu ordentliche Doku gibt, sollte man das darin finden.
Entsprechend falls du einen STLink-Klon nimmst. Ob der SWO durchleitet, 
würde ich nicht unterschreiben.

Auf jeden Fall sollte man mit einem Logic Analyzer oder Oszi oder 
notfalls einer LED erstmal sehen, ob an PB3 etwas ankommt.
Im nächsten Schritt musst du sehen, wie du das dann bis zum PC bekommst.

von Stefan F. (Gast)


Lesenswert?

Klaus W. schrieb:
> Es gibt ein Datenblatt von STM namens DS8626.
> Da steht auf Seite 58 in Tabelle 7 etwas von PB3 (JTDO/TRACESWO).
> Das wäre eher ein Kandidat.

Das hätte er selbst heraus finden sollen. Wir sind doch keine 
Babysitter!

von Stefan F. (Gast)


Lesenswert?

Klaus W. schrieb:
> Ich glaube aber nicht, daß man dabei den SWO nutzen kann, weil die CN3
> nicht den TRACESWO vom F407 auf dem DISO trennen

Das ist egal, solange der Target µC den Pin nicht aktiv ansteuert. Man 
kann ja ein entsprechendes Programm drauf laden, oder seinen Reset 
Eingang fest klemmen.

von Christoph K. (chriskuku)


Lesenswert?

Klaus W. schrieb:
> Machst du C oder C++?
> Bei C++ könnte es zwei verschiedene ITM_SendString geben (für const und
> nicht-const).

C, und hover über die Funktion liefert nur eine Repräsentanz.

Status im Moment: externes Target Board mit PB3 an SWO (SWD CN2, pin 6) 
verbunden. In der SWV Console erscheinen Debugmeldungen, aber noch als 
Hieroglyphen. Clockrate?

Allerdings wird STM32CubeIDE unheimlich busy und friert ein.
EDIT: Klappt jetzt. Ich bekam eine Fehlermeldung "Trace buffer full".
Aber es hat jetzt funktioniert mit Angabe der echten CPU-Clockrate 
(168MHz).

Neben Stefanus Anleitung fand ich diese - 
https://www.codeinsideout.com/blog/stm32/swv/ auch ganz nützlich. Da 
steht nämlich, daß man die CPU-Clockrate nehmen soll.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Clockrate?

Vermutlich liegt es daran. Das ist ja ein serielles Protokoll ähnlich 
UART. Wobei die Schnittstelle einzelne Buchstaben als 32bit überträgt. 
Also wenn dein Programm zwischen jedem richtigen Buchstaben drei 
Hieroglyphen anzeigt, ist es nur ein Darstellungsfehler.

> Neben Stefanus Anleitung fand ich diese (link) auch ganz nützlich.
> Da steht nämlich, daß man die CPU-Clockrate nehmen soll.

Habe ich das nicht ebenfalls geschrieben?
"Aktiviere im Debugger Tab die rot markierte Option und stelle die 
Taktfrequenz des Mikrocontrollers ein"

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> Clockrate?
>
> Vermutlich liegt es daran. Das ist ja ein serielles Protokoll ähnlich
> UART. Wobei die Schnittstelle einzelne Buchstaben als 32bit überträgt.
> Also wenn dein Programm zwischen jedem richtigen Buchstaben drei
> Hieroglyphen anzeigt, ist es nur ein Darstellungsfehler.
>
>> Neben Stefanus Anleitung fand ich diese (link) auch ganz nützlich.
>> Da steht nämlich, daß man die CPU-Clockrate nehmen soll.
>
> Habe ich das nicht ebenfalls geschrieben?
> "Aktiviere im Debugger Tab die rot markierte Option und stelle die
> Taktfrequenz des Mikrocontrollers ein"

Hast ja recht. Da steht ja auch "Core Clock". Mir erschienen nur die 
8MHz in der Voreinstellung etwas ungewöhnlich (weil die Quarzclock 8 
MHz) ist, weshalb ich da zuerst 8MHz eingestellt hatte. Meine CPU in 
meinem Testprogramm ist aber auf 168MHz eingestellt.
1
int main(void)
2
{
3
  /* USER CODE BEGIN 1 */
4
  int count=0;
5
  static char buf[32];
6
7
  /* USER CODE END 1 */
8
9
  /* MCU Configuration--------------------------------------------------------*/
10
11
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
12
  HAL_Init();
13
14
  /* USER CODE BEGIN Init */
15
16
  /* USER CODE END Init */
17
18
  /* Configure the system clock */
19
  SystemClock_Config();
20
21
  /* USER CODE BEGIN SysInit */
22
23
  /* USER CODE END SysInit */
24
25
  /* Initialize all configured peripherals */
26
  MX_GPIO_Init();
27
  MX_USART3_UART_Init();
28
29
30
31
    volatile static unsigned short pin_state = 0;
32
    /* Infinite loop */
33
     /* USER CODE BEGIN WHILE */
34
35
      while (1)
36
      {
37
        /* USER CODE BEGIN 3 */
38
       pin_state = !pin_state;
39
       HAL_GPIO_WritePin(Led2_GPIO_Port, Led2_Pin, pin_state);
40
       // synchronous delay for 500 ms
41
       HAL_Delay(500);
42
       if(count++ % 10 == 0)
43
            sprintf(buf,"count=%d\n",count),ITM_SendString(buf);
44
      }
45
      /* USER CODE END WHILE */
46
47
}
48
49
void ITM_SendString(char *str)
50
{
51
  while(*str){
52
    ITM_SendChar(*str++);
53
  }
54
}

Trotz dieser relativ niedrigen Rate von Meldungen kriege ich einen 
Tracebuffer Überlauf im CudeIDE (s. Bild).

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Hast ja recht. Da steht ja auch "Core Clock". Mir erschienen nur die
> 8MHz in der Voreinstellung etwas ungewöhnlich (weil die Quarzclock 8
> MHz) ist, weshalb ich da zuerst 8MHz eingestellt hatte.

Bei den µC für dich ich das schrieb sind 8 Mhz die Standard Taktfrequenz 
nach einem Reset, sofern man keine PLL aktiviert. Ist bei deinem 
vermutlich auch so.

> kriege ich einen Tracebuffer Überlauf im CudeIDE

Da kann ich lieder nicht helfen, das ist mir noch nie passiert. Du hast 
doch schon reichlich Delays eingebaut.

Vielleicht kommst du mit OpenOCD und Ausgabe in separatem Terminalfenter 
besser klar. Ich habe das auf der selben Seite beschrieben.

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

(anbei noch Doku)
Wenn ich in Preferences->STM32Cube->Serial Wire Viewer
nachschaue (anderer Ort als Window->Preferences, aber da Mac...),
steht dort schon 2000000 (2MB?) Das ist doch schon eine ganze Menge für 
so ein paar Meldungen. Manchmal ist weniger ja mehr :)

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Das ist doch schon eine ganze Menge für so ein paar Meldungen.

Ja, das entspricht etwa 1/2 Bibel.

von Christoph K. (chriskuku)


Lesenswert?

Soeben kam übrigens die Logic Probe Sigrok NanoDLA v1.2. (am 3.4. 
bestellt)
Enttäuschung aber groß: wird von Logic 2 2 nicht erkannt.

von Christoph K. (chriskuku)


Lesenswert?

Habe den SWV Tracebuffer auf 10.000.000 erhöht und bis jetzt Ruhe.
Zu früh gefreut. Läuft jetzt etwas später über und danach ist die 
Debugsession auch im Eimer.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Christoph K. schrieb:
> Habe den SWV Tracebuffer auf 10.000.000 erhöht und bis jetzt Ruhe.
> Zu früh gefreut. Läuft jetzt etwas später über und danach ist die
> Debugsession auch im Eimer.

Fehler gefunden, warum der Tracebuffer überlief (man soll nie etwas 
einschalten, über das man sich nicht von vornherein im klaren ist):

Ich hatte in den Werkzeugeinstellungen für die SWV ITM Dataconsole auch 
"Traceevents" mit angeklickt. Die wurden dann wahrscheinlich zuhauf 
generiert und brachten so den Buffer zum Überlauf.

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Fehler gefunden

Es ist immer besser die Problemursache zu finden, anstatt einen 
Workaround anzuwenden bei dem man nie sicher sein, wie lange er 
funktioniert.

Der TRACESWO Pin ist ein guter Kandidat für eine Power-LED. Solange kein 
Debugger benutzt wird, kannst du damit eine LED ansteuern um "ich lebe" 
anzudeuten. Wenn der Debugger dran hängt, verwandelt sich der Pin in 
einen seriellen Port für die Trace Meldungen.

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.