feat: 完善 MCU 芯片自动化测试架构

- 重构为三角色协作:人+Arch AI+执行AI
- 新增 Excel 寄存器表格解析工具,自动生成测试代码
- 新增串口日志分析工具,自动生成测试报告
- 完善项目文档:AGENTS.md、README.md
- 创建自动化测试架构设计文档
- 添加示例测试任务 P01-001
This commit is contained in:
tupingr
2026-05-27 10:44:55 +08:00
parent f041139ca8
commit 8157f10768
24 changed files with 1421 additions and 404 deletions
@@ -0,0 +1,198 @@
# 自动化测试架构设计
## 目标
基于芯片手册和 Excel 寄存器表格,通过 JTAG 调试工具和串口工具,自动验证芯片实际功能是否与文档描述一致。
---
## 架构概览
```
┌────────────────────────────────────────────────────────────┐
│ 输入资源层 │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ Excel寄存器表格 │ │ 芯片手册/文档 │ │
│ └──────────────────┘ └──────────────────────┘ │
└────────────────────────┬───────────────────────────────────┘
┌────────────────────────▼───────────────────────────────────┐
│ 解析与生成层 (Arch AI) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 寄存器解析 → 寄存器定义头文件 → 测试框架代码生成 │ │
│ └─────────────────────────────────────────────────────┘ │
└────────────────────────┬───────────────────────────────────┘
┌────────────────────────▼───────────────────────────────────┐
│ 自动化测试层 (执行AI) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 测试固件编译 → JTAG下载 → 运行 → 串口日志收集 │ │
│ └─────────────────────────────────────────────────────┘ │
└────────────────────────┬───────────────────────────────────┘
┌────────────────────────▼───────────────────────────────────┐
│ 验证与报告层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 日志解析 → 与预期结果对比 → 生成测试报告 │ │
│ └─────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
```
---
## 核心组件
### 1. 寄存器解析器
- 输入:`docs/00_芯片资料/registers/*.xlsx`
- 输出:
- C 头文件 (`projects/P01_chip_test/inc/registers.h`)
- 测试描述文件 (`projects/P01_chip_test/tests/test_specs.json`)
### 2. 测试固件生成器
- 输入:测试描述文件
- 输出:
- 自动生成的测试代码 (`projects/P01_chip_test/src/auto_*.c`)
- 包含:寄存器读写测试、功能验证、串口输出
### 3. JTAG 调试工具
- 位置:`tools/jtag/`
- 功能:
- 自动编译固件
- JTAG 下载固件
- 单步调试控制
- 断点设置
### 4. 串口监控工具
- 位置:`tools/uart/`
- 功能:
- 实时监控串口输出
- 日志捕获与保存
- 日志格式解析
### 5. 结果验证器
- 输入:捕获的串口日志
- 输出:
- PASS/FAIL 结果
- 差异报告
- 统计信息
---
## 测试流程
```
┌─────────────────┐
│ 1. 解析寄存器 │
│ Excel 表格 │
└────────┬────────┘
┌─────────────────┐
│ 2. 生成头文件 │
│ registers.h │
└────────┬────────┘
┌─────────────────┐
│ 3. 生成测试代码 │
│ auto_test.c │
└────────┬────────┘
┌─────────────────┐
│ 4. 编译固件 │
│ Arm GCC/Clang │
└────────┬────────┘
┌─────────────────┐
│ 5. JTAG 下载 │
│ 到芯片 │
└────────┬────────┘
┌─────────────────┐
│ 6. 运行测试 │
│ 串口输出日志 │
└────────┬────────┘
┌─────────────────┐
│ 7. 日志捕获 │
│ 分析结果 │
└────────┬────────┘
┌─────────────────┐
│ 8. 验证与报告 │
│ 生成测试报告 │
└─────────────────┘
```
---
## 测试类型
### 1. 寄存器读写测试
- 写入已知值到寄存器
- 读回寄存器值
- 验证读写一致性
### 2. 位域操作测试
- 设置特定位域
- 读取并验证位域值
- 验证复位值
### 3. 功能模块测试
- GPIO:输入输出、中断
- UART:发送接收
- Timer:定时、中断
- 其他外设
### 4. 边界条件测试
- 极端值测试
- 非法值测试
- 时序测试
---
## 串口日志格式
测试固件输出日志格式:
```
[TEST] 测试名称: 开始
[REG] 寄存器名: 写入值=0x1234, 读回值=0x1234
[PASS] 寄存器名: 读写一致
[FAIL] 寄存器名: 期望值=0x1234, 实际值=0x5678
[INFO] 附加信息
[TEST] 测试名称: 结束
```
---
## 工具链
| 工具 | 位置 | 用途 |
|------|------|------|
| parse_registers.py | shared/scripts/ | 解析 Excel 寄存器表格 |
| flash.sh | tools/jtag/ | JTAG 下载固件 |
| monitor.sh | tools/uart/ | 串口监控 |
| analyze_log.py | shared/scripts/ | 日志分析与验证 |
---
## 配置文件
### test_config.json
```json
{
"target": "Cortex-M7",
"compiler": "arm-none-eabi-gcc",
"jtag_tool": "pyocd",
"uart_port": "/dev/ttyUSB0",
"uart_baud": 115200,
"test_timeout": 30,
"retry_count": 3
}
```