构建测试
This commit is contained in:
@@ -63,7 +63,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
|
||||
### 启用测试
|
||||
|
||||
编辑 `Drivers/BSP/CH395F/ch395f_test.h`,取消注释对应 `ENABLE_PHASEx_TESTS` 宏。
|
||||
编辑 `test/ch395f_test.h`,取消注释对应 `ENABLE_PHASEx_TESTS` 宏。
|
||||
|
||||
---
|
||||
|
||||
@@ -73,7 +73,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
|---------|-----------|
|
||||
| **类型** | 独立运行 |
|
||||
| **耗时** | ~1 秒 |
|
||||
| **入口** | `ch395f_phase1_tests()` 在 `main.c USER CODE BEGIN 2` |
|
||||
| **入口** | `ch395fTestTask` 启动后自动运行 |
|
||||
| **出口** | 串口 "Phase 1 Tests Complete" 且 0 失败 |
|
||||
|
||||
### TC-NET-101: SPI 命令路径完整性
|
||||
@@ -85,23 +85,24 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
| **类型** | 功能测试 |
|
||||
| **标题** | 验证所有 SPI 命令路径返回预期值 |
|
||||
| **前置条件** | 1. CH395F 已上电,SPI2 已初始化<br>2. 未启用其他阶段 |
|
||||
| **测试步骤** | 1. `ch395f_check_exist()` → 验证回显测试字节按位取反<br>2. `ch395f_get_version()` → 验证版本 != 0xFF 且 != 0x00<br>3. 设 IP 192.168.1.100,回读验证<br>4. 设网关 192.168.1.1,回读验证<br>5. 设掩码 255.255.255.0,回读验证<br>6. `ch395f_get_glob_int_status()` → 验证返回 0x00<br>7. 打开→关闭 Socket 0 → 验证 `CMD_STATUS == CH395F_ERR_SUCCESS`<br>8. 设置 ARP 参数<br>9. 设置 TTL |
|
||||
| **预期结果** | 全部 9 项打印 `OK`/`SUCCESS`/`0x00` |
|
||||
| **通过标准** | 9/9 通过,0 失败 |
|
||||
| **覆盖原则** | DP-02 |
|
||||
|
||||
### TC-NET-102: 全局中断状态一致性
|
||||
**测试步骤与判定标准**:
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| **ID** | TC-NET-102 |
|
||||
| **优先级** | P1 |
|
||||
| **类型** | 功能测试 |
|
||||
| **标题** | 无事件时 `GET_GLOB_INT_STATUS_ALL` 返回 0 |
|
||||
| **前置条件** | TC-NET-101 通过,芯片空闲 |
|
||||
| **测试步骤** | 1. 读 `ch395f_get_glob_int_status_all()`<br>2. 读 `ch395f_get_glob_int_status()`(1 字节版) |
|
||||
| **预期结果** | 两者均为 0 |
|
||||
| **通过标准** | 两次读取均为 0 |
|
||||
| 步 | 操作 | 成功标准 | 失败标准 |
|
||||
|----|------|----------|----------|
|
||||
| 1 | `ch395f_check_exist()`<br>SPI写: CMD=0x06, DATA=0x57<br>回读: ~0x57 = 0xA8 | 返回 `0x00`(`CH395F_ERR_SUCCESS`)<br>= 回读字节 `0xA8` 匹配 `~0x57` | 返回 `0xFF`(`CH395F_STATUS_NOT_DETECTED`)<br>= 回读字节 ≠ `0xA8`,回显取反不匹配 |
|
||||
| 2 | `ch395f_get_version()` | 版本值 == `0x4A`(CH395F 芯片版本) | 版本值 ≠ `0x4A`(芯片不匹配或未响应) |
|
||||
| 3 | `ch395f_set_ip_addr(192.168.1.100)` → `ch395f_get_ip_inf()` 回读 IP | `ip_info[0..3] == 192.168.1.100` | 任意字节不匹配(写入/回读不一致) |
|
||||
| 4 | `ch395f_set_gwip_addr(192.168.1.1)` → `ch395f_get_ip_inf()` 回读 GW | `ip_info[4..7] == 192.168.1.1` | 任意字节不匹配 |
|
||||
| 5 | `ch395f_set_mask_addr(255.255.255.0)` → `ch395f_get_ip_inf()` 回读 MASK | `ip_info[8..11] == 255.255.255.0` | 任意字节不匹配 |
|
||||
| 6 | `ch395f_get_glob_int_status_all()`(16 位) | 返回值 == `0x0000`(无待处理中断) | 返回值 ≠ `0x0000`(有残留中断未清除) |
|
||||
| 7 | `ch395f_open_socket(0)` → `ch395f_close_socket(0)` → `ch395f_get_cmd_status()` | `CMD_STATUS == 0x00`(`CH395F_ERR_SUCCESS`) | `CMD_STATUS` 非 `0x00`(Socket 操作失败) |
|
||||
| 8 | `ch395f_set_arp(10, 5)` → `ch395f_get_cmd_status()` | `CMD_STATUS == 0x00` | `CMD_STATUS` 非 `0x00` |
|
||||
| 9 | `ch395f_set_ttl(0, 64)` → `ch395f_get_cmd_status()` | `CMD_STATUS == 0x00` | `CMD_STATUS` 非 `0x00` |
|
||||
|
||||
**通过标准**:9/9 通过,0 失败。任一失败 → 阶段标记 FAIL,后续阶段不执行
|
||||
|
||||
**覆盖原则**:DP-02
|
||||
|
||||
---
|
||||
|
||||
@@ -111,7 +112,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
|---------|-----------|
|
||||
| **类型** | 需 PC 配合 |
|
||||
| **耗时** | ~60 秒 |
|
||||
| **入口** | `ch395f_phase2_tests()` 在 `main.c USER CODE BEGIN 2` |
|
||||
| **入口** | `ch395fTestTask` 启动后自动运行 |
|
||||
| **出口** | 串口 "Phase 2 Tests Complete" 且 0 失败 |
|
||||
|
||||
### TC-NET-201: TCP Client 连接与数据交换
|
||||
@@ -123,8 +124,18 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
| **类型** | 功能测试 |
|
||||
| **标题** | CH395F TCP Client → PC TCP Server,64 字节收发 |
|
||||
| **前置条件** | PC: `python ch395f_socket_test.py tcp_server --port 8081` |
|
||||
| **测试步骤** | 1. CH395F 开 Socket 0,配置 TCP<br>2. 连接 PC:8081<br>3. 发 64 字节 → 收回显 → 比较 |
|
||||
| **通过标准** | 64 字节收发一致,无超时 |
|
||||
|
||||
**测试步骤与判定标准**:
|
||||
|
||||
| 步 | 操作 | 成功标准 | 失败标准 |
|
||||
|----|------|----------|----------|
|
||||
| 1 | CH395F open Socket 0 → 配置 TCP 协议 | `ch395f_open_socket(0)` 返回 `CH395F_ERR_SUCCESS`(`0x00`) | 返回值非 `0x00`(Socket 硬件异常或 SPI 通信失败) |
|
||||
| 2 | 设置目标 IP 为 PC 地址(`192.168.1.2`),端口 `8081` → 发起 TCP 连接 | `ch395f_tcp_connect(0)` 返回 `CH395F_ERR_SUCCESS`(`0x00`) | 返回值非 `0x00`(连接超时、目标不可达或协议配置错误) |
|
||||
| 3 | 发送 64 字节递增模式数据(`0x00, 0x01, ..., 0x3F`) | `net_send()` 返回值 == `64`(全部发出) | 返回值 < `0`(发送失败)或返回值 ≠ `64`(未完全发出) |
|
||||
| 4 | 阻塞等待接收回显,超时 5 秒 | `net_recv()` 返回值 == `64`(收到全部回显) | 返回值 < `0`(超时/断开)或返回值 ≠ `64`(数据不完整) |
|
||||
| 5 | 逐字节比较收发数据 | 所有 64 字节完全一致 | 任意字节不一致(回显错误或数据错位) |
|
||||
|
||||
**通过标准**:5/5 通过,0 失败。任一失败 → 阶段标记 FAIL,后续阶段不执行
|
||||
|
||||
### TC-NET-202: TCP Client 关闭重连 ×3 轮
|
||||
|
||||
@@ -159,7 +170,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
|---------|-----------|
|
||||
| **类型** | 需 PC 配合 |
|
||||
| **耗时** | ~30 秒 |
|
||||
| **入口** | `ch395f_phase3_tests()` 在 `main.c USER CODE BEGIN 2` |
|
||||
| **入口** | `ch395fTestTask` 启动后自动运行 |
|
||||
| **出口** | 串口 "Phase 3 Tests Complete" 且 0 失败 |
|
||||
|
||||
### TC-NET-301: UDP 回显 — HELLO + PING + 大包 ×30
|
||||
@@ -196,7 +207,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
|---------|-----------|
|
||||
| **类型** | PC 配合,netTask 运行 |
|
||||
| **耗时** | 持续运行 |
|
||||
| **入口** | `ENABLE_PHASE4_TESTS`,netTask 中循环调用 `ch395f_phase4_tests()` |
|
||||
| **入口** | `ENABLE_PHASE4_TESTS`,`ch395fTestTask` TCP 回显循环中运行 |
|
||||
| **出口** | 用户终止 |
|
||||
|
||||
### TC-NET-401: Socket 0 单连接生命周期
|
||||
@@ -310,7 +321,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
|
||||
|
||||
### 实现说明
|
||||
|
||||
`ch395f_phase5_tests()` 状态机:
|
||||
`phase5_run()` 状态机(`ch395fTestTask` 内):
|
||||
|
||||
```
|
||||
IDLE → (连接建立) → SENDING(分块发) → RECVING(分块收+验证) → DONE → IDLE
|
||||
|
||||
Reference in New Issue
Block a user