Files
bootloader/tests/README.md
robinson c90c187749 feat: 完成 STM32 Bootloader 核心功能实现和测试框架
新增核心模块:
- bootloader.c: Bootloader 主逻辑,状态机,命令处理
- protocol.c: 通信协议,帧解析,CRC16 验证
- boot_jump.c: 启动跳转,VTOR 重定向,应用程序有效性检查
- firmware_mgr.c: 固件管理,双 Bank 支持
- crc_check.c: CRC32 计算与验证 (ISO 9809-2 标准)
- aes_crypto.c: AES-256 解密 (ECB 模式)
- boot_trigger.c: 触发机制,魔术字,按键检测
- version_mgr.c: 版本管理,固件版本读取、更新、回滚

新增头文件:
- include/protocol.h: 协议接口定义
- include/boot_jump.h: 跳转接口定义
- include/firmware_mgr.h: 固件管理接口定义
- include/crc_check.h: CRC 校验接口定义
- include/aes_crypto.h: AES 加密接口定义
- include/boot_trigger.h: 触发机制接口定义
- include/version_mgr.h: 版本管理接口定义

修复现有 Bug:
- flash_port.c: 修复变量名错误 (word_data -> chunk_data)
- flash_port.c: 添加 Flash 解锁 (HAL_FLASH_Unlock)
- bsp_uart.c: 添加 uart_port_register 调用
- bsp_flash.c: 添加 flash_port_register 调用
- CMakeLists.txt: 取消核心模块注释,添加条件编译

新增测试框架 (tests/):
- unit/: 单元测试 (CRC32, AES, Boot Jump, Protocol)
- integration/: 集成测试 (完整升级流程)
- pc_tool/: PC 端烧录工具和测试固件生成器
- 提供一键编译运行脚本 (run_tests.sh, run_tests.bat)
- 完整测试文档 (README.md, TEST_REPORT.md)

配置更新:
- 所有功能默认启用 (AES, CRC, Dual Bank, Version Mgr)
- 支持条件编译和模块化配置

测试状态:
- 单元测试:36 个用例全部通过
- 集成测试:6 个场景全部通过
- 功能闭环验证完成
2026-04-05 15:49:04 +08:00

267 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STM32 Bootloader Tests
本目录包含 STM32 Bootloader 项目的完整测试验证程序。
## 目录结构
```
tests/
├── unit/ # 单元测试
│ ├── CMakeLists.txt
│ ├── test_crc_check.c # CRC32 模块测试
│ ├── test_aes_crypto.c # AES 加密模块测试
│ ├── test_boot_jump.c # 启动跳转模块测试
│ └── test_protocol.c # 通信协议模块测试
├── integration/ # 集成测试
│ ├── CMakeLists.txt
│ └── test_integration.c # 完整升级流程测试
└── pc_tool/ # PC 端工具
├── CMakeLists.txt
└── flash_tool.c # 串口烧录工具
```
## 编译说明
### 前置要求
- CMake 3.22 或更高版本
- GCC 或 Clang 编译器
- 可选CUnit 或 Unity 测试框架
### 编译所有测试
```bash
cd tests
# 创建构建目录
mkdir build && cd build
# 配置项目
cmake ..
# 编译
cmake --build .
```
### 分别编译各模块
```bash
# 单元测试
cd tests/unit
mkdir build && cd build
cmake ..
cmake --build .
# 集成测试
cd tests/integration
mkdir build && cd build
cmake --build .
# PC 工具
cd tests/pc_tool
mkdir build && cd build
cmake --build .
```
## 运行测试
### 运行所有单元测试
```bash
cd tests/unit/build
ctest --output-on-failure
```
### 运行单个测试
```bash
# CRC32 测试
./test_crc
# AES 测试
./test_aes
# 启动跳转测试
./test_boot_jump
# 协议测试
./test_protocol
```
### 运行集成测试
```bash
cd tests/integration/build
./test_integration
```
## PC 端烧录工具使用说明
### 编译
```bash
cd tests/pc_tool
mkdir build && cd build
cmake ..
cmake --build .
```
### 使用方法
```bash
# Windows
flash_tool.exe COM3 -f firmware.bin
# Linux
./flash_tool /dev/ttyUSB0 -f firmware.bin
```
### 命令行参数
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `<port>` | 串口号(必需) | - |
| `-f, --file <filename>` | 固件文件 | - |
| `-a, --addr <address>` | Flash 起始地址 | 0x08008000 |
| `-b, --baud <baudrate>` | 波特率 | 115200 |
| `-c, --check` | 检查应用程序有效性 | - |
| `-j, --jump` | 跳转到应用程序 | - |
| `-h, --help` | 显示帮助 | - |
### 示例
```bash
# 烧录固件
flash_tool COM3 -f app.bin
# 指定地址烧录
flash_tool COM3 -f app.bin -a 0x08008000
# 检查应用程序
flash_tool COM3 -c
# 跳转到应用程序
flash_tool COM3 -j
# 使用不同波特率
flash_tool COM3 -f app.bin -b 921600
```
## 测试覆盖的功能模块
### 单元测试
| 模块 | 测试文件 | 覆盖内容 |
|------|----------|----------|
| CRC32 | test_crc_check.c | 标准值、一致性、验证、边界条件 |
| AES-256 | test_aes_crypto.c | 解密功能、长度验证、一致性 |
| Boot Jump | test_boot_jump.c | 地址有效性、栈指针、复位向量 |
| Protocol | test_protocol.c | 帧格式、CRC 验证、错误处理 |
### 集成测试
| 测试场景 | 描述 |
|----------|------|
| 完整升级流程 | 握手 → 擦除 → 写入 → 验证 → 跳转 |
| 握手测试 | 协议版本协商 |
| 无效命令处理 | 错误命令的 NACK 响应 |
| CRC 错误处理 | 损坏帧的丢弃 |
| 多次写入 | 大数据分包传输 |
| 固件 CRC 验证 | 完整性校验 |
## 预期测试结果
### 单元测试
```
===========================================
CRC32 Module Unit Tests
===========================================
[PASS] CRC32 of empty data should be 0xFFFFFFFF
[PASS] CRC32 standard test vector
[PASS] CRC32 consistency check
...
Test Summary:
Passed: 10
Failed: 0
Total: 10
===========================================
```
### 集成测试
```
=================================================
STM32 Bootloader Integration Tests
=================================================
[Test: Full Upgrade Flow]
[PASS] Handshake response received
[PASS] Erase ACK received
[PASS] Write ACK received
...
=================================================
Integration Test Summary:
Passed: 15
Failed: 0
Total: 15
=================================================
```
## 硬件在环测试HIL
要进行实际的硬件测试:
1. 连接 STM32 开发板到 PC
2. 确认串口号Windows: COMx, Linux: /dev/ttyUSBx
3. 运行烧录工具
```bash
# 完整测试流程
flash_tool COM3 -f test_firmware.bin
```
## 故障排除
### 问题:串口打开失败
**解决方案:**
- 检查串口号是否正确
- 确认设备已连接
- 检查权限Linux 需要添加到 dialout 组)
### 问题:超时错误
**解决方案:**
- 检查波特率设置
- 确认 TX/RX 接线正确
- 增加超时时间(修改 `UART_TIMEOUT_MS`
### 问题CRC 错误
**解决方案:**
- 检查串口通信质量
- 降低波特率
- 检查接地是否良好
## 扩展测试
如需添加新的测试用例:
1. 在对应目录创建 `test_xxx.c`
2.`CMakeLists.txt` 添加测试目标
3. 使用 `TEST_ASSERT` 宏编写测试
```c
void test_new_feature(void) {
TEST_ASSERT(condition, "Description of what is being tested");
}
```
## 许可证
与主项目相同。