如何用 Model Context Protocol 让 AI 助手读取设备日志、通过 UART 发送指令:适合做什么、不能做什么、安全规则,以及为此做的一个开源串口调试助手。
大多数固件调试都是同一个循环:烧录、复位、看串口输出、猜原因、改代码、再烧录。AI 编程助手现在已经很擅长循环的中间部分:读源码、分析堆栈、提出修改。它自己做不到的,是看见设备。日志在你桌上的终端窗口里,你只能把片段复制粘贴到对话里。
慢就慢在复制粘贴这一步。日志很长,有价值的那一行往往不在最后,一个要复位三次才复现的故障,靠人工转述很折磨。让助手直接访问串口,就去掉了这个中间环节:它可以自己打开串口、复位目标、抓取启动过程,并只读它需要的那几行。
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 与驱动,以及它们下面的硬件,串口控制台几乎是每块板子上我们打开的第一个窗口。如果你正在点亮新设计、追一个偶发故障,或者需要一支能同时覆盖板子、固件和云端的团队,请看我们的固件开发服务,以及这篇嵌入式软件测试指南。
联系我们获取定制化解决方案和报价