查看原文
其他

DAP-LINK研究笔记-用STM32单片机替换J-LINK

fengzhidian 看雪学苑 2022-07-01


本文为看雪论坛精华文章

看雪论坛作者ID:fengzhidian



一、 DAP-LINK简介


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

图 1 淘宝上的DAP-LINK


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

1.使用开源的代码编译生成DAP-LINK固件。
2.使用J-LINK烧写DAP-LINK的固件到开发板中。
3.验证DAP-LINK固件在开发板中的可用性。


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



二、硬件信息

实验主机:笔记本电脑
开发板:STM32F103C8T6开发板[1](用来承载DAP-LINK)
开发板:STM32F103VET6开发板[2](用来验证DAP-LINK可用)
辅助调试器:J-LINK调试器[3]


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

图 2 J-LINK调试器示意图


图 3 STM32F103C8T6开发板



三、软件信息

源码:x893 DAP-LINK源码[4]
实验主机:Win10
编译环境:ARM MDK 5.14[5]



四、制作过程


制作过程部分主要描述编译环境构建、编译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接口



五、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调试单片机



六、总结


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


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


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



七、参考链接


[1] STM32F103C8T6 开发板 STM32最小系统核心板 STM32单片机学习评估-淘宝网 (taobao.com)(https://item.taobao.com/item.htm?spm=a230r.1.14.47.43bf1f92MKZWHC&id=527982658127&ns=1&abbucket=10#detail)


[2] STM32F103VET6核心板最小系统板STM32 ARM开发板Cortex-m3-淘宝网 (taobao.com)(https://item.taobao.com/item.htm?spm=a230r.1.14.56.25704beeYXlvyZ&id=575401251589&ns=1&abbucket=3#detail)


[3] 仿真器J-LINK下载器ARM单片机STM开发板烧录器V10JLINKV9-tmall.com天猫(https://detail.tmall.com/item.htm?spm=a230r.1.14.33.1d9a4269wgn6tN&id=637526274397&ns=1&abbucket=10)


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


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


[6] MDK Version 5 (keil.com)(https://www2.keil.com/mdk5)


[7] Keil MDK µVision 5 下载安装及破解教程 - 吴川斌的博客 (mr-wu.cn)(https://www.mr-wu.cn/keil-mdk-uvision-5-crack/)


[8] MDK v4 Legacy Support (keil.com)(https://www2.keil.com/mdk5/legacy)


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


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





 



看雪ID:fengzhidian

https://bbs.pediy.com/user-home-871632.htm

*本文由看雪论坛 fengzhidian 原创,转载请注明来自看雪社区



# 往期推荐

1.羊城杯部分逆向wp

2. CVE-2021-26708 利用四字节释放特定地址,修改内存

3.网刃杯逆向wp

4. 一次针对反fart的加壳apk的脱壳经历

5.CVE-2012-0003 winmm.dll MIDI文件堆溢出漏洞分析及利用

6. 驱动级VT技术EPT实现无痕HOOK保护指定进程----VT EPT原理解析和进阶



公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存