作者:Felix (Haro 协作整理)
Agent DSViewer Logic Analyzer 是我把逻辑分析仪接入 agent 工作流的一次整理:它把 DSView、DreamSourceLab DSLogic 和 sigrok-cli 封装成一个更稳定的工具层,让 agent 可以按固定步骤完成环境检查、设备扫描、短采集、协议解码和结果记录。
这个项目不是替代 DSView。DSView 仍然适合作为 GUI 波形查看工具;项目里真正适合自动化的是 sigrok-cli,再通过 Python runner / MCP 工具暴露给 agent 使用。这样做的好处是:采集命令、输出路径、超时、格式选择、UART 解码参数都能被稳定复用,而不是每次现场手写一遍命令。
项目里包含什么
当前仓库包含几层内容:
src/dsview_logic/:Python runner 和 MCP 工具实现。server.py:不启动 MCP 时也能直接运行的本地入口。SKILL.md:给 agent 阅读的能力说明,重点写“能做什么”和“什么时候用”。INSTALL.md:依赖、安装、构建、MCP 启动和 skill 注册方法。skills/logic-analyzer-agent/:顶层规划 skill,负责测量目标、通道映射、采样率判断和结果解释。skills/dsview-logic-analyzer/:执行层 skill,负责 DSView/sigrok 的具体采集与解码流程。
我刻意没有把 DSView 上游源码、固件 blob 或厂商大包塞进仓库。这个仓库使用 Apache-2.0 授权,但授权范围只覆盖仓库内自有代码和文档;DSView、sigrok、libsigrok、协议解码器和固件仍然遵循各自上游许可证。
实现的核心能力
当前工具层实现了 7 个主要函数:
logic_analyzer_status:检查 DSView、sigrok-cli、固件目录、DreamSourceLab udev rule 和默认输出目录。logic_analyzer_scan:执行sigrok-cli --scan,确认 USB 逻辑分析仪是否被识别。logic_analyzer_list_decoders:列出 sigrok 支持的协议解码器,可按关键字过滤。logic_analyzer_capture:执行有边界采集,支持 driver、channels、samplerate、samples/time、trigger、输出格式和超时。logic_analyzer_decode_file:对已保存采集文件执行通用 sigrok 协议解码。logic_analyzer_uart_decode_file:对 UART 做规范化解码,默认 115200 8N1,并返回重建后的文本。logic_analyzer_dsview_info:读取 DSView GUI 的路径、版本和 help 信息。
在 SKILL.md 里,我还补了 DSLogic Plus 的采集模式说明。例如 Stream 模式下常见组合包括 20MHz x16ch、25MHz x12ch、50MHz x6ch、100MHz x3ch;Buffer 模式下包括 100MHz x16ch、200MHz x8ch、400MHz x4ch。这类信息对 agent 很重要,因为高采样率通常意味着要减少通道数,不能不看模式限制就盲目要求全通道高采样。
采集测试怎么做
本地采集验证的第一步是状态检查:
python3 server.py --list-tools
python3 server.py logic_analyzer_status
这一步已经能识别本机的 DSView 1.3.2 和 sigrok-cli 0.7.2,也能确认 sigrok firmware 目录和 DreamSourceLab udev rule 是否存在。
第二步是设备扫描:
python3 server.py logic_analyzer_scan
只有扫描确认设备存在后,才进入采集。GPIO 波形验证采用了保守的短采集策略:低采样率、少量样本、先保存成 CSV,便于脚本检查边沿间隔。示例 payload 类似这样:
{
"driver": "dreamsourcelab-dslogic",
"channels": "0,1,2,3",
"config": {
"samplerate": "1m"
},
"samples": 1000,
"output_format": "csv",
"output_file": "gpio-smoke.csv"
}
这轮实测基线来自 HPM5300EVK / HPM5361 的 GPIO 验证:PB08、PA27、PA29、PA25 输出分频波形,DSLogic 采集后可以看到约 1/2/4/8 ms 的相邻边沿间隔。这里有一个容易误判的点:如果是 50% 占空比方波,相邻边沿间隔是完整周期的一半;DSView GUI 里读到的 full period 可能显示为 2/4/8/16 ms,两者并不矛盾。
解码测试怎么做
协议解码测试先从 UART 做起,因为它最适合验证“采集文件 → 协议解码 → 文本结果”这条链路。
实测方法是:把 HPM5300EVK 的 UART2 TX 接到 DSLogic D0,串口参数为 115200 8N1,采样率使用 1 MHz。采集时同时保留两种文件:CSV 用于基本波形检查,.sr / srzip session 文件用于 sigrok 解码。
解码 payload 类似这样:
{
"input_file": "deliverables/logic-analyzer/uart.sr",
"channel": "0",
"baudrate": 115200,
"data_bits": 8,
"parity": "none",
"stop_bits": "1",
"direction": "rx"
}
logic_analyzer_uart_decode_file 会生成 sigrok UART decoder 参数,并把输出 token 重新拼成文本。实测中已经解出重复文本,例如:
HPM5300EVK UART2 PB08 115200 8N1 seq=N
这说明采集文件、sigrok UART decoder、通道参数、波特率和文本重建流程都已经跑通。后续如果要扩展到 I2C、SPI、CAN 或 PWM,路径也类似:先用 logic_analyzer_list_decoders 确认 decoder,再保存 .sr 文件,最后用通用 logic_analyzer_decode_file 执行解码。
为什么要把它做成 agent 能力
逻辑分析仪不是纯软件工具,它依赖接线、探针、通道、采样率、设备模式和被测固件状态。把它接进 agent 工作流后,真正有价值的不只是“能跑命令”,而是把硬件验证过程拆成可复用的判断步骤:
- 先确认工具链和 USB 设备,而不是直接假设采集可用。
- 先记录通道映射,而不是凭记忆解释波形。
- 先做短采集,再根据结果决定是否提高采样率或减少通道数。
- 报告时同时给出 capture 文件、采样参数、decoder 参数和验证结论。
这类流程沉淀成 skill 之后,后续验证 MCU GPIO、UART、I2C、SPI 或其他数字信号时,就不用每次重新发明流程。agent 负责判断下一步该测什么,MCP/runner 负责稳定执行底层采集和解码。
项目地址
项目已经公开在 GitHub:
https://github.com/felixfinal/agent-dsviewer-logic-analyzer
目前它更像一个可用的硬件工具能力包,而不是一个大而全的 GUI 项目。后续可以继续补 I2C/SPI/CAN 的专用 decode helper、更多 DSLogic 型号的模式表,以及更完整的采集文件自动分析脚本。