解决Ubuntu下pyocd无法识别某些自制DAPLink的问题

解决Ubuntu下pyocd无法识别某些自制DAPLink的问题

DAPLink硬件和固件

硬件来自于 https://oshwhub.com/xivn1987/daplink
固件来自于 https://github.com/XIVN1987/DAPLink/tree/master

其他的非官方固件也应该有类似的问题

无法识别现象描述

1
2
3
4
$ pyocd list
  #   Probe/Board               Unique ID    Target  
-----------------------------------------------------
  0   Segger J-Link (unknown)   4294967295   n/a     

pyocd安装正常,其他的Jlink调试器都能正常识别

1
2
$ pyocd list
No available debug probes are connected

但是自制的DAPLink无法识别

同时这个DAPLink在Keil中也都使用正常。

处理过程

  1. 查看是否存在USB设备
1
2
3
4
5
6
$ lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 007: ID 2e3c:5021 XIVN1987 XV-Link CMSIS-DAP
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

可以看到正确识别设备 XIVN1987 XV-Link CMSIS-DAP

  1. 增加Udev规则 参考这个URL处理 https://github.com/pyocd/pyOCD/tree/main/udev

下载目录

1
2
3
4
5
6
7
8
$ git clone https://github.com/pyocd/pyOCD.git
Cloning into 'pyOCD'...
remote: Enumerating objects: 18824, done.
remote: Counting objects: 100% (507/507), done.
remote: Compressing objects: 100% (166/166), done.
remote: Total 18824 (delta 416), reused 341 (delta 341), pack-reused 18317 (from 3)
Receiving objects: 100% (18824/18824), 29.53 MiB | 9.65 MiB/s, done.
Resolving deltas: 100% (13713/13713), done.

udev规则所在位置,官方固件的DAPLink可以直接使用上面的文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
cd pyOCD/udev/

$ ll
total 40
drwxrwxr-x  2 knightli knightli 4096 Apr 17 21:26 ./
drwxrwxr-x 11 knightli knightli 4096 Apr 17 21:26 ../
-rwxrwxr-x  1 knightli knightli  540 Apr 17 21:26 49-stlinkv2-1.rules*
-rwxrwxr-x  1 knightli knightli  450 Apr 17 21:26 49-stlinkv2.rules*
-rwxrwxr-x  1 knightli knightli 1007 Apr 17 21:26 49-stlinkv3.rules*
-rw-rw-r--  1 knightli knightli   89 Apr 17 21:26 49-vtlinkii.rules
-rw-rw-r--  1 knightli knightli  699 Apr 17 21:26 49-wch-link.rules
-rw-rw-r--  1 knightli knightli 2836 Apr 17 21:26 50-cmsis-dap.rules
-rw-rw-r--  1 knightli knightli  445 Apr 17 21:26 50-picoprobe.rules
-rwxrwxr-x  1 knightli knightli 1685 Apr 17 21:26 README.md*

自制版本的需要修改一下, 其实只需要加入以下一行

1
2
# 2e3c:5021 XIVN1987 XV-Link CMSIS-DAP
SUBSYSTEM=="usb", ATTR{idVendor}=="2e3c", ATTR{idProduct}=="5021", MODE:="666"

上述 第一行为注释

1
2
3
4
5
6
$ lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 007: ID 2e3c:5021 XIVN1987 XV-Link CMSIS-DAP
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

第二行中的数字与lsusb中的相对应

将相应的修改后的文件复制到 /etc/udev/rules.d

1
2
$ sudo udevadm control --reload
$ sudo udevadm trigger

加载修改后的规则

1
2
3
4
$ pyocd list
  #   Probe/Board                  Unique ID      Target  
----------------------------------------------------------
  0   XIVN1987 XV-Link CMSIS-DAP   1F75F4F81CA2   n/a     

修改成功后会看到你的DAPLink

记录并分享
Built with Hugo
主题 StackJimmy 设计