Имеем
- Ubuntu 14.04 32bit
- STM32VLDISCOVERY
- STM32F107VC
- OpenOCD 0.8.0
- arm-none-eabi-xxx
В качестве отладчика пытаюсь запустить discovery. Пока что все попытки не увенчались успехом.
при подключении discovery ядро (dmesg) выдает:
CODE
[ 83.660090] usb 1-4.1: new full-speed USB device number 7 using ehci-pci
[ 83.754037] usb 1-4.1: New USB device found, idVendor=0483, idProduct=3744
[ 83.754041] usb 1-4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 83.754044] usb 1-4.1: Product: STM32 STLink
[ 83.754047] usb 1-4.1: Manufacturer: STMicroelectronics
[ 83.754049] usb 1-4.1: SerialNumber: U\xffffffc3\xffffffbf\xffffffbfm\x06H\xffffffc2\xffffff82\xffffff82HSCu"\xffffffc2\xffffff87\xffffff87
[ 83.799151] usb-storage 1-4.1:1.0: USB Mass Storage device detected
[ 83.800050] scsi4 : usb-storage 1-4.1:1.0
[ 83.800176] usbcore: registered new interface driver usb-storage
[ 84.801047] scsi 4:0:0:0: Direct-Access STM32 PQ: 0 ANSI: 0
[ 84.801413] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 84.802025] sd 4:0:0:0: [sdc] 64000 512-byte logical blocks: (32.7 MB/31.2 MiB)
[ 84.803593] sd 4:0:0:0: [sdc] Write Protect is on
[ 84.803601] sd 4:0:0:0: [sdc] Mode Sense: 03 00 80 00
[ 84.804920] sd 4:0:0:0: [sdc] No Caching mode page found
[ 84.804928] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[ 84.880106] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 85.056148] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 85.232177] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 85.408087] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 85.584123] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 85.760160] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 85.854379] sd 4:0:0:0: [sdc] No Caching mode page found
[ 85.854386] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[ 85.860082] sdc:
[ 85.936079] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 86.112110] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 86.288146] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 86.464059] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 86.640096] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 86.816134] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 86.911098] sd 4:0:0:0: [sdc] No Caching mode page found
[ 86.911105] sd 4:0:0:0: [sdc] Assuming drive cache: write through
[ 86.911110] sd 4:0:0:0: [sdc] Attached SCSI removable disk
[ 86.988178] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 87.164084] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 87.340120] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 87.516157] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 87.692069] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 87.868105] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 88.036147] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 88.212059] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 88.388095] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 88.564133] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 88.740169] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 88.916083] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 89.008547] sd 4:0:0:0: [sdc] Unhandled error code
[ 89.008553] sd 4:0:0:0: [sdc]
[ 89.008556] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[ 89.008558] sd 4:0:0:0: [sdc] CDB:
[ 89.008560] Read(10): 28 00 00 00 f9 80 00 00 08 00
[ 89.008570] end_request: I/O error, dev sdc, sector 63872
[ 89.008574] Buffer I/O error on device sdc, logical block 7984
[ 89.084124] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 89.260160] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 89.436071] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 89.612127] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 89.788145] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 89.964182] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 90.056516] sd 4:0:0:0: [sdc] Unhandled error code
[ 90.056520] sd 4:0:0:0: [sdc]
[ 90.056523] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[ 90.056525] sd 4:0:0:0: [sdc] CDB:
[ 90.056527] Read(10): 28 00 00 00 f9 80 00 00 08 00
[ 90.056536] end_request: I/O error, dev sdc, sector 63872
[ 90.056540] Buffer I/O error on device sdc, logical block 7984
[ 90.132099] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 90.308136] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 90.484173] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 90.660084] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 90.836125] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 91.012159] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 91.104616] sd 4:0:0:0: [sdc] Unhandled error code
[ 91.104619] sd 4:0:0:0: [sdc]
[ 91.104622] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[ 91.104624] sd 4:0:0:0: [sdc] CDB:
[ 91.104626] Read(10): 28 00 00 00 f9 f0 00 00 08 00
[ 91.104634] end_request: I/O error, dev sdc, sector 63984
[ 91.104637] Buffer I/O error on device sdc, logical block 7998
[ 91.180075] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 91.356111] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 91.532148] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 91.708060] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 91.884097] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 92.060135] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 92.152591] sd 4:0:0:0: [sdc] Unhandled error code
[ 92.152595] sd 4:0:0:0: [sdc]
[ 92.152597] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[ 92.152600] sd 4:0:0:0: [sdc] CDB:
[ 92.152601] Read(10): 28 00 00 00 f9 f0 00 00 08 00
[ 92.152609] end_request: I/O error, dev sdc, sector 63984
[ 92.152612] Buffer I/O error on device sdc, logical block 7998
[ 92.240169] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 92.416081] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 92.592118] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 92.768173] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 92.944072] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 93.120105] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 93.212565] sd 4:0:0:0: [sdc] Unhandled error code
[ 93.212569] sd 4:0:0:0: [sdc]
[ 93.212572] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[ 93.212574] sd 4:0:0:0: [sdc] CDB:
[ 93.212576] Read(10): 28 00 00 00 f9 f8 00 00 01 00
[ 93.212586] end_request: I/O error, dev sdc, sector 63992
[ 93.212590] Buffer I/O error on device sdc, logical block 7999
[ 93.288163] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 93.464203] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 93.640119] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 93.816144] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 93.992175] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 94.168080] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 94.260542] sd 4:0:0:0: [sdc] Unhandled error code
[ 94.260546] sd 4:0:0:0: [sdc]
[ 94.260548] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[ 94.260551] sd 4:0:0:0: [sdc] CDB:
[ 94.260553] Read(10): 28 00 00 00 f9 f8 00 00 01 00
[ 94.260562] end_request: I/O error, dev sdc, sector 63992
[ 94.260567] Buffer I/O error on device sdc, logical block 7999
[ 94.336134] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 94.512159] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 94.688069] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
[ 94.864118] usb 1-4.1: reset full-speed USB device number 7 using ehci-pci
Если запустить openocd с таким config файлом
Код
./openocd -f /opt/openocd/share/openocd/scripts/board/stm32vldiscovery.cfg
то в результате получим (иногда вообще никаких Error не выводит, просто завершает работу.)
Код
sudo ./openocd -f /opt/openocd/share/openocd/scripts/board/stm32vldiscovery.cfg
Open On-Chip Debugger 0.8.0 (2014-08-19-11:19)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
in procedure 'transport'
in procedure 'init'
или
Код
./openocd -f /opt/openocd/share/openocd/scripts/board/stm32vldiscovery.cfg
Open On-Chip Debugger 0.8.0 (2014-08-19-11:19)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Error: read version failed
in procedure 'transport'
in procedure 'init'
При использовании /texane/stlink
Код
./st-util
2014-08-20T09:39:07 INFO src/stlink-usb.c: -- exit_dfu_mode
2014-08-20T09:39:07 INFO src/stlink-common.c: Loading device parameters....
2014-08-20T09:39:07 INFO src/stlink-common.c: Device connected is: F1 Connectivity line device, id 0x10016418
2014-08-20T09:39:07 INFO src/stlink-common.c: SRAM size: 0x10000 bytes (64 KiB), Flash: 0x40000 bytes (256 KiB) in pages of 2048 bytes
2014-08-20T09:39:07 INFO gdbserver/gdb-server.c: Chip ID is 00000418, Core ID is 1ba01477.
libusb_handle_events() | has_error
[!] send_recv
2014-08-20T09:39:07 INFO gdbserver/gdb-server.c: Listening at *:4242...
^C
libusb_handle_events() | has_error
[!] send_recv
libusb_handle_events() | has_error
[!] send_recv
libusb_handle_events() | has_error
[!] send_only
dmesg после запуска openocd
Код
[ 1515.391032] usb 1-4.1: usbfs: interface 0 claimed by usb-storage while 'openocd' sets config #1
Относительно texane сказано что
Цитата
IF YOU HAVE AN STLINKv1
~~~~~~~~~~~~~~~~~~~~~~~
The STLINKv1's SCSI emulation is very broken, so the best thing to do
is tell your operating system to completely ignore it.
Options (do one of these before you plug it in)
*) modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i
or *)1. add "options usb-storage quirks=483:3744:i" to /etc/modprobe.conf
*)2. modprobe -r usb-storage && modprobe usb-storage
or *)1. cp stlink_v1.modprobe.conf /etc/modprobe.d
*)2. modprobe -r usb-storage && modprobe usb-storage
Для нашего случая, если применить игнор, то результат на запуск openocd будет таким
Код
./openocd -f /opt/openocd/share/openocd/scripts/board/stm32vldiscovery.cfg
Open On-Chip Debugger 0.8.0 (2014-08-19-11:19)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : STLINK v1 JTAG v13 API v2 SWIM v0 VID 0x0483 PID 0x3744
Info : using stlink api v2
Error: init mode failed
in procedure 'transport'
in procedure 'init'
При этом texane, для случая когда мы игнорируем usb-storage ведет себя аналогично тому как и без игнора
Если полезть в коменты репозитория на openocd, то можно найти инфрмацию, не на столько уж и давнешнюю
Цитата
stlink_usb: Fix swallowed error on read/write operations, add retries on SWD WAIT, clean up error debug output.
- stlink_usb_get_rw_status() had a bug where FAULT or WAIT responses
in read/write operations were ignored, leading to incomplete data.
- Added wrapper stlink_cmd_allow_retry to handle
SWD_AP_WAIT/SWD_DP_WAIT statuses in most commands. These statuses
appear if an SWD read or write received a WAIT ACK response from the
target more than 4 times in a row. The driver retries the operation
(with exponential backoff) before failing outright (in testing 1
retry was always enough.)
- As part of the implementation of stlink_cmd_allow_retry a large
number of lines of boilerplate were refactored.
- Fleshed out stlink_usb_error_check and added it to some more code
paths so WAIT or FAULT responses are logged to debug. WAIT responses
will be logged even if they are subsequently retried, which should
help in case the retries have subtle side effects (none
anticipated.)
Tested with two targets: STLINK F0 Discovery, Nordic NRF51822. Only
tested with STLINK V2 programmers.
Но даже откомпилированая последняя версия openocd выдает:
Код
./../src/openocd -f board/stm32vldiscovery.cfg
Open On-Chip Debugger 0.9.0-dev-00130-gf0dfa13 (2014-08-20-10:08)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
Info : clock speed 1000 kHz
in procedure 'init'
in procedure 'ocd_bouncer'
in procedure 'transport'
in procedure 'init'
Как я понял, ребята успешно запускали OpenOCD на STLINK V1
Может я что-то упустил, в чем может быть причина того что OpenOCD не стартует ?
P.S. Spoiler работает не совсм коректно...
Add #1
======================
The discovery’s stlink (both st8, st32) implementation of the USB protocol violates the USB standard in multiple ways and it's too much broken for the linux kernel driver. Although it's possible to intercept the core and write/read a data in some for that designated SRAM region, there isn't any direct communication channel to the chip over the USB. The right (but long term) solution will be to replace the stlink firmware.
Сообщение отредактировал IgorKossak - Aug 20 2014, 12:35
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!