站内搜索
更多
#第11届立创电赛#CH32V003自动固件测试系统
专业版

#第11届立创电赛#CH32V003自动固件测试系统

511
0
0
2

简介

该项目使用矩阵模拟开关芯片将CH32V003目标芯片的任意管脚映射到任意主控芯片管脚,或者外接排针脚。可实现自动化测试,自动化开发,远程开发测试等功能。

简介:该项目使用矩阵模拟开关芯片将CH32V003目标芯片的任意管脚映射到任意主控芯片管脚,或者外接排针脚。可实现自动化测试,自动化开发,远程开发测试等功能。
第11届立创电子设计大赛

开源协议

MIT License

创建时间:2026-05-18 08:49:54更新时间:2026-07-16 10:00:48

描述

 

* 1、项目功能介绍


该项目使用CH32V305CCT6控制矩阵模拟开关芯片将CH32V003目标芯片的任意管脚映射到任意CH32V305CCT6的PA0-PA7管脚,或者外接排针脚。同时板载CH32V305FBP6作为WCH-LinkE可以烧录调试目标芯片。该项目可实现自动化测试,自动化开发,远程开发测试等功能。

软件代码库位于 https://github.com/DeqingSun/CH32V003-Automatic-Test-Tool

 

在自动化测试模式下,该项目使用树莓派Raspberry Pi Zero 2 W作为上位机,执行self-hosted runner(自托管运行程序)客户端。这样当新代码被推送到Github时,Github将自动触发GitHub Actions,在云端执行器中编译程序,然后自动转交给树莓派调用Python脚本进行自动化烧录,并以测试脚本测试功能是否正常,并反馈至Github。这样可以用真实硬件测试代码的正确性。

 

在自动化开发模式下,测试板可以直接连接至开发计算机。CH32V305CCT6可以接收串口调整矩阵模拟开关的映射方式,控制PA0-PA7管脚的输入输出,并进行简单的数字和模拟信号抓取。CH32V305FBP6可以对目标芯片进行烧录,调试,和电源控制。因此对CH32V003目标芯片的所有开发操作均可以通过计算机指令下达。因此开发者可以使用Agent进行代码开发,而且Agent可以自行进行烧录与测试,实现自动化开发与迭代,无需人工干预。

 

由于该系统的所有开发操作均可以通过计算机指令下达,远程操作开发板也是完全可以的。其他的外设芯片,执行器等可以连接到矩阵模拟开关芯片的多余管脚,以实现外设到目标芯片的自由连接。该系统可以放在办公室里实现远程开发,也可以添加摄像头,示波器等专业设备,实现类似Renesas Lab on the Cloud这种远程硬件开发平台的功能。目前简化版的远程硬件开发平台可以在 https://ch32v003.thinkcreate.us/ 访问。  

 

*2、项目属性


该项目为原创,上一个版本的工程为 CH552 自动测试架 (自动化测试Ch55xduino框架是否正常)。目前版本为简易起见,使用编译框架为Charles Lohr的ch32fun框架。

 

* 3、开源协议


本项目全部开源,协议继承ch32fun的MIT license。

 

请在竞赛阶段填写 ↓

 

*4、硬件部分


上位机通过一个MicroUSB连接器连接主板。其中USB连接到一颗CH334F集线器芯片,将一路USB转换为四路。同时CH334F的PWREN管脚连接了PMOS控制电源,上位机可以发送指令将CH334F后面的电路全部下电上电,实现硬重启。在Raspberry Pi Zero 2 W上,可以执行以下指令控制电源:

sudo uhubctl -a 0 -f -l 1-1
sudo uhubctl -a 1 -f -l 1-1

 

CH334F分出的四路USB,其中两路没有使用,可以通过排针引出。在使用的两路中,一路连接一颗CH32V305CCT6作为主控芯片。这颗主控芯片控制矩阵开关,并且可以操作GPIO实现模拟数字输入输出,并能实现简易的逻辑分析仪和示波器功能。选取CH32V305CCT6的原因是它的内存比较大,可以划分出192KB RAM,方便存储捕捉信号。另外PA0~PA7全部引出,管脚编号连续方便DMA操作,同时PA0~PA7均有ADC能力,PA4和PA5甚至有DAC能力,方便调试。

 

另一路USB连接一颗CH32V305FBP6芯片,这是官方WCH-LinkE的同款芯片,可以直接运行官方WCH-LinkE固件,实现芯片烧录和调试。也可以控制目标芯片的5V和3.3V电源。

 

两颗CH446Q矩阵模拟开关芯片组成了32*8的切换矩阵。其中Y路的8条线接入CH32V305CCT6的PA0~PA7,X的32条线覆盖了SSOP20测试座的全部20个管脚,调试器的5个管脚,和外部的7个排针。矩阵模拟开关由USB的5V以及电荷泵产生的的-5V联合供电,连接电阻约52Ohm。如果需要把目标芯片的管脚连接到调试器或者外部排针,可以经过Y路中转。此时电阻约100Ohm,仍然可以接受。

 

目标芯片安装在SSOP20测试座上,可以测试CH32V003F4P6,也可以测试SSOP20的其他芯片。SSOP20测试座两边将全部引脚、VCC和GND引出,可以用跳线帽将目标芯片的VCC和GND脚直接连接到电源上。同时测试座下方有三脚排针,可以使用跳线帽选择目标芯片使用3.3V或者5V供电。

 

板载两颗CH32V305的烧录需要借助外置WCH-LinkE。其中CH32V305CCT6可以直接使用芯片右边的排针烧录。烧录CH32V305FBP6时用户可以操作让矩阵模拟开关将CH32V305FBP6的SWCLK和SWDIO连接到X0、X1排针上,然后使用外置WCH-LinkE烧录。

更多烧录信息可参考代码库里的boardPrepare.md,也可使用boardPrepare.py(Mac系统)自动烧录。

 

 

*5、软件部分


 

板上软件的核心部分是CH32V305CCT6的固件,位于Github仓库的controllerCode文件夹内,这里我贴一下Cursor Agent总结的固件功能:

这是 CH32V305 测试板控制器固件,用于 CH32V003 自动测试工具。它通过 USB 串口接收上位机发来的文本命令,并控制测试硬件与被测芯片交互。

核心功能:

  1. 模拟开关矩阵(CH446Q)
    用 C/c 命令接通或断开 X(0–31)与 Y(0–7)通道,实现信号路由,例如把 SWCLK/SWDIO 接到板载 WCH-LinkE,或给被测板供电、接线。

  2. GPIO 读写(PA0–PA7)

    • R:读数字电平
    • W:写数字输出
    • A:读模拟量(ADC)
    • w:写模拟输出(PWM/DAC,含 PA4/PA5)
  3. 逻辑分析仪
    L 按指定采样率和样本数启动采集,l 轮询并上传数字波形数据(约 128KB 缓冲)。

  4. 模拟采集
    M 按采样率、样本数和通道掩码启动多通道 ADC 采集,m 轮询并上传数据。

  5. 系统初始化
    I 复位矩阵,并将 PA0–PA7 设为输入,同时处理 DAC 相关引脚模式。

整体定位: 固件是测试夹具的“桥接层”——PC 发串口命令,它控制开关矩阵接线、读写被测引脚,并做逻辑/模拟波形采集,从而自动化测试 CH32V003 等目标芯片。

 

至于自动测试部分,自动测试代码放在我自己的ch32fun分叉,test_on_hardware分支里。如果test_on_hardware分支有commit,或者经过批准的PR,自动测试将会自动执行。

如果您不熟悉Github action,这里简要介绍一下:

GitHub Actions 是 GitHub 内置的自动化平台。你可以在仓库里写一份配置文件(通常是 .github/workflows/*.yml),告诉 GitHub:在什么事件发生时(例如 push、PR、手动触发),在什么机器上(云端或你自己的电脑),自动执行哪些步骤(编译、测试、打包、发布等)。

可以把它理解成:挂在 Git 仓库上的自动化脚本 + 定时/事件触发器 + 远程执行环境。

没有 Actions 时,开发者通常要本地手动:拉代码 → 编译 → 烧录 → 测试。
有了 Actions 后,每次提交代码,CI 可以自动重复这些步骤,减少“在我电脑上能跑”的问题。

但是Github提供的云端 runner 只是一台普通虚拟机,接不到你桌上的 CH32V305 测试板和 CH32V003。
所以硬件测试必须跑在一台长期在线、USB 已接好测试硬件的电脑上,这台机器注册为 self-hosted runner 后,就能在 push 或手动触发时自动执行测试。

另外,该工程的 workflow 只在 push 或 手动触发 时跑硬件测试,不在 PR 上跑——这是为了避免攻击者的提交恶意的 PR 代码在硬件的测试机上执行。

 

其中action代码在此。https://github.com/DeqingSun/ch32fun/blob/test_on_hardware/.github/workflows/build.yml

action执行情况可以在 https://github.com/DeqingSun/ch32fun/actions 这里看到。

Cursor总结如下:

ch32fun 的 GitHub Actions 在云端编译仓库中所有示例工程,并将生成的 .bin 固件打包为 artifact。随后,运行在自托管 runner 上的硬件测试任务会下载这些固件,并调用本仓库 autoTestCode/selfhost_runner_test.py 作为统一入口:脚本按固件文件名自动匹配 testScripts/ 下同名 Python 测试(例如 blink.bin 对应 blink.py),依次完成烧录与验证。

整个测试链路以 CH32V305 测试板为核心:autoTestCode 通过 USB 串口向测试板固件发送命令,控制 CH446Q 模拟开关矩阵完成信号路由,并可调用板载逻辑分析仪、ADC 采集等功能;烧录时则通过矩阵将板载 WCH-LinkE 的 SWD 接到被测 CH32V003,配合 minichlink 完成固件写入。每个测试脚本在真实硬件上检查对应示例的行为(如 GPIO 翻转时序、ADC 读数、PWM/WS2812 波形等),从而把 ch32fun 的示例编译与硬件回归测试串联成一条自动化 CI 流水线。

 

 

自动测试配置好后,无论我们对代码做任何改动,自动测试板子都会自动按照测试脚本测试一下功能。如果代码修改导致程序出现问题,GitHub Actions 会自动失败报错,并提醒开发人员。即使开发人员手头没有板子,也不影响程序测试。

 

*6、使用Agent实现AI自动化开发


 

首先这里放一张黄老板在NVIDIA GTC Taipei 2026的Keynote 截图:

 

 

Agent = LLM + 执行框架(Harness)
Agent的核心采用 "观察(Observe)→ 推理(Reason)→ 行动(Act)→ 更新上下文(Context)" 的智能体闭环(Agent Loop)。

一般的AI工具对于“推理(Reason)→ 行动(Act)→ 更新上下文(Context)”这一步骤都没有问题。但是如果如果整套工具链不能完全自动化,比如需要用户去点击编译烧录按钮、观察仪器、再输入观察结果,那么整个闭环将被“观察”这一步严重阻塞,速度会很慢。

本项目的测试板本身具有简易的逻辑分析仪和模拟信号捕捉。虽然性能简易,但是能提供全套的测试代码供Agent调用,因此可以让整个开发流程闭环。

 

我们让Agent帮我们点个WS2812的灯。我找了一个8颗RGBW的WS2812灯条。把它插在连接矩阵的X5接口上,这样万一Agent需要使用别的IO,它可以自行映射。

为方便演示,这里示例的提示词经过反复优化,实际操作中可以随时指正Agent的操作方向。

这里示例采用Cursor。首先打开CH32FUN框架工程,打开Agent窗口,切换模式为Plan,输入提示词:

 

请帮我用ch32fun建立一个驱动ws2812的代码。我使用的是CH32V003-Automatic-Test-Tool板子,信息在

@/Users/deqinguser/Documents/GitHub/CH32V003-Automatic-Test-Tool

我在X5矩阵连接脚上连接了一个8颗LED的WS2812 RGBW灯条,颜色顺序GRBW,WS2812频率为800K。

请生成一个将LED全部点为红色代码,不使用DMA,只使用IO操作和nop延迟(频率很高),IO可以使用PD0。然后生成一个python测试代码,使用CH32V003-Automatic-Test-Tool的逻辑分析仪捕捉输出信号,烧录测试迭代确认无误。

编译器在@/Users/deqinguser/Library/Arduino15/packages/WCH/tools/riscv-none-embed-gcc/ide_2.2.0_trimmed/bin 位置。本测试无需使用runner,本地测试即可。CH32V003-Automatic-Test-Tool已连接至USB口。

生成的python代码放在CH32V003-Automatic-Test-Tool仓库中,autoTestCode/testScripts/ws2812_gpio_rgbw.py。

固件代码放examples/ws2812_gpio_rgbw

 

Plan模式下Agent不会修改代码,只会阅读现有参考资料和代码,并输出操作计划。同时,Agent如果有疑问,也会反过来询问用户具体信息。执行Plan后,几分钟我们得到了操作计划。

此时我们可以阅读计划,检查是否有问题。如果有,直接在plan模式下向Agent提出以便修正计划。如果操作人员有不能理解的部分,也可以向Agent询问。如果计划看起来没问题,我们点击Build开始执行计划。

此时由于Agent理解Agent具有全部烧录,测试的Python工具。只要Agent有调用命令行的权限,Agent就可以自行编写单片机代码,Python测试代码,并进行测试。

在Build的过程中,Agent会自动编写代码,烧录程序到目标CH32V003上,然后用逻辑分析仪捕捉数字信号,并进行分析。在我的测试过程中,Agent自行编写了代码,测试发现失败后,自行提出假设,分布验证和测试提出的假设,最终在约3分钟后经过3此迭代并完成了测试。

此时LED灯条也确实亮了,证明开发成功。

 

*7、远程开发测试


 

由于本项目可以完整实现烧录、矩阵连接、GPIO控制、逻辑分析仪等功能。它可以作为一个简易的远程开发平台。用户可以远程烧录固件,并进行测试。

该项目网络控制的代码在remoteAccessCode文件夹中。所有操作都可以通过浏览器完成,后端的Python脚本实现硬件交互。目前一台测试板挂在 https://ch32v003.thinkcreate.us/ 欢迎测试。

 

其中右上角的Init matrix可以复位连接矩阵和主控IO口,左上角有4个标签页:

Matrix页可以使用开关矩阵建立和断开连接。其中16x8的矩阵的8个Y连接在主控芯片的PA0~7管脚上,X连接了全部CH32V003的IO口。虽然X也连接到了外部的排针。但是排针是空的,目前连接意义不大。CH32V003的IO连接到主控的IO后,就可以读取CH32V003的电平,或者向CH32V003输出高低电平。

GPIO页可以操作PA0~7,可以进行数字读,数字写,模拟读,模拟写(PA4~PA5使用DAC,其他IO使用PWM)。

Capture页可以进行数字抓取,作为简易逻辑分析仪。也可以选定模拟通道进行模拟抓取,作为简易示波器。

Firmware页可以上传bin固件。如果用户没有自己的固件,也可以用示例的固件烧录。示例固件分别是让PD0以1ms、100ms、1000ms高低变换。用户可以把PD0连接到PA0~7的一个脚上,然后进行数字读取,或者用逻辑分析仪看波形。

 

*8、BOM清单


 

电路图对应的PCBA
树莓派Zero 2 W
micro USB OTG 双头线
3D打印底座
2.5mm自攻螺丝
Micro USB电源

 

*9、大赛LOGO验证


 

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
1
ch32v003_test_tool_board_only_holder.STEP
13
2
ch32v003_test_tool_holder.STEP
13

附件

序号文件名称下载次数
1
立创电赛:《CH32V003自动固件测试系统》-3_远程开发测试.mp4
1
2
立创电赛:《CH32V003自动固件测试系统》-1_自动化编译测试.mp4
1
3
立创电赛:《CH32V003自动固件测试系统》-2_AI_agent自动化开发.mp4
1
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航