首页
论坛
课程
招聘
[原创]DAP-LINK研究笔记-用STM32单片机替换J-LINK
2021-9-18 17:04 30631

[原创]DAP-LINK研究笔记-用STM32单片机替换J-LINK

2021-9-18 17:04
30631

1. DAP-LINK简介

Arm Mbed DAPLink 是一个开源软件项目。把代码编译以后,会生成一个固件(和单片机开发是相同的),把固件写到单片机里面,单片机就具备了J-LINK的功能。其成本很低,在淘宝上也有现成的产品。本文记录的是使用一个STM32开发板制作DAP-LINK的过程。


图 1 淘宝上的DAP-LINK

本次实验的基本流程如下:

1.使用开源的代码编译生成DAP-LINK固件。

2.使用J-LINK烧写DAP-LINK的固件到开发板中。

3.验证DAP-LINK固件在开发板中的可用性。

下面先介绍基本的硬件、软件环境,再介绍实验步骤。

2. 硬件信息

实验主机:笔记本电脑

开发板:STM32F103C8T6开发板[1](用来承载DAP-LINK)

开发板:STM32F103VET6开发板[2](用来验证DAP-LINK可用)

辅助调试器:J-LINK调试器[3]

开发板和辅助调试器依次如下图所示:

图 2 J-LINK调试器示意图

图 3 STM32F103C8T6开发板

3. 软件信息

源码:x893 DAP-LINK源码[4]

实验主机:Win10

编译环境:ARM MDK 5.14[5]

4. 制作过程

制作过程部分主要描述编译环境构建、编译DAP-LINK源码、烧写DAP-LINK程序到小开发板、验证DAP-LINK的可用性。其中,在验证可用性的环节,DAP-LINK指示灯和SWD调试连接需要进行原理图分析后,才能确定芯片的连接关系,进而使用杜邦线建立DAP-LINK和开发板的连接。USB接口的连接,x893和我们的小开发板的连接是一致的,所以这部分不用担心烧写DAP-LINK程序后会不兼容。

4.1 编译环境构建

经多次测试,x893 的DAP-LINK源码适用于本开发板。其代码在github中开源,事实上,该代码衍生自官方的github。

图 4  x893 DAP-LINK源码


该代码使用ARM MDK[6]编译,所以需要在笔记本上构建编译环境,才能完成代码编译。

下载MDK。使用脚注提供的百度云连接安装即可。安装和破解过程参考网络已有教程资源[7]。安装完成后,需要下载最新的CMSIS包[8],选择Legacy support for Arm Cortex-M devices下载,下载完成后默认安装即可。

4.2 编译DAP-LINK源码

打开\Firmware\STM32目录下的CMSIS_DAP.uvproj工程文件,即可打开MDK的工程。打开后如下图所示。选择CMSIS-DAP-V2-F103。点击左侧箭头即可进行编译。

图 5  MDK打开工程项目后的界面

编译完成后,build output窗口有以下输出:


图 6  编译完成的日志

4.3 烧写DAP-LINK固件到开发板

将开发板与J-LINK建立连接,并将J-LINK插入到笔记本中,点击图5所示的蓝色深色箭头,完成烧写。期间,需要确保J-LINK连接到开发板后,MDK可以识别到J-LINK插入到开发板,而且在debug->settings中可见J-LINK已经识别到与J-LINK连接的MCU了。

图 7  确保J-LINK与开发板连接后识别到开发板的MCU


图 8  J-LINK下载固件到开发板中

4.4 验证DAP-LINK固件在开发板中的可用性

重新将C8T6开发板(烧写DAP-LINK固件的开发板)的USB插入到笔记本中,笔记本中识别了两个设备,分别是串口设备和USB设备。这样,我们的C8T6就变成了一个CMSIS DAP调试器,其功能类似J-LINK。

图 9  将DAP-LINK重新插入电脑后出现两个设备

将C8T6开发板与被测试的VET6开发板相连接。连接关系如下图所示。需要注意的地方有两个:SWD连接和DAP-LINK的指示灯。

图 10  DAP-LINK和开发板的连接方式

打开被测试开发板资料中的例程,设置开发板烧写方式为DAP-LINK。然后以烧写DAP-LINK的方式进行编译、烧写。

图 11  设置工程源码烧写选项为DAP-LINK

图 12烧写完成后的日志

4.4.1 恢复指示灯

指示灯可恢复可不恢复。x893的主板上存在两个自定义的LED,而我们的C8T6开发板上只有一个,所以只恢复了一个LED,另一个不恢复也不影响整体功能。两份开发板原理图位置如下:

l  x893的电路原理图:HW_STM32/CMSIS-DAP-X893/CMSIS-DAP.V2.pdf。

l C8T6开发板的原理图:STM32F103C8T6-48脚-最小系统资料/STM32F103C8T6-48脚-最小系统资料/STM32F103C8T6--原理图.pdf。

在C8T6开发板中,PC13与自定义LED相连接,默认不发光。而在x893中,存在两个LED,分别与PB12和PB13相连。本次实验恢复了PB13的LED连接,即把C8T6开发板的PB13连接到PC13上,使用杜邦线进行短接即可。



图 13  C8T6开发板的自定义LED


图 14  x893开发板的自定义LED


图 15 C8T6开发板的PB13位置在TFT屏幕接口上

4.4.2 SWD调试连接

如果想建立SWD调试连接,需要我们在C8T6开发板和VET6开发板之间连接4根杜邦线。根据SWD接口的规范[9],可以了解到只需要连接VCC、GND、SWDIO、SWCLK这四条杜邦线即可。


从X893的电路图中可知,SWDIO和SWCLK由PA13、PA14这两个IO口模拟产生,所以将这两个IO口用杜邦线和VET6开发板的SWD接口的SWDIO和SWCLK进行连接即可。使用两根杜邦线将两个开发板的VCC和GND对应连接起来,这样,就实现了SWD接口的连接。


图 16  x893开发板上调试目标开发板的SWD接口

5 DAP-LINK调试方法

5.1 Linux下调试方法

pyOCD[10]和J-LINK驱动自带的工具有些类似。使用pip也可以直接安装成功。安装命令如下:

python3 -m pip install -U pyocd

使udev下的CMSIS-DAP设备可用:sudo cp udev/50-cmsis-dap.rules /etc/udev/rules.d/

运行以下命令,即可识别到CMSIS DAP。一般情况下,需要运行sudo才能使用USB设备,具体需要根据自己的Linux环境而定,有的应该不需要,跟系统配置相关,这里不再赘述。Linux下调试STM32,如果需要自动化的测试程序,则需要自己完成脚本编写。

图 17  Linux下识别到CMSIS-DAP设备

5.2 Windows下调试方法

Windows下同样支持pyocd,如果不需要自动化测试,使用J-link驱动来完成gdbserver端口映射是最方便的。

图 18  Window下使用J-LINK+DAPLINK调试单片机

6 总结

DAP-LINK的开源代码在STM32F103C8T6的实现比较简单,需要注意的是,在使用自己的开发板加载适合其他开发板程序的时候,需要自己跳线解决兼容性的问题。解决跳线的方法是,通过分析原理图,找到开源开发板上所示必要引脚,再找到自己的开发板与必要引脚的对应关系,在自己的开发板上实现开源开发板相同的电气连接即可。

本文内容,需要有MDK使用经验。MDK是编译单片机代码的IDE,早期是keil,后被ARM买了。如果文章中有不懂的地方,可以网上搜索使用MDK进行STM32开发的环境搭建过程,做一遍环境搭建,就能完整复现本文的实验步骤了。

撰文时间较短,有不足之处,欢迎各位道友指出。欢迎交流。



7 参考链接

[1] STM32F103C8T6 开发板 STM32最小系统核心板 STM32单片机学习评估-淘宝网 (taobao.com)

[2] STM32F103VET6核心板最小系统板STM32 ARM开发板Cortex-m3-淘宝网 (taobao.com)

[3] 仿真器J-LINK下载器ARM单片机STM开发板烧录器V10JLINKV9-tmall.com天猫

[4] GitHub - x893/CMSIS-DAP: STM32 port for CMSIS-DAP with additional serial (CDC) support

[5] 链接:https://pan.baidu.com/s/1TlvK57Wf4jhK6ixKnAEqug  提取码:35c1

[6] MDK Version 5 (keil.com)

[7] Keil MDK µVision 5 下载安装及破解教程 - 吴川斌的博客 (mr-wu.cn)

[8] MDK v4 Legacy Support (keil.com)

[9] https://blog.csdn.net/LEON1741/article/details/72846434

[10] https://github.com/pyocd/pyOCD


恭喜ID[飞翔的猫咪]获看雪安卓应用安全能力认证高级安全工程师!!

最后于 2021-9-18 17:12 被fengzhidian编辑 ,原因: 改了格式
收藏
点赞6
打赏
分享
最新回复 (8)
雪    币: 666
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
0llydbg 活跃值 2021-9-18 23:08
2
0
学习学习, 我也想做一个, 不过我是想自己画ob的板子
雪    币: 2417
活跃值: 活跃值 (1280)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 活跃值 2 2021-9-18 23:43
3
0
0llydbg 学习学习, 我也想做一个, 不过我是想自己画ob的板子
最小系统就可以,注意usb口要接到单片机的usb io口上。usb驱动电路做好,接俩led我觉得就够了
雪    币: 666
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
0llydbg 活跃值 2021-9-19 07:32
4
0
我主要是想熟悉一下pads, 另外我想加上wifi或者蓝牙
雪    币: 2417
活跃值: 活跃值 (1280)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 活跃值 2 2021-9-19 09:43
5
0
0llydbg 我主要是想熟悉一下pads, 另外我想加上wifi或者蓝牙[em_89]
可以可以
雪    币: 2552
活跃值: 活跃值 (191)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
星雪鸢尾 活跃值 2021-9-26 19:58
6
0
请问 DAPLINK 有没有对标 JLINK v9 的版本,最好也是用F205做主控的?
雪    币: 2417
活跃值: 活跃值 (1280)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 活跃值 2 2021-10-8 13:13
7
0
星雪鸢尾 请问 DAPLINK 有没有对标 JLINK v9 的版本,最好也是用F205做主控的?
具体不太了解:)
雪    币: 202
活跃值: 活跃值 (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seraphsun 活跃值 2022-3-1 22:35
8
0
请问 你是怎么让JLINK commander 识别DAPLink的?
我这里提示连接不上
SEGGER J-Link Commander V7.60e (Compiled Jan 20 2022 11:16:43)
DLL version V7.60e, compiled Jan 20 2022 11:15:28
Connecting to J-Link via USB...FAILED: Cannot connect to J-Link.
J-Link>
雪    币: 2417
活跃值: 活跃值 (1280)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 活跃值 2 2022-3-7 15:47
9
0
seraphsun 请问 你是怎么让JLINK commander 识别DAPLink的? 我这里提示连接不上 SEGGER J-Link Commander V7.60e (Compiled Jan 20 2022 ...
我记得是先使用J-Flash软件连接的时候,选择了DAP,然后在使用commander连接的时候自动给识别了。因为这么干也没出国啥幺蛾子,所以就没深入研究软件细节,哈哈。
游客
登录 | 注册 方可回帖
返回