OpenOCD sehr langsam beim flashen

OP #7493870
Lesenswert?

Hallo zusammen,

seit heute arbeite ich mich in OpenOCD ein und komme grad nicht weiter. Das Problem ist, dass das Übertragen der Firmware ewig dauert (mehrere Minuten).

Verwendet wird:

  • OpenOCD 0.12.0
  • Atmel-ICE
  • SAM4E16E

Als erstes habe ich mir eine "openocd.cfg" erstellt:

1
# Atmel-ICE JTAG/SWD in-circuit debugger.
2
adapter driver cmsis-dap
3
cmsis_dap_vid_pid 0x03eb 0x2141
4

5
transport select jtag
6

7
# Chip info
8
set CHIPNAME SAM4E16E
9
source [find target/at91sam4sXX.cfg]

In der "at91sam4XXX.cfg" habe ich noch den JTAG Clock von 500 kHz auf 2000 kHz erhöht, was jedoch nicht wirklich hilft.

Aufgerufen wird OpenOCD wie folgt:

1
openocd -f openocd.cfg -c "program fw_10.hex verify reset exit"

Ausgabe beim Aufruf:

1
E:\OpenOCD-20230712-0.12.0\bin>openocd -f openocd.cfg -c "program fw_10.hex verify reset exit"
2
Open On-Chip Debugger 0.12.0 (2023-07-12) [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
Info : CMSIS-DAP: SWD supported
8
Info : CMSIS-DAP: JTAG supported
9
Info : CMSIS-DAP: FW Version = 1.0
10
Info : CMSIS-DAP: Serial# = J42700040742
11
Info : CMSIS-DAP: Interface Initialised (JTAG)
12
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
13
Info : CMSIS-DAP: Interface ready
14
Info : clock speed 2000 kHz
15
Info : cmsis-dap JTAG TLR_RESET
16
Info : cmsis-dap JTAG TLR_RESET
17
Info : JTAG tap: SAM4E16E.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
18
Info : [SAM4E16E.cpu] Cortex-M4 r0p1 processor detected
19
Info : [SAM4E16E.cpu] target has 6 breakpoints, 4 watchpoints
20
Info : starting gdb server for SAM4E16E.cpu on 3333
21
Info : Listening on port 3333 for gdb connections
22
Info : cmsis-dap JTAG TLR_RESET
23
Info : cmsis-dap JTAG TLR_RESET
24
Info : cmsis-dap JTAG TLR_RESET
25
Info : JTAG tap: SAM4E16E.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
26
[SAM4E16E.cpu] halted due to debug-request, current mode: Thread
27
xPSR: 0x01000000 pc: 0x00405418 msp: 0x200055e8
28
** Programming Started **

Nach mehreren Minuten erscheint dann irgendwann ** Programming Finished **. Was mache ich noch falsch?

Moderator Persönliche Seite #7493871
Lesenswert?

Atmel-ICE zu langsam angebunden?

Ich habe diese Kombi bei meinem früheren Brötchengeber oft verwendet ohne Probleme. Später sind wir dann allerdings auf einen FT2232 umgestiegen, der gleich mit aufs Board kam, da sich die kleinen 10-Pin-Kabel des Atmel-ICE als recht fragil für das häufige Stecken und Ziehen in der täglichen Entwicklungsarbeit gezeigt hatten. Auch da allerdings wurde wieder OpenOCD benutzt.

OP #7493873
Lesenswert?

Jörg W. schrieb:

Atmel-ICE zu langsam angebunden?

Mit atprogram ist er super schnell. Das wirds nicht sein.

Jack V. schrieb:

Möglicherweise bekommst du nähere Informationen, wenn du den Debug-Level hochsetzt?

Ja das habe ich schon ausprobiert, jedoch sagt mir der Inhalt nicht wirklich viel. Ich hänge mal den log an, zumindest die ersten paar Sekunde (-d3).

Angehängte Dateien:
#7493937
Lesenswert?

Adam P. schrieb:

Was mache ich noch falsch?

Dein OpenOCD verwendet noch CMSIS-DAP ver 1 gibts da keine v2 Implementierung dann würde auch die unselige HID Geschichte wegfallen.

Generell ist das Flashen per SWD / JTAG sehr langsam da die Daten alle durch das ARM Debug Interface geprügelt werden müssen. Das ARM Debug Interface kann immer nur 16 Bit auf einmal programmieren. Besser wird das erst mit chip spez. Flash Algos die dann Ram laufen und immer einen 64 Byte Block oder größer flashen.

Ich kenne OpenOCD aber nicht im Detail das steht noch auf meiner ToDo liste. Es gibt wohl auf Github CMSIS DAP sourcen die das laden solcher Flash Algos unterstützt, der Source Code ist aber gruselig und schlecht dokumentiert. Ich habs noch nicht verstanden wie das funktioniert. Es wird wohl via Vendor comands realisiert.

https://github.com/x893/CMSIS-DAP https://arm-software.github.io/CMSIS_5/DAP/html/index.html

Moderator Persönliche Seite #7493969
Lesenswert?

Thomas Z. schrieb:

Generell ist das Flashen per SWD / JTAG sehr langsam da die Daten alle durch das ARM Debug Interface geprügelt werden müssen.

Naja, wie geschrieben, wir haben das aktiv benutzt, auch am SAM4E, und selbst mit FTDI-MPSSE war es nun nicht wirklich gruselig langsam. Kann sein, dass es schneller gehen könnte, aber war für uns nie ein ernsthaftes Problem.

OP #7560237
Lesenswert?

Moin zusammen,

durch Zufall bin ich nun auf den Fehler gestoßen.

Schließe ich mein Atmel-ICE über mein USB3.0 HUB an, ist es richtig langsam (wie oben beschrieben).

Schließe ich ihn direkt an PC an und verwende "adapter speed 4000", dann bekomme ich den SAMC21 in 15 Sek. geflasht.

1
# Atmel-ICE JTAG/SWD in-circuit debugger.
2
adapter driver cmsis-dap
3
cmsis_dap_vid_pid 0x03eb 0x2141
4

5
transport select swd
6

7
# Chip info
8
set CHIPNAME at91samc21g18
9
source [find target/at91samdXX.cfg]
10

11
adapter speed 4000
12

13
# Example
14
# openocd -f "openocd.cfg" -c init -c "reset halt" -c "flash write_image erase fw_512.bin"

Somit hat sich das Problem gelöst, danke an alle.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren