让 AI 真正参与 WB2 开发:WorkBuddy + WSL + Windows,实现代码→编译→烧录→验证闭环 #36
djy876
started this conversation in
Show and tell(技术分享)
Replies: 2 comments
|
nice~ |
0 replies
|
看来你在烧录的时候踩了超级多的坑 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
让 AI 真正参与 WB2 开发:WorkBuddy + WSL + Windows,实现代码→编译→烧录→验证闭环
摘要
这是一篇个人技术分享,不是官方教程。
本文要回答的核心问题不是"怎么烧录 WB2",而是:
文章基于 Ai-Thinker WB2-12F Kit / BL602 的真实实机验证记录,主要包含:
ISP handshake success不等于烧录成功,真正的成功标准是FLASH PASS + VERIFY PASSWB2-FLASH-REPRO-v1.0,把"我这台电脑能烧录"变成"别人也能照着复刻"适合谁:正在用 WB2 / BL602 做小项目、想让 AI 参与嵌入式开发、或者换电脑后烧录环境难以复现的人。
最终效果
先看这套方案打通后的完整链路:
一句话:AI 写完的代码,最终真的烧进了物理芯片并跑起来,全程日志可被 AI 读取和判断。
1. 为什么做这个项目
做 WB2 开发时,常见的痛点有:
所以我希望打通这样一条路:
目标不是做"全自动点一下",而是让 AI 和实体硬件真正连通,把重复、易错、可判定的步骤交给 AI 和脚本,把必须由人完成的物理按键留给用户。
2. 这套方案到底是什么
它由三部分配合而成:
env / build / flash / test / all统一入口,后台烧录 + 自主检测 ISP重要澄清,这套方案不是:
bflb_iot_tool的替代品它只是整个 AI 开发闭环里的**"烧录复刻组件"**。底层真正干活烧录的,仍是官方
bflb_iot_tool;脚本只是把"后台启动、等待 ISP、判读结果"这些易错步骤封装好。3. 整体架构:WorkBuddy + WSL + Windows Git Bash
这里必须把两个环境讲清楚,它们是分工配合的关系。
图 1:整体开发闭环
flowchart TD U[用户提出需求] --> W[WorkBuddy] W -->|读取 / 修改| SRC[WB2 工程代码] SRC -->|WorkBuddy 执行编译| SDK[Ai-Thinker-WB2 SDK / 工具链] SDK -->|产出| BIN["<PROJECT>.flash.bin"] BIN --> WB2[wb2 : Windows Git Bash] WB2 -->|后台启动| BFLB[bflb_iot_tool.exe] BFLB -->|Windows COM| CH340[CH340] CH340 --> KIT[WB2-12F Kit / BL602] KIT -->|BootROM ISP 握手| H[握手成功] H --> FLASH[FLASH + VERIFY] FLASH --> APP[APP 运行验证] APP -->|串口日志| W图里的关键点:左侧是"AI 开发"(代码、编译、出固件),右侧是"实际硬件烧录"(CH340 → WB2-12F → BL602 ISP)。中间靠
.flash.bin和 wb2 脚本把它们连通。图 2:开发环境 vs 烧录环境的配合
两个环境不必相同,可以分开:
为什么两个环境可以配合? 因为编译与烧录是解耦的:
make、gcc、RISC-V 工具链都是 Linux 原生)。.flash.bin,谁烧都一样。4. WorkBuddy 如何参与 WB2 开发
WorkBuddy 不只是"生成代码的聊天窗口",它是一个能执行的 AI:可以读文件、改文件、跑命令、读日志、做判断。
在 WB2 开发中,它承担的步骤包括(按真实流程):
WorkBuddy 具体能做的:
.flash.bin产出。FLASH PASS、VERIFY PASS。但要说清楚边界:WorkBuddy 无法替你物理按下按键,也无法绕过"BL602 是否真的进入了 ISP"这一客观前提。需要人手的环节(按住 BURN、按 EN),仍然由人完成。AI 能做的,是把需要判断的部分自动化并给出明确反馈。
5. WB2 烧录为什么只需要一次 EN
先看硬件事实:
GPIO8/PROG),左为 【EN】(仅复位)。GPIO8(BOOT)为低。EN只会复位芯片,不会去控制GPIO8。所以只有在你按住 BURN(把 BOOT 拉低)的同时按 EN,芯片复位后才落到 ISP 下载态。这解释了为什么:
所以流程是:
一个容易踩的误区(务必看):
换句话说,脚本看的是芯片有没有进 ISP 这个结果,而不是去猜你按键的电气状态。这从机制上就避免了"假装检测按键成功、实际芯片根本没进下载态"的假象。
6. 从 ISP 到 FLASH、VERIFY、APP:如何判断真正成功
这是新手最需要建立的观念:整个流程有好几个独立的成功点,前一个成功不代表下一个成功。
核心结论:
7. WB2-FLASH-REPRO-v1.0 复刻包
7.1 它是什么
一句话:
7.2 它有什么用
如果只是在自己电脑上跑通,那是"我的电脑能烧录"。但换一台电脑:
就可能无法复现。
所以把下面这些都整理进一个包:
目标就一句:
7.3 目录结构
逐项说明:
WB2_*变量指向你实际的 SDK/buildenv/Python,不包含任何本机硬编码。bflb_iot_tool、分区/设备树/boot2 等资源去哪拿、SHA256 是多少。不把整个 SDK 打包进来(体积太大,且属官方发布物)。7.4 依赖怎么分类
依赖被分成四类(详见包内 DEPENDENCY-INVENTORY.md):
/e/、用户名、BUSID、COM 号D 类如何解决? 复刻包不把
Administrator、/e/、COM4等写死。wb2 脚本内部把这些当作"可被环境变量覆盖的探测默认值"。目标机上通过WB2_SDK_ROOT、WB2_BUILDENV、WB2_PYTHON、WB2_COM等指向真实路径即可,不需要改脚本本身。8. 从零开始使用(普通用户操作顺序)
pyserial的 Python(wb2 串口枚举依赖)。release_bl_iot_sdk_1.6.40-11-gf4c8dac01为本文实测版本,可作参考)。flash_tool/chips/bl602/下(官方自带)。WB2-FLASH-REPRO-v1.0.zip。scripts/加入 PATH,并按需export WB2_*指向真实路径。wb2 env .看环境是否就绪。wb2 build .。wb2 flash .。[OK] 已检测到 BL602 ISP。支持的命令(wb2 真实支持,无虚构)
[dir]缺省或为.时取当前目录。核心约定:不硬编码 BUSID / COM / 固件名 / 项目名,全都动态识别或从 Makefile 推导。9. 实际验证结果与踩坑经验
9.1 实测验证结果(实机,非仿真)
关键实机参数
1a86:7523applications/get-started/blink关于"两个 EN"的澄清
两个 EN 分别属于:
它们不是 ISP 要按两次 EN。
9.2 成功烧录日志(示意图,取自真实实机日志)
配合 wb2 的交互输出,烧录窗口大致长这样:
重点提示:从
握手成功到[OK] 请松开 BURN之间,必须一直保持 BURN 按住,直到FLASH PASS + VERIFY PASS同时出现。中途松开会导致固件只传一部分就失败。9.3 APP 运行验证
烧录完成后,松开 BURN → 短按一次 EN,让芯片重启进新固件。然后在 115200 串口上应能持续看到 blink 示例的输出:
这代表固件不仅写进去了、校验对了,而且真的在硬件上跑起来了(APP PASS)。
9.4 踩坑经验(真实踩过)
坑 1:同步调用烧录工具,AI 无法处理长 ISP 等待。
一开始是"前台同步"调用烧录命令。结果板子在 App 态时,烧录工具会在启动后约 1 秒内就
shake hand fail退出,根本没留给人按 BURN + EN 的窗口,必然失败。坑 2:ISP 握手成功后误杀烧录子进程,固件只传一部分。
曾有个 bug:握手成功后就
kill烧录进程,结果把正在下载的bflb_iot_tool误杀(rc=143),固件传到8160/37184就中断了。[All Success];只有超时(未进 ISP)才允许清理自己的子进程,并且要用wait回收、不产生僵尸进程。坑 3:
ISP handshake success不代表烧录成功。FLASH PASS + VERIFY PASS为准;判定要看日志里的[All Success]、Verify success等真实标记,而不是只看握手成功。坑 4:Manifest 自引用导致自身 SHA256 无法稳定记录。
文件清单如果记录了自己,那么清单一写入、自身字节就变,记录的自身哈希永远对不上。
FILE-MANIFEST.txt只记录其余 10 个交付文件,结果10/10 MATCH、NO SELF-REFERENCE。10. 后续:让 AI 开发 WB2 多传感器
本文 v1.0 的实机闭环以 blink 示例为基准(验证了"代码→编译→烧录→FLASH/VERIFY→APP"这条链路是通的)。
在此基础上,后续计划引入更多传感器与模块作为 AI 驱动开发的对象,例如:
设想的未来形态是形成这样一条数据闭环:
最终沉淀为:
也就是让 AI 不只写一次代码,而是能根据实机跑出来的数据反复迭代,真正"看着硬件调程序"。
下载与版本信息
版本
WB2-FLASH-REPRO-v1.0WB2 FLASH STABLE BASELINE v1.0SHA256(文件数字指纹)
什么是 SHA256? 可以把它理解为文件的数字指纹:
当前交付物指纹:
wb2/wb2.STABLE-v1.0f9e370ca106e9f1882c638d72505d88b325f75b491d7a2c3dc1e1c812e2d6506wb2_serial.py4159fa7e5725df8f8a38613cd77b2f65d7a6d65c7475c1f25859e486b009d9b7WB2-FLASH-REPRO-v1.0.zip648f764ca4561500130c8c01b5ce13d3e10a03b5ce0f49b0949931f853693f42文件清单(Manifest):
10/10 MATCH、NO SELF-REFERENCE(清单本身不入列,避免"记录自己"造成的哈希不稳定)。已知限制
如实列出当前方案的边界:
WB2_COM显式指定。ISP handshake success不等于FLASH PASS。FLASH PASS + VERIFY PASS才是烧录成功。APP PASS属于额外的运行验证。常见问题(FAQ)
Q1:为什么不能全自动按 EN?
EN(复位)在普通运行态按一次,只会让芯片重启进普通程序,因为
GPIO8(BOOT)在复位瞬间不为低。要进 ISP,必须在 BOOT 拉低(按住 BURN)的同时复位。所以这一步目前由人完成。Q2:为什么还需要按住 BURN?
因为 BL602 靠
GPIO8(BOOT)在复位瞬间的电平决定进 ISP 还是进 App。按住 BURN = 把 BOOT 拉低 = 芯片复位后才进入下载态。这是芯片/BootROM 的设计,绕不开。Q3:为什么 ISP 握手成功后还要继续等?
握手成功只是确认"进 ISP 了"。后面还有固件传输、写 flash、回读校验。所以要继续等
FLASH PASS和VERIFY PASS。Q4:为什么 handshake success 不能直接算烧录成功?
握手 ≠ 写入。握手只说明芯片在线、可以通信。固件有没有写对,必须靠 VERIFY(回读对比)来证明。
Q5:为什么我的 COM 号和别人不一样?
COM 号由每台电脑的操作系统按 USB 枚举顺序分配,天然不同。所以脚本不写死 COM,而是按 CH340 的 VID:PID 动态探测。
Q6:为什么 WSL 没有直接参与最终烧录?
在当前验证的机器上,稳定烧录走的是 Windows COM 通道,WSL 未参与且不可用。WSL 更适合当开发/编译环境,而不是当前已验证的烧录前提。
Q7:为什么别人不能直接拿 ZIP 就烧录?
ZIP 里只有脚本和说明,不含官方 SDK、工具链、烧录工具这些大体积发布物。目标机需先按依赖说明装好 Git Bash、Python+pyserial,并从官方获取 SDK/buildenv,才能跑起来。
Q8:FLASH PASS 了但程序没输出,怎么办?
先确认烧录后是否松开 BURN 并按了一次 EN 让芯片退出 ISP、重启进 App。再看串口工具波特率是否 115200、COM 选对没有。若还是没输出,检查程序本身是否有串口打印逻辑。
Q9:如何判断自己拿到的 ZIP 没被修改?
对
WB2-FLASH-REPRO-v1.0.zip算 SHA256,与上文648f764c…比对;解压后再核对FILE-MANIFEST.txt(10 项应全部 MATCH)。不一致说明包被改动或下载不完整。免责声明
WB2-FLASH-REPRO-v1.0是个人整理的自动化与复刻方案,不代表安信可官方发布。复刻文件
FILE-MANIFEST.txt
WB2-FLASH-REPRO-v1.0.zip
WB2-FLASH-REPRO-v1.0-DELIVERY.md
完 — 欢迎讨论。有问题请在评论区提出,我会基于实机进一步补充验证。
All reactions