无法运行STM32 L1 Discovery开发板

3

我有一块全新的STM32 L1探索板,但它似乎坏了。但我并不完全确定。

将板子通过USB连接到Linux机器时,板子可以正常启动,并且演示程序也像供应商描述的那样运行良好。

但是,我无法真正连接到这个板子。

➜ lsusb -s 002:074
Bus 002 Device 074: ID 0483:3748 STMicroelectronics ST-LINK/V2

看起来板子已经连接好了,大跳线(CN3)设置为DISCOVERY以在ST-LINK和DISCOVERY之间切换。但是当我尝试使用ST-Link实用程序时,我收到以下信息。

➜  stlink git:(master) ./st-flash --reset erase
libusb_handle_events() timeout
[!] send_recv
libusb_submit_transfer(-6)
[!] send_recv
libusb_submit_transfer(-6)
[!] send_recv
libusb_submit_transfer(-6)
[!] send_recv
libusb_submit_transfer(-6)
[!] send_recv
2015-12-25T19:24:57 INFO src/stlink-common.c: Loading device parameters....
libusb_submit_transfer(-6)
[!] send_recv
libusb_submit_transfer(-6)
[!] send_recv
libusb_submit_transfer(-6)
[!] send_recv
2015-12-25T19:24:57 WARN src/stlink-common.c: unknown chip id! 0
fish: Job 1, './st-flash --reset erase' terminated by signal SIGSEGV (Address boundary error)

此外,OpenOCD无法与该板进行通信。

openocd -f board/stm32ldiscovery.cfg
Open On-Chip Debugger 0.9.0 (2015-12-25-18:43)
Licensed under GNU GPL v2
For bug reports, read
     http://openocd.org/doc/doxygen/bugs.html
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Error: reset device failed
in procedure 'init' 
in procedure 'ocd_bouncer'

芯片板上的芯片是STM32L152RCT6。我之前使用过STM32F0..4,从未遇到过这样的问题,但我之前没有使用过L系列,所以我不确定这是板子的问题还是我在这里漏掉了重要的东西。
编辑:使用OpenOCD,我发现了意外的行为。在第一次运行时,我收到了错误消息:
Error: init mode failed (unable to connect to the target)

第二次运行时:
Error: reset device failed

然后设备从系统中消失,dmesg 留下了消息:
[ 1336.080239] usb 2-1.1: reset full-speed USB device number 4 using ehci-pci
[ 1336.154250] usb 2-1.1: device descriptor read/64, error -32
[ 1336.329341] usb 2-1.1: device descriptor read/64, error -32
[ 1336.503334] usb 2-1.1: reset full-speed USB device number 4 using ehci-pci
[ 1336.566330] usb 2-1.1: device descriptor read/64, error -32
[ 1336.741385] usb 2-1.1: device descriptor read/64, error -32
[ 1336.915427] usb 2-1.1: reset full-speed USB device number 4 using ehci-pci
[ 1337.317517] usb 2-1.1: device not accepting address 4, error -32
[ 1337.390532] usb 2-1.1: reset full-speed USB device number 4 using ehci-pci
[ 1337.792623] usb 2-1.1: device not accepting address 4, error -32
[ 1337.793110] usb 2-1.1: USB disconnect, device number 4
[ 1337.855642] usb 2-1.1: new full-speed USB device number 5 using ehci-pci
[ 1337.918651] usb 2-1.1: device descriptor read/64, error -32
[ 1338.093691] usb 2-1.1: device descriptor read/64, error -32
[ 1338.267730] usb 2-1.1: new full-speed USB device number 6 using ehci-pci
[ 1338.330727] usb 2-1.1: device descriptor read/64, error -32
[ 1338.505783] usb 2-1.1: device descriptor read/64, error -32
[ 1338.679823] usb 2-1.1: new full-speed USB device number 7 using ehci-pci
[ 1339.081921] usb 2-1.1: device not accepting address 7, error -32
[ 1339.154935] usb 2-1.1: new full-speed USB device number 8 using ehci-pci
[ 1339.557024] usb 2-1.1: device not accepting address 8, error -32
[ 1339.557168] usb 2-1-port1: unable to enumerate USB device

我认为适配器速度可能存在问题,但目前不确定。

编辑2:我已经尝试使用Windows ST Link实用程序,但无法连接到板子,板子导致“检测错误”或“连接错误”,软件建议更改SWD频率或模式。我尝试了每个组合,但都没有效果。

编辑3:如果这对某人有所帮助,板子已经退回,我得到的信息是它实际上是坏的,我得到了一个新的。新的工作如预期的那样完美无缺。


可能您已经损坏了ST-Link编程器设备。 - vlk
1
尝试断开连接测试下的MCU和STLINK部分的跳线,看看是否能够至少连接到STLINK。 - old_timer
很不幸,我之前尝试过这个,软件的响应没有任何变化,输出结果也是一样的。 - mucka
1个回答

2
有时我会在GNU/Linux上使用相同的L1 Discovery板。 texane/stlink 和OpenOCD都可以无需任何修改地完美检测到它。您可以看到输出:
$ st-util 
2016-01-08T21:55:59 INFO src/stlink-common.c: Loading device parameters....
2016-01-08T21:55:59 INFO src/stlink-common.c: Device connected is: L1 Med-density device, id 0x10186416
2016-01-08T21:55:59 INFO src/stlink-common.c: SRAM size: 0x4000 bytes (16 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 256 bytes
2016-01-08T21:55:59 INFO gdbserver/gdb-server.c: Chip ID is 00000416, Core ID is  2ba01477.
2016-01-08T21:55:59 INFO gdbserver/gdb-server.c: Target voltage is 2917 mV.
2016-01-08T21:55:59 INFO gdbserver/gdb-server.c: Listening at *:4242...
$ openocd -f board/stm32ldiscovery.cfg 
GNU ARM Eclipse 64-bits Open On-Chip Debugger 0.10.0-dev-00141-g09aeb96-dirty (2015-10-28-11:56)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The    results might differ compared to plain JTAG/SWD
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Info : STLINK v2 JTAG v25 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.913980
Info : stm32l1.cpu: hardware has 6 breakpoints, 4 watchpoints

也许你的板子真的坏了,但在你回收之前,我建议你尝试两种不同的方法。(a) 我认为在你的问题之后,你可能有另一块ST(如你提到的STM32F0..4)板,可能带有ST-LINK适配器。你可以将其用作外部ST-LINK(例如,请参见this)。(b) 尝试使用STSW-LINK005升级你的嵌入式ST-LINK固件,这个Java版本也适用于GNU/Linux环境。这个板子在我进行升级前后都工作得很好。

感谢您的回答和提供的输出。之前我不确定OpenOCD是否应该开箱即用。我甚至专门使用了基于FT2232的oocdlink ARM jtag,并且板载MPU似乎工作正常,所以很遗憾,板载的st-link出现了故障。我想知道是否能在没有示波器的情况下找到故障。关于升级固件,我之前尝试过,升级软件显示升级无缝进行,但设备的行为并没有改变。 - mucka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接