PDLINK 基本使用
Windows系统常见依赖
Libusb - 必选
产品所有的功能基于USB接口,也依赖于libusb
libusb直接从官网下载.
libusb的库安装到系统,目录libusb\VS2019\MS64\dll下面的文件copy到下面的路径中即可
- c:\windows\system32
- Python.exe 所在的路径,如不使用python相关应用,本步骤可以省略
如上两个最好都安装下,不同的程序和配置可能使用的路径不同
libusb的应用程序安装到系统,目录libusb\examples\bin64下的exe文件copy到系统可执行路径
powershell或者cmd窗口就可以执行类似lsusb的命令行
listdevs.exe -h
0451:8340 (bus 1, device 1) path: 22
045e:077f (bus 1, device 11) path: 6.2.5
0451:82ff (bus 1, device 7) path: 6.5
04f2:b604 (bus 1, device 3) path: 8
1a40:0201 (bus 1, device 6) path: 6.2
06cb:009a (bus 1, device 4) path: 9
045e:082e (bus 1, device 8) path: 6.2.2
1209:c550 (bus 1, device 28) path: 6.2.4
0451:8342 (bus 1, device 2) path: 6
8086:a36d (bus 1, device 0)
8087:0aaa (bus 1, device 5) path: 14
045e:082c (bus 1, device 9) path: 6.2.3
Using libusb v1.0.24.11584
Opening device 040D:0002...
Device properties:
bus number: 1
port path: 6->2->4 (from root hub)
speed: 12 Mbit/s (USB FullSpeed)
Reading device descriptor:
length: 18
device class: 239
S/N: 1
VID:PID: 040D:0002
bcdDevice: 0101
iMan:iProd:iSer: 2:3:1
nb confs: 1
Reading BOS descriptor: 2 caps
USB 2.0 extension:
attributes : 00
Unknown BOS device capability 05:
Reading first configuration descriptor:
nb interfaces: 3
interface[0]: id = 0
interface[0].altsetting[0]: num endpoints = 2
Class.SubClass.Protocol: FF.00.00
endpoint[0].address: 01
max packet size: 0040
polling interval: 00
endpoint[1].address: 81
max packet size: 0040
polling interval: 00
interface[1]: id = 1
interface[1].altsetting[0]: num endpoints = 2
Class.SubClass.Protocol: 0A.00.00
endpoint[0].address: 02
max packet size: 0040
polling interval: 00
endpoint[1].address: 82
max packet size: 0040
polling interval: 00
interface[2]: id = 2
interface[2].altsetting[0]: num endpoints = 1
Class.SubClass.Protocol: 02.02.01
endpoint[0].address: 84
max packet size: 0008
polling interval: FF
Claiming interface 0...
Claiming interface 1...
Failed.
Claiming interface 2...
Failed.
Reading string descriptors:
String (0x02): "PdboLt"
String (0x03): "PDBOLT CMSIS-DAP"
String (0x01): "6713BDFF"
Releasing interface 0...
Releasing interface 1...
Releasing interface 2...
Closing device...
验证Python是否可以正常使用Libusb - 可选
运行下面的Python代码,代码应该可以打印出libusb的路径 并且没有错误输出。
import os
print("System32 exists: %s" % os.path.exists("C:\\Windows\\System32"))
print("libusb-1.0.dll exists: %s" % os.path.exists("C:\\Windows\\System32\\libusb-1.0.dll"))
from ctypes.util import find_library
print("find_library: %s" % find_library("libusb-1.0"))
import os
os.environ['PYUSB_DEBUG'] = 'debug'
import usb.core
# No error repot. Can print libusb dll path
# Example output
# System32 exists: True
# libusb-1.0.dll exists: True
# find_library: C:\WINDOWS\system32\libusb-1.0.dll
# 2021-02-26 10:56:25,040 DEBUG:usb.backend.libusb1:_LibUSB.__init__(<WinDLL 'C:\WINDOWS\system32\libusb-1.0.dll', handle 7fff2da50000 at 0x2a533fa1f98>)
# 2021-02-26 10:56:25,045 INFO:usb.core:find(): using backend "usb.backend.libusb1"
# 2021-02-26 10:56:25,045 DEBUG:usb.backend.libusb1:_LibUSB.enumerate_devices()
# 2021-02-26 10:56:25,070 DEBUG:usb.backend.libusb1:_LibUSB.get_device_descriptor(<usb.backend.libusb1._Device object at 0x000002A533DDAD68>)
# 2021-02-26 10:56:25,071 DEBUG:usb.backend.libusb1:_LibUSB._finalize_object()
usb.core.find()
Openocd - 按需
Openocd可以方便的调试、下载程序,可以从其官网下载
把资源包中的 openocd-20201228\OpenOCD-20201228-0.10.0\bin中的
- openocd.bat
- pdlink-stm32.cfg
拷贝到对应的openocd目录下
注意openocd的cfg需要对应的执行路径,如不想探究其细节,直接在openocd的bin目录下执行openocd命令即可
.\openocd.exe -f .\pdlinkj-stm32.cfg
Open On-Chip Debugger 0.10.0 (2020-12-28) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
Warn : Transport "swd" was already selected
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: FW Version = 1.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 100 kHz
Info : SWD DPIDR 0x1ba01477
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Error: stm32f1x.cpu -- clearing lockup after double fault
Polling target stm32f1x.cpu failed, trying to reexamine
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, current mode: Thread
Pyocd - 按需
目前pyocd尚无法正常烧录
pip安装pyocd
在资源包的pyocd目录里面执行pyocd.bat list等命令
注意,因未详细调试reset管脚的状态,需要先通过跳线将stm32的boot管脚设置为升级模式并重新启动
pyocd list
# Probe Unique ID
-------------------------------------------
0 PdboLt PDBOLT CMSIS-DAP 7733BDFF
❯ .\pyocd.bat cmd -v -t stm32f103c8
0001445:WARNING:cmsis_pack:Overlapping memory regions in file <zipfile.ZipFile filename='./packs/Keil.STM32F7xx_DFP.2.12.0-small.pack' mode='r'>, deleting outer region. Further warnings will be suppressed for this file.
0001562:WARNING:cmsis_pack:Overlapping memory regions in file <zipfile.ZipFile filename='./packs/Keil.STM32L4xx_DFP.2.3.0-small.pack' mode='r'>, deleting outer region. Further warnings will be suppressed for this file.
0001624:INFO:board:Target type is stm32f103c8
0001878:INFO:dap:DP IDR = 0x1ba01477 (v1 rev1)
0001887:INFO:ap:AHB-AP#0 IDR = 0x14770011 (AHB-AP var1 rev1)
0001902:INFO:rom_table:AHB-AP#0 Class 0x1 ROM table #0 @ 0xe00ff000 (designer=020 part=410)
0001911:INFO:rom_table:[0]<e000e000:SCS-M3 class=14 designer=43b part=000>
0001917:INFO:rom_table:[1]<e0001000:DWT class=14 designer=43b part=002>
0001924:INFO:rom_table:[2]<e0002000:FPB class=14 designer=43b part=003>
0001930:INFO:rom_table:[3]<e0000000:ITM class=14 designer=43b part=001>
0001936:INFO:rom_table:[4]<e0040000:TPIU-M3 class=9 designer=43b part=923 devtype=11 archid=0000 devid=ca0:0:0>
0001938:INFO:cortex_m:CPU core #0 is Cortex-M3 r1p1
0001945:INFO:dwt:4 hardware watchpoints
0001949:INFO:fpb:6 hardware breakpoints, 4 literal comparators
Connected to STM32F103C8 [Running]: 773FBDFF
Usb 工具
抓包
安装USBPcap
安装后需要重启
cd C:\Program Files\USBPcap
USBPcapCMD.exe
1
这个命令行会弹出窗口显示可用的抓包,新笔记本往往是一个root hub出来的,因此这里只有一个1可选 选择对应的端口后,输入报文存储的文件,如test.pcap
此时,插拔USB设备即可
这种方式可以抓到部分包
Linux抓包
modprobe usbmon
tcpdump -D
tcpdump 能显示usbmon借口即可
killall tcpdump
tcpdump -i usbmon1 -w test.pcap &
lsusb -v -d 040D:0002
killall tcpdump 查看test.pcap即可
Saleae Logic 16抓包
- 飞线 DP/DM到CH0、CH1
- Disable all 2-15 Channel
- 信号触发选择低电平方波触发
- 选100M
- Start Simulation
- Analyzers 选择USB FS/LS
此时可以导出各种形式的信息,用于分析
信息查看
- usbtreeview
- usbview



