Forum: Mikrocontroller und Digitale Elektronik OpenOCD sehr langsam beim flashen


von Adam P. (adamap)


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?

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Jack V. (jackv)


Lesenswert?

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

von Adam P. (adamap)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Adam P. schrieb:
> Mit atprogram ist er super schnell.

Hmm, achso. Bei mir lief das unter Linux. Zum Betrieb unter Windows habe 
ich keine Erfahrung. Möglicherweise ist ja da die Anbindung an den 
USB-Stack (HID-Stack) suboptimal.

von Adam P. (adamap)


Lesenswert?

Jörg W. schrieb:
> Möglicherweise ist ja da die Anbindung an den USB-Stack (HID-Stack)
> suboptimal.

Oh, vergessen zu erwähnen.
Windows 10

von Thomas Z. (usbman)


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

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Adam P. (adamap)


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.

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.