# 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 ``` ### 命令行参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `` | 串口号(必需) | - | | `-f, --file ` | 固件文件 | - | | `-a, --addr
` | Flash 起始地址 | 0x08008000 | | `-b, --baud ` | 波特率 | 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"); } ``` ## 许可证 与主项目相同。