/* * 模块名称:CH395F Driver Test Suite * 模块功能:CH395F 驱动各功能模块的测试入口,分阶段组织测试用例, * 覆盖 SPI 命令路径、协议栈配置、Socket 状态机等 * 适用平台:STM32F4 系列(CH395F 以太网芯片) * 作者:王建锋 * 创建日期:2026-07-19 * 修改记录: * * === 通过标准速查 === * * Phase | 通过条件 | 失败特征 * ---------|-----------------------------------|-------------------------------- * Phase 1 | 9 项全部打印 OK/SUCCESS/YES/0x00 | 任何一项显示 FAIL、ERROR、MISMATCH * Phase 2 | 3 轮 "PASS" 打印 | 任何一轮打印 "FAIL" 或超时 * Phase 3 | 20/20 回显 + PING 5/5 + 大包 10/10 | 任何回显超时或丢包 * Phase 4 | PC 脚本显示 10/10 sent/received | 断连、数据错乱 * Phase 5 | PC 脚本显示 10/10 sent/received | 断连、数据错乱 * Phase 6 | 日志打印 IP/GW/MASK 非零 IP | DHCP timeout 或 0.0.0.0 * Phase 7 | PC 脚本显示 10/10 sent/received | 断连、数据错乱 * Phase 8 | 70/70 成功率 100% | 任何连接失败或丢包 */ #ifndef __CH395F_TEST_H #define __CH395F_TEST_H #ifdef __cplusplus extern "C" { #endif #include /* * 阶段使能开关(取消注释即启用对应阶段) * 注意:Phase 6 (DHCP) 会改变 IP,建议独立运行 */ //#define ENABLE_PHASE1_TESTS /* 寄存器读写 + 中断一致性 */ //#define ENABLE_PHASE2_TESTS /* TCP Client 收发 + 关闭重连 */ //#define ENABLE_PHASE3_TESTS /* UDP Server Echo */ #define ENABLE_PHASE4_TESTS /* NET 层 TCP Echo(netTask 中运行) */ //#define ENABLE_PHASE5_TESTS /* NET 层 UDP Echo(netTask 中运行) */ //#define ENABLE_PHASE6_TESTS /* DHCP 自动获取 IP(会改 IP!) */ //#define ENABLE_PHASE7_TESTS /* Select/Poll I/O 多路复用(netTask 中运行) */ /* 测试统计 */ typedef struct { uint16_t total; uint16_t passed; uint16_t failed; } test_stats_t; extern test_stats_t g_test_stats; #define TEST_CHECK(cond, fmt, ...) do { \ g_test_stats.total++; \ if (cond) { \ g_test_stats.passed++; \ DBG_INFO("[PASS] " fmt, ##__VA_ARGS__); \ } else { \ g_test_stats.failed++; \ DBG_ERROR("[FAIL] " fmt, ##__VA_ARGS__); \ } \ } while (0) #define TEST_REPORT(name) do { \ DBG_INFO("=== %s: %d/%d PASSED (failed=%d) ===", \ name, g_test_stats.passed, g_test_stats.total, g_test_stats.failed); \ } while (0) /* * Phase 1: 底层寄存器测试 * 通过: 9 项全部打印 OK/SUCCESS/YES/0x00 * 失败: 任何一项 FAIL/ERROR/MISMATCH */ void ch395f_phase1_tests(void); /* * Phase 2: TCP Client 收发 + 关闭重连 ×3 轮 * 通过: 日志打印 3 轮 "PASS" * 失败: 任何一轮打印 "FAIL" 或超时 * PC 端预启动: * python test/ch395f_socket_test.py tcp_server --port 8081 */ void ch395f_phase2_tests(void); /* * Phase 3: UDP Server Echo + PING + 大包 * 通过: 20/20 回显 + PING 5/5 + 大包 10/10 * 失败: 任何回显超时或丢包 * PC 端: * ping 192.168.1.100 * python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000 */ void ch395f_phase3_tests(void); /* * Phase 4: NET 层 TCP Echo(netTask 中运行) * 通过: PC 脚本 10/10 sent/received * 失败: 断连或数据错乱 * PC 端: * python test/ch395f_socket_test.py tcp_client --ip 192.168.1.100 --port 8080 */ void ch395f_phase4_tests(void); /* * Phase 5: NET 层 UDP Echo(netTask 中运行) * 通过: PC 脚本 10/10 sent/received * 失败: 断连或数据错乱 * 注:init 在 USER CODE BEGIN 2 中调用,echo 在 netTask 中运行 * PC 端: * python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000 */ void ch395f_phase5_init(void); void ch395f_phase5_tests(void); /* * Phase 6: DHCP 自动获取 IP * 通过: DHCP SUCCESS + IP 非零 + 广播宣告 + HELLO 回显 * 失败: DHCP timeout 或宣告/HELLO 失败 * 注意: 会改变 IP,需独立运行 * PC 端:管理员权限 * python test/ch395f_socket_test.py dhcp_server --dhcp-iface 192.168.1.2 --ip 192.168.1.100 */ void ch395f_phase6_tests(void); /* * Phase 7: Select/Poll 测试(netTask 中运行) * 通过: PC 脚本 10/10 sent/received * 失败: 断连或数据错乱 * PC 端: * python test/ch395f_socket_test.py tcp_client --ip 192.168.1.100 --port 8080 */ void ch395f_phase7_tests(void); #ifdef __cplusplus } #endif #endif /* __CH395F_TEST_H */