【硬件交互】DAP Sampler —— 用几十块钱的 DAP-Link 做出万元 JTrace 才有的高速变量采样示波器

【标签】硬件交互

【标题】 【硬件交互】DAP Sampler —— 用几十块钱的 DAP-Link 做出万元 JTrace 才有的高速变量采样示波器

【正文】

大家好!:waving_hand::waving_hand::waving_hand:

我是一个嵌入式行业的从业者,在工作中我经常需要观察 MCU 里某个变量随时间的变化——PID 输出是否震荡、滤波器是否收敛、PWM 占空比是否平滑、状态机标志位何时翻转。这时IDE软件debug功能 的 Watch 窗口(只看瞬时值)就不够用了 :sweat_smile: ,因为我需要的是连续的波形。还有一个痛点就是不烧录固件的情况下要想对MCU内存里面的变量值进行修改的话,要么需要通过IDE软件进行debug,要么需要移植XCP驱动或者移植NXP Freemaster这类工具的驱动。

但现有方案总有这样那样的痛点:

方案 采样率 成本 核心问题
JScope + JLink ~1kHz JLink 几百元 高速场景不够用,只能观测变量,无法修改
JScope + JTrace ~100kHz JTrace 1万+元 成本太高,普通玩家用不起,只能观测变量,无法修改
串口示波器 受限 占用 UART、要改固件加打印;高频只能缓存后打印,波形断续不连续,只能观测变量,无法修改
NXP Freemaster 不限 需移植驱动代码,工作量大;oscilloscope 采样率也有限,recorder可以做到高频采样但是波形断续

因此我一直想开发一个工具 :thinking: ,它可以通过JTAG/SWD口将MCU的内存里面的变量读取到PC端进行显示,并且也支持PC端直接修改MCU RAM内的变量值。

然而很遗憾我不会上位机开发,所以这个想法一直被搁置了……直到Trae的出现 :star_struck: ,让我又重新燃起了性趣!于是乎DAP Sampler出现了!

1. Demo 简介

  • 是什么: DAP Sampler 是一款基于 CMSIS-DAP v2 协议的桌面端变量采样示波器,通过几十元钱的 DAP-Link 仿真器即可对单片机的内存变量进行高速、连续、非侵入式(不需要移植驱动代码到工程里面,只要MCU支持JTAG/SWD即可使用)的实时采样与波形可视化,并且支持通过DAP Sampler 上位机对MCU内存里面的变量值进行修改。

    面向谁: 嵌入式软件开发人员、电赛队员、单片机爱好者——任何需要在真实硬件上观察 MCU 变量随时间变化的人。

    主要功能:

    1. ELF/DWARF 自动解析:加载固件 ELF 即自动列出所有全局/静态变量(含 struct 成员、数组元素),勾选即采样,无需手填地址

    2. 1–75kHz 连续变量值采样:双线程流水线 + 无锁环形缓冲区,最多 8 通道并行,波形 100% 保真无降采样。SWD时钟设置为10M的情况下4字节的单变量采样能达到15khz,如果用50M的SWD采样速率可以更快(4字节单变量采样50、60khz应该没问题,1字节的可以更快)。

    3. 变量值修改:可以在不烧录固件的情况下对MCU的RAM的变量值进行修改

    4. Watch 面板实时改值:表格中编辑 Value 回车即写入 MCU,与采样读取合并为一条 DAP_Transfer,无需停止采集

    5. 双光标 ΔT/ΔV 测量 + 每通道独立 Y轴 Offset/Y轴 Scale 变换

    6. 支持CLI调用:Dap Sampler支持cli调用,可以直接让AI调用抓取MCU内存里面变量的变化,补齐AI在嵌入式领域调试的能力!!:smiling_face_with_sunglasses: :smiling_face_with_sunglasses:

    7. 以上所有功能都不需要移植任何驱动代码到MCU里面,只要MCU支持JTAG/SWD即可

主界面:

导入elf文件直接解析工程中的所有全局/静态变量,并且支持搜索框搜索:

波形显示 - Line:

波形显示 - Point:

支持示波器光标功能:

支持通道显示与关闭:

支持被选择的通道高亮:

支持通道缩放:

支持通道偏移:

当前展示用到的硬件:

1、杰发AC7840核心板

2、淘宝上60块钱的FanX Tek的DAP Link

2. Demo 创作思路

  • 做嵌入式开发、打电赛,经常需要观察 MCU 里某个变量随时间的变化——PID 输出是否震荡、滤波器是否收敛、PWM 占空比是否平滑、状态机标志位何时翻转。这时IDE软件debug功能 的 Watch 窗口(只看瞬时值)就不够用了,我们需要的是连续的波形。还有一个痛点就是不烧录固件的情况下要想对MCU内存里面的变量值进行修改的话,要么需要通过IDE软件进行debug,要么需要移植XCP驱动或者移植NXP Freemaster这类工具的驱动。

    但现有方案总有这样那样的痛点:

    方案 采样率 成本 核心问题
    JScope + JLink ~1kHz JLink 几百元 高速场景不够用,只能观测变量,无法修改
    JScope + JTrace ~100kHz JTrace 1万+元 成本太高,普通玩家用不起,只能观测变量,无法修改
    串口示波器 受限 占用 UART、要改固件加打印;高频只能缓存后打印,波形断续不连续,只能观测变量,无法修改
    NXP Freemaster 不限 需移植驱动代码,工作量大;oscilloscope 采样率也有限,recorder可以做到高频采样但是波形断续

    因此我一直想开发一个工具 :thinking:,它可以通过JTAG/SWD口将MCU的内存里面的变量读取到PC端进行显示,并且也支持PC端直接修改MCU RAM内的变量值。

    然而很遗憾我不会上位机开发,所以这个想法一直被搁置了……直到Trae的出现 :star_struck: ,让我又重新燃起了性趣!于是乎DAP Sampler出现了!

  • 想解决的问题:在不移植第三方工具驱动代码的情况下,没有一个简单且底成本的软件示波器方案,没有一个可以不通过IDE debug就对MCU内变量值进行修改的方法;嵌入式调试时,很多时候我们不是要看一个变量的瞬时值,而是要看它随时间的变化趋势。这就需要连续的波形,而不是离散的打印。串口示波器靠缓存后打印来实现"高频",但波形是断续的,捕捉不到连续的动态过程;而能做连续高频采样的 JTrace 又贵到让人望而却步。并且还需要对变量值进行修改,而这个功能jscope、串口示波器都不具备。

  • 为什么做这个方向:我发现一个被忽视的事实:几乎每个嵌入式开发者手边都有的 DAP-Link,其实只要支持 CMSIS-DAP v2 Bulk 传输,理论上完全有能力做高速内存采样——只是没人把这条链路打通做成一个好用的工具。

    于是问题就变成:**能不能用 DAP-Link 复现 JTrace + JScope 的体验并且支持变量修改?**而刚好AI让我具备了去实现这个想法的能力

3. Demo 体验地址

4. TRAE 实践过程

5. 对应的报名审核通过的帖子链接: 【硬件交互】Embedded Scope - 基于JTAG的嵌入式变量示波器

当前方案实现上跟报名时有点差距,因为不需要写FLASH等操作所以就没用到Openocd,直接通过 USB 向 DAP-Link 发送 CMSIS-DAP 命令,DAP-Link 再通过 SWD 总线直接读目标 MCU 的内存,这样的方案更简单且速度更快。

66666 :rose:

1 个赞

我看完这个项目后,比较喜欢你们把“打开 ELF 自动解析变量”和“DAP-Link 连续采样波形”打通了,因为嵌入式调试里最麻烦的往往不是看某个瞬时值,而是不用改固件就持续观察 PID、滤波器或 PWM 这类变量的时间变化。

小建议:可以在帖子开头补一个更短的评委体验路径,比如“连接 DAP-Link → 打开 ELF 自动列出变量 → 勾选 s_sin/s_cos → 选择 5kHz 采样并启动 → 用光标测 ΔT/ΔV 或在 Watch 面板改值”,这样评委能更快看懂它从低成本硬件到实时变量示波器的完整闭环。

我们也在生活娱乐赛道做了《衍境》,偏互动影游创作系统,欢迎来互评:【生活娱乐赛道】衍境 Demo:EvoMap 驱动的互动影游智能体创作系统

2 个赞

很好的建议,感谢支持!!:saluting_face:


支持老铁

6666

2 个赞

这么厉害啊哥(虽然看不懂)我都有点焦虑了专业人士都在参赛 :smiling_face_with_tear: 能麻烦您互相投票回复支持一下吗** @Liuuuu9

2 个赞

互相投票,:folded_hands:

2 个赞

相互投票支持下; 【学习工作赛道】进化学园 · 自我进化式沉浸式学习时间管理器

2 个赞