AI + Zephyr + Matter:构建、烧录与串口调试的可控闭环
AI 可以把代码修改、构建、串口日志分析和回归测试连接成闭环,但“能执行命令”不等于“可以无限自动操作硬件”。可靠流程需要固定工程边界、明确设备身份、把烧录设为授权门,并让每轮结论都对应可复核证据。
闭环不是无限重试
推荐状态机:
1 | 理解需求 |
每一轮都应有时间、尝试次数和停止条件。没有新证据时反复编译烧录,只会消耗硬件寿命并制造更多状态差异。
第一层:把构建入口固定下来
不要让 AI 每次临时拼接长命令。产品仓应提供单一包装入口:
1 | scripts/build.sh |
包装脚本负责解析:
- SDK 与应用路径;
- Board 和 Flash 配置;
- Matter 环境激活;
- west build 参数;
- 输出目录和日志;
- 预期制品;
- 退出码和失败阶段。
AI 首先运行 --dry-run,确认解析结果,再执行构建。full build 通过后记录:
1 | source commit: |
制品存在不等于本次构建成功,必须同时验证退出码和修改时间。
第二层:建立硬件注册表
不要通过“第一个 ttyUSB”猜目标设备。维护一个不含秘密的本地硬件映射:
1 | boards: |
映射文件应留在本地或受控测试环境,不在公开日志中暴露唯一设备标识。
AI 在烧录前必须输出并确认:
1 | 目标板: |
默认使用普通 west flash,不要把全片擦除设为自动默认动作。擦除可能清除配网、校准和测试状态,需要单独授权。
第三层:把烧录设置为动作门
建议权限模型:
1 | build / inspect / hash 自动允许 |
如果没有授权,AI 应停在“构建已通过、制品已准备、等待烧录确认”,而不是绕过边界寻找其他写入方式。
第四层:只读串口采集
pySerial 可以列出串口并提供 miniterm。用于自动分析时,更推荐只读采集脚本:
1 | from datetime import datetime, timedelta |
采集器不调用 write(),避免测试脚本意外发送命令。需要交互测试时,应使用独立、白名单化的命令层。
日志保存前应移除:
- 密钥、证书和配网凭据;
- QR、PIN 和 verifier;
- Thread Dataset;
- 唯一设备地址;
- 内部服务器和仓库信息。
第五层:用成功锚点驱动判断
不要让 AI 只搜索 error。为每个测试定义阶段:
1 | boot |
测试结果应输出:
1 | 最后成功阶段: |
这样能够防止把底层发送成功误判成上层业务成功。
第六层:修复后的回归
每次修复至少经过:
- 格式和静态检查;
- full build;
- 制品哈希记录;
- 目标场景复测;
- 一项相邻正常场景;
- 重启后再次验证;
- 工作树和 diff 审查。
复杂项目可以进一步接入 Zephyr Twister。Twister 支持 hardware map、串口、flash timeout 和自定义 flash command,可以把多块测试板映射到明确平台与端口。
一个可执行的控制器
控制器本身只负责状态推进:
1 | if source_changed: |
实际修改和判断仍应保留 Git diff、构建日志和串口证据,不能只保存 AI 的自然语言总结。
安全停止条件
出现以下任一情况应停止自动循环:
- 目标板或串口身份不确定;
- 当前制品哈希与批准的不一致;
- 构建连续重复失败但没有新证据;
- 烧录器提示解锁、恢复或全片擦除;
- 串口出现可能包含安全材料的数据;
- 设备表现出异常复位或供电问题;
- 操作范围扩展到 SDK、工厂区或其他产品。
自动化的目标是缩短证据闭环,不是取消工程授权和硬件安全边界。
参考资料: