199 lines
7.3 KiB
Markdown
199 lines
7.3 KiB
Markdown
|
|
# 自动化测试架构设计
|
||
|
|
|
||
|
|
## 目标
|
||
|
|
|
||
|
|
基于芯片手册和 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
|
||
|
|
}
|
||
|
|
```
|