Files
STM32F4-Base/docs/CH395F_Test_Guide.md

6.9 KiB
Raw Blame History

CH395F 测试使用指南

目录

  1. 快速开始
  2. 各阶段测试
  3. Python 脚本参考
  4. 常见问题

1. 快速开始

启用/禁用测试

编辑 Drivers/BSP/CH395F/ch395f_test.h,取消注释想要测试的阶段:

//#define ENABLE_PHASE1_TESTS     ← 取消注释即启用
#define ENABLE_PHASE2_TESTS      ← 已启用
//#define ENABLE_PHASE3_TESTS     ← 注释掉跳过

测试拓扑

PC (192.168.1.2) ──── 交换机 ──── CH395F (192.168.1.100)

2. 各阶段测试

Phase 1: 寄存器测试

项目 说明
类型 独立运行,无需 PC 配合
耗时 ~1 秒
测试项 芯片版本、命令状态、IP/网关/掩码、全局中断一致性、Socket 中断、ARP、TTL

操作

1. 只启用 ENABLE_PHASE1_TESTS
2. 编译烧录
3. 看串口输出

通过标准:串口打印 === Phase 1 Tests Complete ===,中间无 ERROR。


Phase 2: TCP Client

项目 说明
类型 需 PC 配合
耗时 ~60 秒
测试项 TCP Client 连接、收发 64 字节、PING echo、大包 echo、关闭重连 ×3 轮
默认端口 CH395F → PC:8081

操作

终端 1: python test/ch395f_socket_test.py tcp_server --port 8081 --timeout 180
终端 2: 编译烧录(只启用 ENABLE_PHASE2_TESTS

通过标准:串口显示 3 轮 closed: sock=0x00PC 显示 3 次连接且 PING echo 匹配。


Phase 3: UDP Server Echo

项目 说明
类型 需 PC 配合
耗时 ~30 秒
测试项 UDP Server 模式、8 字节头解析、PING echo ×5、大包 echo ×10
默认端口 CH395F:60000PC 发到 60000

操作

终端 1: 编译烧录(只启用 ENABLE_PHASE3_TESTS看到 "UDP socket 7 opened"
终端 2: python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000 --timeout 30

通过标准PC 显示 PING 5/5 + 大包 10/10。

关键发现CH395F UDP 分两种模式——DesIP=255.255.255.255 是 Server 模式(接受任意来源),否则只能收指定 IP:Port。每次 write_send_buf 后必须等 SINT_STAT_SENDBUF_FREE


Phase 4: NET 层 TCP Echo

项目 说明
类型 需 PC 配合,主循环运行
耗时 按需
测试项 net_recv() + net_send() 非阻塞 echo
默认端口 CH395F TCP Server:8080PC 连到 8080

操作

终端 1: 编译烧录(只启用 ENABLE_PHASE4_TESTS等主循环启动
终端 2: python test/ch395f_socket_test.py tcp_client --ip 192.168.1.100 --port 8080

通过标准10/10 回显匹配 + 大数据传输完整。


Phase 5: NET 层 UDP Echo

项目 说明
类型 需 PC 配合,主循环运行
耗时 按需
测试项 net_recvfrom() + net_sendto() 非阻塞 echo
默认端口 CH395F UDP:60000

操作

终端 1: 编译烧录(只启用 ENABLE_PHASE5_TESTS等主循环启动
终端 2: python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000 --timeout 30

通过标准PING 5/5 + 大包 10/10。


Phase 6: DHCP

项目 说明
类型 需 DHCP Server
耗时 ~10 秒
测试项 启用 DHCP、轮询状态、打印分配的 IP

⚠️ DHCP 会改变 CH395F IP 必须独立运行,不能与其他 Phase 同时启用。

操作

终端 1: python test/dhcp_server.py          ← 启动 DHCP Server需管理员权限
终端 2: 编译烧录(只启用 ENABLE_PHASE6_TESTS

通过标准PC 显示 DHCP 分配完成!,串口显示 IP/网关/掩码。


Phase 7: Select/Poll

项目 说明
类型 需 PC 配合,主循环运行
耗时 按需
测试项 net_select() 多路复用检测可读 socket → echo
默认端口 CH395F TCP Server:8080

操作:同 Phase 4TCP Client 连 8080

通过标准:同 Phase 410/10 回显匹配)。

Phase 4 和 Phase 7 功能相同但实现不同通常只启用一个。Phase 7 额外验证了 NET_FD_SET/ISSET 宏和 net_select()


Phase 8: 多客户端并发

项目 说明
类型 需 PC 配合,主循环运行
耗时 ~2 秒
测试项 7 个 TCP 客户端并发,每客户端 10 轮 PING echo
默认端口 CH395F TCP Server:8080

操作

终端 1: 编译烧录(启用 ENABLE_PHASE4_TESTS 或 ENABLE_PHASE7_TESTS
终端 2: python test/ch395f_socket_test.py stress --ip 192.168.1.100 --port 8080 --count 10 --timeout 30

通过标准7 并发 × 10 轮 = 70/70 成功率 100%。


3. Python 脚本参考

命令 说明
tcp_server --port 8081 PC 作 TCP Server测试 CH395F TCP Client
tcp_client --ip x.x.x.x --port 8080 PC 作 TCP Client测试 CH395F TCP Server echo
udp_client --ip x.x.x.x --port 60000 --timeout 30 PC 发 UDP PING测试 CH395F UDP echo
udp_server --port 8082 --timeout 60 PC 作 UDP Server接收 CH395F 数据
stress --ip x.x.x.x --port 8080 --count 10 7 并发压力测试
dhcp_server.py 轻量 DHCP Server管理员权限

通用参数:

  • --ip:目标 IP默认 192.168.1.100
  • --port:端口(各模式默认不同)
  • --count:测试次数(默认 10
  • --timeout:超时秒数(默认 30
  • --size:数据包大小(默认 1024

4. 常见问题

问题 原因 解决
Phase 2 open_socket: 0x20 (FAIL) socket 未完全关闭 已修复:先 closeRST不等 disconnect
Phase 2 收到 \x00(\x00\x00... 乱码 socket 4-7 默认无发送缓冲 set_send_buf(sock, 28, 2) 分配
Phase 3 UDP 收不到数据 DesIP 设为具体 IP 而非 255.255.255.255 设 DesIP=0xFFFFFFFF 进入 Server 模式
Phase 3 HELLO 收到但 PING 收不到 没等 SENDBUF_FREE 就第二次写 每次 write_send_buf 后轮询 SINT_STAT_SENDBUF_FREE
Python 报 WinError 10054 STM32 还没启动 等串口看到阶段启动信息再跑 Python
Phase 5 UDP 不工作 NET 层 net_bind() 没打开 CH395F Socket 已修复:net_bind() 对 DGRAM 类型自动打开
net_recvfrom() 源地址错误 UDP 头解析偏移错了 已修复:端口读 header[2-3]IP 读 header[4-7]