docs(net): N-31 销项——0x08 下多 Socket 实测 34/34,补台架前置排雷

N-31(0x08 下的多 Socket 台架复测)已闭环并销项。

实测(2026-10-11 20:18,板端 CH395F ver=0x4A,日志 fun_para=0x08):
- 构建:TEST_SUITE_CH395F + ENABLE_PHASE7_TESTS,PHASE7_MULTI_COUNT=5
  (E-23 未修:NET_MAX_SOCKETS=8 减去 FTP/对时/远显三个常驻监听)
- PC 侧:ch395f_socket_test.py tcp_server --port 8081 --max-conn 8
- 结果:**Phase 7 34/34 PASSED(failed=0)**;TC704 五路全部
  ESTABLISHED,每路 64 B 回显字节级比对通过
- 芯片 Socket 实测落在 sock2/4/5/6/7(0/1/3 被监听占用)→ Socket 4~7
  在 bit0=0 下完全可用,与官方手册"8 Socket 原生 + _SN 索引寻址"一致
- 烧录 -Rst -Run + 回读 No difference found;测试宏已还原、产品构建重烧

台架前置排雷(两条都会造成全量假 FAIL,已登记进 Trap 18):
1. PC 适配器落在 Public 防火墙配置文件 → 入站 8081 被静默丢弃,症状是
   TC701/702/704 全部 CONNECT TIMEOUT(而 PC→设备 21 端口与 ping 正常),
   极易误判成"0x08 毁了 client"。
2. 上一轮遗留的 tcp_server 进程仍占着 8081,新起的服务器绑不上端口
   却不报错。

登记簿:N-31 行删除(完成即销项),W5 行加销项注记;Test_Guide TC704
补复跑记录与前置条件;Trap 25 疑点条目改判为"已实测通过"。

验证:@build 0 错 0 警(产品构建 Code=196764);check_doc_links --all 通过。
This commit is contained in:
2026-10-11 20:24:39 +08:00
parent d758d5cd7b
commit b8619a0984
3 changed files with 8 additions and 5 deletions
+4 -2
View File
@@ -530,7 +530,9 @@ NET 层 TCP Client(阶段 7)`net_connect()` 返回 0,但 `net_poll()` 报
**为什么 0x09 当年"看起来有效"**:芯片忽略了保留位(Trap 25 旁证:bit0=1 下 sock1/2/3 并行正常)。TC704 40/40 PASS 只证明"0x09 + 缓冲布局"通过,**不构成"0x08 下不通过"的对照**(与 bit0 结论出自同一提交,属自证)。留着 bit0=1 的代价是违反保留位规定——后续固件版本一旦启用该位,现网设备静默失效。
**待补实测**(登记 `docs/待处理内容.md` N-31):0x08 下跑 TC-NET-704(须降并发 ≤5:E-23 未修,`NET_MAX_SOCKETS=8` 而三个监听常驻占 3 个 fd)+ FTP 回归(数据通道实测落在 sock4,比 TC704 更贴生产)。
**实测闭环(2026-10-11 20:18,N-31 已销项)**:`FUN_PARA=0x08` 下跑 TC-NET-704(`PHASE7_MULTI_COUNT` 降到 5:E-23 未修,`NET_MAX_SOCKETS=8` 而 FTP/对时/远显三个监听常驻占 3 个 fd)→ **Phase 7 34/34 全通过(failed=0)**:5 路并发全部 ESTABLISHED、每路 64 B 回显字节级比对 OK;芯片 Socket 实测落在 **sock2 / sock4 / sock5 / sock6 / sock7**(0/1/3 被三个监听占用)→ **Socket 4~7 在 bit0=0 下完全可用**,与手册口径一致,定案成立。烧录后回读 `No difference found`。
⚠ **台架前置(本轮踩到,务必先排)**:① PC 的以太网适配器落在 **Public** 防火墙配置文件 → 入站 8081 被静默丢弃,症状是 TC701/702/704 **全部** `CONNECT TIMEOUT`(而 PC→设备 21 端口正常、ping 通、ARP 正常),**极易误判成"0x08 毁了 client"**;② 上一轮遗留的 `tcp_server` 进程仍占着 8081,新起的服务器绑不上端口却不报错。两条都排除(临时关 Public 配置文件 + 清残留 python 进程)后才拿到上面的结果——**判"芯片行为"前先确认对端真的收到了 SYN**(Trap 25 总纲铁律的又一次命中)。
### 发现时间
阶段 7 扩展 8 Socket 测试,2026-08-25。
@@ -873,7 +875,7 @@ Trap 22 的周期对账(200ms 节拍 + 400ms 去抖 + 1s 冷却)设计目标
**教训(Trap 25 总纲)**:本轮先后误读三次——把客户端正常 FIN 读成"芯片杀连接"、把 open 重试读成"拆链窗口"、把芯片假 SEND_OK 读成"数据已上线"。铁律:**CH395F 的"成功"(中断位/状态码)只代表芯片本地动作完成,不代表对端收到;判定必须回到对端可见证据(主机侧收发)+ 手册语义(FUN_PARA §5.52、状态码 §5.22)**。
**顺带发现的疑点(2026-10-11 已定案)**:`set_fun_para(0x09)` 的 bit0——§5.52 表明确写 **bit0 保留、必须为 0**,而 `net_init` 注释声称"bit0=1 多 Socket 模式"(手册与网络资料均无此说法,CH395 的 8 Socket 是芯片原生能力,靠 Socket 索引 `_SN` 寻址)。现固件 bit0=1 下 sock1/2/3 多路并行正常 → 该位被芯片忽略。**定案:改回 `0x08`**——官方手册 V1C/V1E/V2.2/V2.3 的 bit0 全是保留位,官方例程 bit0=0 下 8 个 Socket 照常可用(`EXAM5_TCP_Server` 传 0x02 却给 Socket 0~7 配缓冲),官方 FTP 例程本身就传 0x08。完整证据链见 Trap 18「定案更正」;**0x08 下的多 Socket 台架复测尚未做**(登记 `docs/待处理内容.md` N-31)。
**顺带发现的疑点(2026-10-11 已定案)**:`set_fun_para(0x09)` 的 bit0——§5.52 表明确写 **bit0 保留、必须为 0**,而 `net_init` 注释声称"bit0=1 多 Socket 模式"(手册与网络资料均无此说法,CH395 的 8 Socket 是芯片原生能力,靠 Socket 索引 `_SN` 寻址)。现固件 bit0=1 下 sock1/2/3 多路并行正常 → 该位被芯片忽略。**定案:改回 `0x08`**——官方手册 V1C/V1E/V2.2/V2.3 的 bit0 全是保留位,官方例程 bit0=0 下 8 个 Socket 照常可用(`EXAM5_TCP_Server` 传 0x02 却给 Socket 0~7 配缓冲),官方 FTP 例程本身就传 0x08。完整证据链见 Trap 18「定案更正」;**0x08 下的多 Socket 已台架实测通过**(2026-10-11 20:18,Phase 7 34/34,并发回显落在 sock2/4/5/6/7,N-31 已销项)。
### 发现时间
2026-10-11(登记簿 N-30;裸机芯片台架定案实验见本节,实验分支 `n30-chip-bench`)。