版本协议

MIT License

标签
专业版
#第11届立创电赛#CH32V003自动固件测试系统

创建时间:2个月前

504 3

描述

<p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">* 1、项目功能介绍</h3> <hr> <p style="line-height:1.8;">该项目使用CH32V305CCT6控制矩阵模拟开关芯片将CH32V003目标芯片的任意管脚映射到任意CH32V305CCT6的PA0-PA7管脚,或者外接排针脚。同时板载CH32V305FBP6作为WCH-LinkE可以烧录调试目标芯片。该项目可实现自动化测试,自动化开发,远程开发测试等功能。<br><br>软件代码库位于 <a href="https://github.com/DeqingSun/CH32V003-Automatic-Test-Tool" target="_blank">https://github.com/DeqingSun/CH32V003-Automatic-Test-Tool</a></p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">在自动化测试模式下,该项目使用树莓派Raspberry Pi Zero 2 W作为上位机,执行self-hosted runner(自托管运行程序)客户端。这样当新代码被推送到Github时,Github将自动触发GitHub Actions,在云端执行器中编译程序,然后自动转交给树莓派调用Python脚本进行自动化烧录,并以测试脚本测试功能是否正常,并反馈至Github。这样可以用真实硬件测试代码的正确性。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">在自动化开发模式下,测试板可以直接连接至开发计算机。CH32V305CCT6可以接收串口调整矩阵模拟开关的映射方式,控制PA0-PA7管脚的输入输出,并进行简单的数字和模拟信号抓取。CH32V305FBP6可以对目标芯片进行烧录,调试,和电源控制。因此对CH32V003目标芯片的所有开发操作均可以通过计算机指令下达。因此开发者可以使用Agent进行代码开发,而且Agent可以自行进行烧录与测试,实现自动化开发与迭代,无需人工干预。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">由于该系统的所有开发操作均可以通过计算机指令下达,远程操作开发板也是完全可以的。其他的外设芯片,执行器等可以连接到矩阵模拟开关芯片的多余管脚,以实现外设到目标芯片的自由连接。该系统可以放在办公室里实现远程开发,也可以添加摄像头,示波器等专业设备,实现类似Renesas Lab on the Cloud这种远程硬件开发平台的功能。目前简化版的远程硬件开发平台可以在 <a href="https://ch32v003.thinkcreate.us/" target="_blank">https://ch32v003.thinkcreate.us/</a> 访问。  </p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*2、项目属性</h3> <hr> <p style="line-height:1.8;">该项目为原创,上一个版本的工程为 CH552 自动测试架 (自动化测试Ch55xduino框架是否正常)。目前版本为简易起见,使用编译框架为Charles Lohr的ch32fun框架。</p> <h3 style="line-height:1.8;"> </h3> <h3 style="line-height:1.8;">* 3、开源协议</h3> <hr> <p style="line-height:1.8;">本项目全部开源,协议继承ch32fun的MIT license。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;"><strong><span style="color:#0093e6;">请在竞赛阶段填写 ↓</span></strong></p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*4、硬件部分</h3> <hr> <p style="line-height:1.8;">上位机通过一个MicroUSB连接器连接主板。其中USB连接到一颗CH334F集线器芯片,将一路USB转换为四路。同时CH334F的PWREN管脚连接了PMOS控制电源,上位机可以发送指令将CH334F后面的电路全部下电上电,实现硬重启。在Raspberry Pi Zero 2 W上,可以执行以下指令控制电源:</p> <p style="line-height:1.8;"><code>sudo uhubctl -a 0 -f -l 1-1</code><br><code>sudo uhubctl -a 1 -f -l 1-1</code></p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">CH334F分出的四路USB,其中两路没有使用,可以通过排针引出。在使用的两路中,一路连接一颗CH32V305CCT6作为主控芯片。这颗主控芯片控制矩阵开关,并且可以操作GPIO实现模拟数字输入输出,并能实现简易的逻辑分析仪和示波器功能。选取CH32V305CCT6的原因是它的内存比较大,可以划分出192KB RAM,方便存储捕捉信号。另外PA0~PA7全部引出,管脚编号连续方便DMA操作,同时PA0~PA7均有ADC能力,PA4和PA5甚至有DAC能力,方便调试。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">另一路USB连接一颗CH32V305FBP6芯片,这是官方WCH-LinkE的同款芯片,可以直接运行官方WCH-LinkE固件,实现芯片烧录和调试。也可以控制目标芯片的5V和3.3V电源。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">两颗CH446Q矩阵模拟开关芯片组成了32*8的切换矩阵。其中Y路的8条线接入CH32V305CCT6的PA0~PA7,X的32条线覆盖了SSOP20测试座的全部20个管脚,调试器的5个管脚,和外部的7个排针。矩阵模拟开关由USB的5V以及电荷泵产生的的-5V联合供电,连接电阻约52Ohm。如果需要把目标芯片的管脚连接到调试器或者外部排针,可以经过Y路中转。此时电阻约100Ohm,仍然可以接受。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">目标芯片安装在SSOP20测试座上,可以测试CH32V003F4P6,也可以测试SSOP20的其他芯片。SSOP20测试座两边将全部引脚、VCC和GND引出,可以用跳线帽将目标芯片的VCC和GND脚直接连接到电源上。同时测试座下方有三脚排针,可以使用跳线帽选择目标芯片使用3.3V或者5V供电。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">板载两颗CH32V305的烧录需要借助外置WCH-LinkE。其中CH32V305CCT6可以直接使用芯片右边的排针烧录。烧录CH32V305FBP6时用户可以操作让矩阵模拟开关将CH32V305FBP6的SWCLK和SWDIO连接到X0、X1排针上,然后使用外置WCH-LinkE烧录。<br><br></p> <p style="line-height:1.8;">更多烧录信息可参考代码库里的boardPrepare.md,也可使用boardPrepare.py(Mac系统)自动烧录。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/21fc4e1a198a4d53a7d94fc92356af3c.jpg" alt="21fc4e1a198a4d53a7d94fc92356af3c.jpg"></p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*5、软件部分</h3> <hr> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">板上软件的核心部分是CH32V305CCT6的固件,位于Github仓库的controllerCode文件夹内,这里我贴一下Cursor Agent总结的固件功能:<br><br></p> <p>这是 CH32V305 测试板控制器固件,用于 CH32V003 自动测试工具。它通过 USB 串口接收上位机发来的文本命令,并控制测试硬件与被测芯片交互。</p> <p>核心功能:</p> <ol> <li> <p>模拟开关矩阵(CH446Q)<br>用 <code>C</code>/<code>c</code> 命令接通或断开 X(0–31)与 Y(0–7)通道,实现信号路由,例如把 SWCLK/SWDIO 接到板载 WCH-LinkE,或给被测板供电、接线。</p> </li> <li> <p>GPIO 读写(PA0–PA7)</p> <ul> <li><code>R</code>:读数字电平</li> <li><code>W</code>:写数字输出</li> <li><code>A</code>:读模拟量(ADC)</li> <li><code>w</code>:写模拟输出(PWM/DAC,含 PA4/PA5)</li> </ul> </li> <li> <p>逻辑分析仪<br><code>L</code> 按指定采样率和样本数启动采集,<code>l</code> 轮询并上传数字波形数据(约 128KB 缓冲)。</p> </li> <li> <p>模拟采集<br><code>M</code> 按采样率、样本数和通道掩码启动多通道 ADC 采集,<code>m</code> 轮询并上传数据。</p> </li> <li> <p>系统初始化<br><code>I</code> 复位矩阵,并将 PA0–PA7 设为输入,同时处理 DAC 相关引脚模式。</p> </li> </ol> <p>整体定位: 固件是测试夹具的“桥接层”——PC 发串口命令,它控制开关矩阵接线、读写被测引脚,并做逻辑/模拟波形采集,从而自动化测试 CH32V003 等目标芯片。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">至于自动测试部分,自动测试代码放在我自己的ch32fun分叉,test_on_hardware分支里。如果test_on_hardware分支有commit,或者经过批准的PR,自动测试将会自动执行。</p> <p style="line-height:1.8;">如果您不熟悉Github action,这里简要介绍一下:</p> <p style="line-height:1.8;">GitHub Actions 是 GitHub 内置的自动化平台。你可以在仓库里写一份配置文件(通常是 <code>.github/workflows/*.yml</code>),告诉 GitHub:在什么事件发生时(例如 push、PR、手动触发),在什么机器上(云端或你自己的电脑),自动执行哪些步骤(编译、测试、打包、发布等)。</p> <p style="line-height:1.8;">可以把它理解成:挂在 Git 仓库上的自动化脚本 + 定时/事件触发器 + 远程执行环境。</p> <p style="line-height:1.8;">没有 Actions 时,开发者通常要本地手动:拉代码 → 编译 → 烧录 → 测试。<br>有了 Actions 后,每次提交代码,CI 可以自动重复这些步骤,减少“在我电脑上能跑”的问题。</p> <p>但是Github提供的云端 runner 只是一台普通虚拟机,接不到你桌上的 CH32V305 测试板和 CH32V003。<br>所以硬件测试必须跑在一台长期在线、USB 已接好测试硬件的电脑上,这台机器注册为 self-hosted runner 后,就能在 push 或手动触发时自动执行测试。</p> <p>另外,该工程的 workflow 只在 push 或 手动触发 时跑硬件测试,不在 PR 上跑——这是为了避免攻击者的提交恶意的 PR 代码在硬件的测试机上执行。</p> <p> </p> <p style="line-height:1.8;">其中action代码在此。<a href="https://github.com/DeqingSun/ch32fun/blob/test_on_hardware/.github/workflows/build.yml" target="_blank">https://github.com/DeqingSun/ch32fun/blob/test_on_hardware/.github/workflows/build.yml</a></p> <p style="line-height:1.8;">action执行情况可以在 <a href="https://github.com/DeqingSun/ch32fun/actions" target="_blank">https://github.com/DeqingSun/ch32fun/actions</a> 这里看到。</p> <p style="line-height:1.8;">Cursor总结如下:</p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/397f5dabfccf47c4b1851951052c8f44.png" alt="397f5dabfccf47c4b1851951052c8f44.png"></p> <p>ch32fun 的 GitHub Actions 在云端编译仓库中所有示例工程,并将生成的 <code>.bin</code> 固件打包为 artifact。随后,运行在自托管 runner 上的硬件测试任务会下载这些固件,并调用本仓库 <code>autoTestCode/selfhost_runner_test.py</code> 作为统一入口:脚本按固件文件名自动匹配 <code>testScripts/</code> 下同名 Python 测试(例如 <code>blink.bin</code> 对应 <code>blink.py</code>),依次完成烧录与验证。</p> <p>整个测试链路以 CH32V305 测试板为核心:<code>autoTestCode</code> 通过 USB 串口向测试板固件发送命令,控制 CH446Q 模拟开关矩阵完成信号路由,并可调用板载逻辑分析仪、ADC 采集等功能;烧录时则通过矩阵将板载 WCH-LinkE 的 SWD 接到被测 CH32V003,配合 <code>minichlink</code> 完成固件写入。每个测试脚本在真实硬件上检查对应示例的行为(如 GPIO 翻转时序、ADC 读数、PWM/WS2812 波形等),从而把 ch32fun 的示例编译与硬件回归测试串联成一条自动化 CI 流水线。</p> <p> </p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/c24aa897d6eb4dce86228aa41ea5e33d.png" alt="c24aa897d6eb4dce86228aa41ea5e33d.png"></p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">自动测试配置好后,无论我们对代码做任何改动,自动测试板子都会自动按照测试脚本测试一下功能。如果代码修改导致程序出现问题,GitHub Actions 会自动失败报错,并提醒开发人员。即使开发人员手头没有板子,也不影响程序测试。</p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*6、使用Agent实现AI自动化开发</h3> <hr> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">首先这里放一张黄老板在NVIDIA GTC Taipei 2026的Keynote 截图:</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/1d70660f87e5454eb52a2641ffc0b9ea.png" alt="1d70660f87e5454eb52a2641ffc0b9ea.png"></p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">Agent = LLM + 执行框架(Harness)<br>Agent的核心采用 "观察(Observe)→ 推理(Reason)→ 行动(Act)→ 更新上下文(Context)" 的智能体闭环(Agent Loop)。</p> <p style="line-height:1.8;">一般的AI工具对于“推理(Reason)→ 行动(Act)→ 更新上下文(Context)”这一步骤都没有问题。但是如果如果整套工具链不能完全自动化,比如需要用户去点击编译烧录按钮、观察仪器、再输入观察结果,那么整个闭环将被“观察”这一步严重阻塞,速度会很慢。</p> <p style="line-height:1.8;">本项目的测试板本身具有简易的逻辑分析仪和模拟信号捕捉。虽然性能简易,但是能提供全套的测试代码供Agent调用,因此可以让整个开发流程闭环。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">我们让Agent帮我们点个WS2812的灯。我找了一个8颗RGBW的WS2812灯条。把它插在连接矩阵的X5接口上,这样万一Agent需要使用别的IO,它可以自行映射。</p> <p style="line-height:1.8;">为方便演示,这里示例的提示词经过反复优化,实际操作中可以随时指正Agent的操作方向。</p> <p style="line-height:1.8;">这里示例采用Cursor。首先打开CH32FUN框架工程,打开Agent窗口,切换模式为Plan,输入提示词:</p> <p style="line-height:1.8;"> </p> <p>请帮我用ch32fun建立一个驱动ws2812的代码。我使用的是CH32V003-Automatic-Test-Tool板子,信息在</p> <p>@/Users/deqinguser/Documents/GitHub/CH32V003-Automatic-Test-Tool</p> <p>我在X5矩阵连接脚上连接了一个8颗LED的WS2812 RGBW灯条,颜色顺序GRBW,WS2812频率为800K。</p> <p>请生成一个将LED全部点为红色代码,不使用DMA,只使用IO操作和nop延迟(频率很高),IO可以使用PD0。然后生成一个python测试代码,使用CH32V003-Automatic-Test-Tool的逻辑分析仪捕捉输出信号,烧录测试迭代确认无误。</p> <p>编译器在@/Users/deqinguser/Library/Arduino15/packages/WCH/tools/riscv-none-embed-gcc/ide_2.2.0_trimmed/bin 位置。本测试无需使用runner,本地测试即可。CH32V003-Automatic-Test-Tool已连接至USB口。</p> <p>生成的python代码放在CH32V003-Automatic-Test-Tool仓库中,autoTestCode/testScripts/ws2812_gpio_rgbw.py。</p> <p>固件代码放examples/ws2812_gpio_rgbw</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">Plan模式下Agent不会修改代码,只会阅读现有参考资料和代码,并输出操作计划。同时,Agent如果有疑问,也会反过来询问用户具体信息。执行Plan后,几分钟我们得到了操作计划。</p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/d87ee5bd2d974c75abdcbba832dd3e24.png" alt="d87ee5bd2d974c75abdcbba832dd3e24.png"></p> <p style="line-height:1.8;">此时我们可以阅读计划,检查是否有问题。如果有,直接在plan模式下向Agent提出以便修正计划。如果操作人员有不能理解的部分,也可以向Agent询问。如果计划看起来没问题,我们点击Build开始执行计划。</p> <p style="line-height:1.8;">此时由于Agent理解Agent具有全部烧录,测试的Python工具。只要Agent有调用命令行的权限,Agent就可以自行编写单片机代码,Python测试代码,并进行测试。</p> <p style="line-height:1.8;">在Build的过程中,Agent会自动编写代码,烧录程序到目标CH32V003上,然后用逻辑分析仪捕捉数字信号,并进行分析。在我的测试过程中,Agent自行编写了代码,测试发现失败后,自行提出假设,分布验证和测试提出的假设,最终在约3分钟后经过3此迭代并完成了测试。</p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/36efbd05eb0f45e29ba26d4d63d88180.png" alt="36efbd05eb0f45e29ba26d4d63d88180.png"></p> <p style="line-height:1.8;">此时LED灯条也确实亮了,证明开发成功。</p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/4f5256a2087245a2b31a25158ea11e35.jpg" alt="4f5256a2087245a2b31a25158ea11e35.jpg"></p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*7、远程开发测试</h3> <hr> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">由于本项目可以完整实现烧录、矩阵连接、GPIO控制、逻辑分析仪等功能。它可以作为一个简易的远程开发平台。用户可以远程烧录固件,并进行测试。</p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/c491591a7b434c678f45e26167012b30.png" alt="c491591a7b434c678f45e26167012b30.png"></p> <p style="line-height:1.8;">该项目网络控制的代码在remoteAccessCode文件夹中。所有操作都可以通过浏览器完成,后端的Python脚本实现硬件交互。目前一台测试板挂在 <a href="https://ch32v003.thinkcreate.us/" target="_blank">https://ch32v003.thinkcreate.us/</a> 欢迎测试。</p> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">其中右上角的Init matrix可以复位连接矩阵和主控IO口,左上角有4个标签页:</p> <p style="line-height:1.8;">Matrix页可以使用开关矩阵建立和断开连接。其中16x8的矩阵的8个Y连接在主控芯片的PA0~7管脚上,X连接了全部CH32V003的IO口。虽然X也连接到了外部的排针。但是排针是空的,目前连接意义不大。CH32V003的IO连接到主控的IO后,就可以读取CH32V003的电平,或者向CH32V003输出高低电平。</p> <p style="line-height:1.8;">GPIO页可以操作PA0~7,可以进行数字读,数字写,模拟读,模拟写(PA4~PA5使用DAC,其他IO使用PWM)。</p> <p style="line-height:1.8;">Capture页可以进行数字抓取,作为简易逻辑分析仪。也可以选定模拟通道进行模拟抓取,作为简易示波器。</p> <p style="line-height:1.8;">Firmware页可以上传bin固件。如果用户没有自己的固件,也可以用示例的固件烧录。示例固件分别是让PD0以1ms、100ms、1000ms高低变换。用户可以把PD0连接到PA0~7的一个脚上,然后进行数字读取,或者用逻辑分析仪看波形。</p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*8、BOM清单</h3> <hr> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;">电路图对应的PCBA<br>树莓派Zero 2 W<br>micro USB OTG 双头线<br>3D打印底座<br>2.5mm自攻螺丝<br>Micro USB电源</p> <p style="line-height:1.8;"> </p> <h3 style="line-height:1.8;">*9、大赛LOGO验证</h3> <hr> <p style="line-height:1.8;"> </p> <p style="line-height:1.8;"><img src="https://image.lceda.cn/oshwhub/pullImage/ec432b84506044c59bdf0d8c9b788bb1.jpg" alt="ec432b84506044c59bdf0d8c9b788bb1.jpg"></p> <p style="line-height:1.8;"> </p>
  • 立创电赛:《CH32V003自动固件测试系统》-3_远程开发测试.mp4

  • 立创电赛:《CH32V003自动固件测试系统》-1_自动化编译测试.mp4

  • 立创电赛:《CH32V003自动固件测试系统》-2_AI_agent自动化开发.mp4

文档

BOM

附件

附件名 下载
立创电赛:《CH32V003自动固件测试系统》-3_远程开发测试.mp4
立创电赛:《CH32V003自动固件测试系统》-1_自动化编译测试.mp4
立创电赛:《CH32V003自动固件测试系统》-2_AI_agent自动化开发.mp4

成员

评论(2)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
立创电赛 回复
<p>需要上传验证视频哦</p>
dq_sun 回复
<p>你好,视频已上传,请问是否符合要求?</p>
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow