【标签】硬件交互
【标题】 【硬件交互】DAP Sampler —— 用几十块钱的 DAP-Link 做出万元 JTrace 才有的高速变量采样示波器
【正文】
大家好!![]()
![]()
![]()
我是一个嵌入式行业的从业者,在工作中我经常需要观察 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可以做到高频采样但是波形断续 |
因此我一直想开发一个工具
,它可以通过JTAG/SWD口将MCU的内存里面的变量读取到PC端进行显示,并且也支持PC端直接修改MCU RAM内的变量值。
然而很遗憾我不会上位机开发,所以这个想法一直被搁置了……直到Trae的出现
,让我又重新燃起了性趣!于是乎DAP Sampler出现了!
1. Demo 简介
-
是什么: DAP Sampler 是一款基于 CMSIS-DAP v2 协议的桌面端变量采样示波器,通过几十元钱的 DAP-Link 仿真器即可对单片机的内存变量进行高速、连续、非侵入式(不需要移植驱动代码到工程里面,只要MCU支持JTAG/SWD即可使用)的实时采样与波形可视化,并且支持通过DAP Sampler 上位机对MCU内存里面的变量值进行修改。
面向谁: 嵌入式软件开发人员、电赛队员、单片机爱好者——任何需要在真实硬件上观察 MCU 变量随时间变化的人。
主要功能:
-
ELF/DWARF 自动解析:加载固件 ELF 即自动列出所有全局/静态变量(含 struct 成员、数组元素),勾选即采样,无需手填地址
-
1–75kHz 连续变量值采样:双线程流水线 + 无锁环形缓冲区,最多 8 通道并行,波形 100% 保真无降采样。SWD时钟设置为10M的情况下4字节的单变量采样能达到15khz,如果用50M的SWD采样速率可以更快(4字节单变量采样50、60khz应该没问题,1字节的可以更快)。
-
变量值修改:可以在不烧录固件的情况下对MCU的RAM的变量值进行修改
-
Watch 面板实时改值:表格中编辑 Value 回车即写入 MCU,与采样读取合并为一条 DAP_Transfer,无需停止采集
-
双光标 ΔT/ΔV 测量 + 每通道独立 Y轴 Offset/Y轴 Scale 变换
-
支持CLI调用:Dap Sampler支持cli调用,可以直接让AI调用抓取MCU内存里面变量的变化,补齐AI在嵌入式领域调试的能力!!

-
以上所有功能都不需要移植任何驱动代码到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可以做到高频采样但是波形断续 因此我一直想开发一个工具
,它可以通过JTAG/SWD口将MCU的内存里面的变量读取到PC端进行显示,并且也支持PC端直接修改MCU RAM内的变量值。然而很遗憾我不会上位机开发,所以这个想法一直被搁置了……直到Trae的出现
,让我又重新燃起了性趣!于是乎DAP Sampler出现了! -
想解决的问题:在不移植第三方工具驱动代码的情况下,没有一个简单且底成本的软件示波器方案,没有一个可以不通过IDE debug就对MCU内变量值进行修改的方法;嵌入式调试时,很多时候我们不是要看一个变量的瞬时值,而是要看它随时间的变化趋势。这就需要连续的波形,而不是离散的打印。串口示波器靠缓存后打印来实现"高频",但波形是断续的,捕捉不到连续的动态过程;而能做连续高频采样的 JTrace 又贵到让人望而却步。并且还需要对变量值进行修改,而这个功能jscope、串口示波器都不具备。
-
为什么做这个方向:我发现一个被忽视的事实:几乎每个嵌入式开发者手边都有的 DAP-Link,其实只要支持 CMSIS-DAP v2 Bulk 传输,理论上完全有能力做高速内存采样——只是没人把这条链路打通做成一个好用的工具。
于是问题就变成:**能不能用 DAP-Link 复现 JTrace + JScope 的体验并且支持变量修改?**而刚好AI让我具备了去实现这个想法的能力
3. Demo 体验地址
- b站展示视频:【Trae AI创造力大赛】DAP Sampler软件示波器 - 拳打SEGGER Jscope脚踢NXP Freemaster https://www.bilibili.com/video/BV1koT76kEKw/?share_source=copy_web&vd_source=116467561b8ab68e323a2ccd6042f9b3
- github地址:https://github.com/1910965995/Dap-Sampler
- 评委体验路径:“github上获取工具 → 连接 DAP-Link → 打开 ELF 自动列出变量 → 勾选 y要观测的变量 → 选择 5kHz 采样并启动 → 在 Watch 面板修改变量值 → 对波形进行缩放/偏移 → 用光标测 ΔT/Δchx value”
- 理论上ARM的cotex-M系列芯片都支持使用这个工具,目前已在STM32F103C8T6(ARM Cortex-M3)、AC7840(ARM Cortex-M4F)的核心板上跑通。
4. TRAE 实践过程
-
379800920524010:8d7eeffe1e4549f3f56749d57f9e5e76_6a400202966461ad35832b3d.6a400202966461ad35832b40.6a400202966461ad35832b3e:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 01:01:54)
-
379800920524010:83b4df44b2188ecee2757ebafc997c6f_6a400202966461ad35832b3d.6a401462966461ad35832c90.6a401462966461ad35832c8e:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 02:20:18)
-
379800920524010:444f556df9353fc1276088ce04e215e0_6a400202966461ad35832b3d.6a401615966461ad35832cef.6a401615966461ad35832ced:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 02:27:33)
-
379800920524010:b260cd3d065a9b873b196ca6017a967c_6a400202966461ad35832b3d.6a409abaceaf175ca53bbdd6.6a409abaceaf175ca53bbdd4:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 11:53:30)
-
379800920524010:ef1831d6b12294d21714aaa2b1769a2d_6a400202966461ad35832b3d.6a409eb9ceaf175ca53bbe7e.6a409eb9ceaf175ca53bbe7c:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 12:10:33)
-
379800920524010:13e61d8024e4a98f2a7e3511dc152255_6a400202966461ad35832b3d.6a410ce09e5fb4528d7c0c83.6a410ce09e5fb4528d7c0c81:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 20:00:32)
-
379800920524010:49c8d1ca9e5bb9637c5978de1371d930_6a400202966461ad35832b3d.6a4114989e5fb4528d7c0d2b.6a4114989e5fb4528d7c0d29:TRAE Work CN.0.1.25.no_sid.no_ppe.T(2026/6/28 20:33:28)
5. 对应的报名审核通过的帖子链接: 【硬件交互】Embedded Scope - 基于JTAG的嵌入式变量示波器
当前方案实现上跟报名时有点差距,因为不需要写FLASH等操作所以就没用到Openocd,直接通过 USB 向 DAP-Link 发送 CMSIS-DAP 命令,DAP-Link 再通过 SWD 总线直接读目标 MCU 的内存,这样的方案更简单且速度更快。



















