ai embedded debugging

    AI 辅助嵌入式调试:用 MCP 让 Claude 直接读写你的串口

    如何用 Model Context Protocol 让 AI 助手读取设备日志、通过 UART 发送指令:适合做什么、不能做什么、安全规则,以及为此做的一个开源串口调试助手。

    ·XTELL 工程团队

    助手能读你的代码,却看不到设备在说什么

    大多数固件调试都是同一个循环:烧录、复位、看串口输出、猜原因、改代码、再烧录。AI 编程助手现在已经很擅长循环的中间部分:读源码、分析堆栈、提出修改。它自己做不到的,是看见设备。日志在你桌上的终端窗口里,你只能把片段复制粘贴到对话里。

    慢就慢在复制粘贴这一步。日志很长,有价值的那一行往往不在最后,一个要复位三次才复现的故障,靠人工转述很折磨。让助手直接访问串口,就去掉了这个中间环节:它可以自己打开串口、复位目标、抓取启动过程,并只读它需要的那几行。

    Model Context Protocol 带来了什么

    Model Context Protocol(MCP)是一个开放标准,让 AI 助手能调用另一个程序提供的工具。助手看到一份带说明和参数的工具清单,自己决定何时调用,并以文本形式拿到结果。Claude Desktop、Claude Code、Cursor 等多种客户端都已支持。

    串口 MCP 服务把串口变成几个工具:列出本机串口、按波特率连接、发送数据(文本或十六进制)、读取已收到的数据,以及停止。本文其余部分,讲的是怎么让这几个小工具在真实的嵌入式工作中有用,而不只是演示。

    为什么我们做了一个带窗口的版本

    串口 MCP 服务已经有不少,而且大多是无界面的:助手去操作串口,你什么也看不到。我们为自己的实验台做了一个相反设计的:它本身是完整的图形化串口助手,MCP 服务只是驱动同一个窗口的另一种方式。

    这带来三个实际好处。

    • 你和助手看的是同一份东西。助手工作时,日志就在你屏幕上滚动。如果它用错了波特率、输出一片乱码,你当场就能看到,而不是事后才读到汇报。
    • 你随时可以接管。自己敲命令、改过滤条件、暂停滚动,再把控制权交还。没有什么藏在后台进程里。
    • 多设备、多窗口。每个窗口可以命名,实验台上网关板和传感器节点各占一个串口也一目了然,助手按名字指定串口。

    一次调试是什么样

    下面是一个示意性的过程,不是某个真实项目的记录,只是为了说明交互的形态。

    你对助手说:「板子每隔几秒重启一次。连上 COM3,115200,抓大约 30 秒,告诉我原因。」助手列出串口、连接、读取接收缓冲。它看到启动横幅反复出现,找到每次重复之前的那一行,并报告:每个周期都以同一条 panic 信息和同一个回溯地址结束,之前还有一条来自电源管理的低电压告警。接着它读取相关源码,把回溯地址对应到函数,并提示可能是电源还没稳定就启动了射频。

    有价值的不是助手猜对了,它也可能猜错。有价值的是抓取、分诊、与代码交叉比对这几件事发生在同一个地方,几秒钟完成,证据还留在你的屏幕上供你核对。

    实际使用中的四个关键点

    过滤让助手的上下文保持精简

    一个每秒打印几千行的设备,会在助手到达故障之前就耗尽模型的上下文。实时过滤(按子串或正则)让助手只读有用的行:错误、某个子系统的标签、某一次事务。在我们的工具里,即使窗口忙得来不及绘制,过滤也会检查每一条新到的行,所以突发数据里的错误不会漏掉。

    时间范围把日志变成调查

    每一行都带毫秒级时间戳,读取工具支持起止时间。「给我复位前的五秒」是一个精确的请求,而不是翻遍整个缓冲。对偶发故障来说,这就是一份有用的抓取与一堆杂草之间的差别。

    保存成文件作为证据

    长时间的老化测试和罕见故障,需要一份在会话结束后依然存在的记录。工具可以在助手工作的同时把接收到的数据持续写入文件,便于附在工单里或与下一次运行对比。

    数据突发不能卡死窗口

    这一点是我们吃过亏才学到的。第一版在每一行到达时都立刻画到屏幕上,设备突然发来大量密集数据时,窗口就停止响应了。修复方法是:每个周期只限时解析,把一整批一次性画出,超出绘制能力的部分仍保存在缓冲区和文件里,并在界面上明确提示有多少行未绘制。调试工具偏偏在设备出问题的时候卡死,比没有工具更糟。我们现在用每秒数兆字节的合成突发数据来测试它。

    适合做什么,不适合做什么

    它适合:启动日志分诊、检查与 AT 指令模块的交互、确认协议交互符合规范、对照源码读 panic 转储、以及需要「找」而不是「盯」的长时间抓取。

    它不能替代仪器。UART 日志只是固件选择打印的内容,看不到塌陷的电源轨、边沿过缓的信号,或被异常外设拉低的总线。这些需要示波器、逻辑分析仪或调试器,助手操作不了。把助手当作「固件选择输出的证据的快速阅读者」,硬件问题仍然交给硬件工具。

    我们遵守的安全规则

    • 助手可以发送任意字节。不要把它接到一条意外指令就可能造成伤害的硬件上:带电的电机驱动、加热器、任何接受擦除命令的引导程序。
    • 先只读。先让它观察;确认环境可信之后再允许发送,并在它发送时盯着窗口。
    • 别让密钥进日志。设备日志有时会打印密钥、令牌或凭据,助手读到的内容都会进入它的上下文。
    • 动手之前先核实。把助手的诊断当作附有证据的假设,而不是结论。

    试试看

    这个工具叫 xtell-serial,采用 Apache 2.0 许可证开源,运行在 Windows 上,有中英文界面。源码、可执行文件和配置指南都在 GitHub 上。

    接入 Claude Code,只需注册一次 MCP 可执行文件:

    claude mcp add xtell-serial C:\path\to\xtell-serial-mcp.exe

    Claude Desktop、Cursor 等客户端在各自的 MCP 配置里填入同一个可执行文件,仓库里有各客户端的说明。然后让助手连上一个串口,读读板子打印了什么。

    它在我们的工作中的位置

    我们做固件、Linux BSP 与驱动,以及它们下面的硬件,串口控制台几乎是每块板子上我们打开的第一个窗口。如果你正在点亮新设计、追一个偶发故障,或者需要一支能同时覆盖板子、固件和云端的团队,请看我们的固件开发服务,以及这篇嵌入式软件测试指南。

    需要专业服务?

    联系我们获取定制化解决方案和报价