feat(N34 阶段2): ch395f 五原语只加不接线 + Phase 15 套件 20/20

实施方案 docs/网络/N34-自愈审计/实施方案.md §4 五原语,形态按
E2/E3/E4 定案(实验方案.md):
1. 类型化状态回读 + 每 Socket 缓存(open=0 时 tcp_state 哨兵
   0xFF;sn>7 边界返 {00,FF} 计 fault);
2. 事件护栏 ch395f_sock_events:只读本 Socket SINT,全局寄存器
   唯一读者=net_poll(F-NET-7 契约);
3. ch395f_sock_reset_begin/poll 非阻塞状态机:读空 RX -> CLOSE
   -> 排空事件(quiescent 2 轮) -> 轮询 byte0=00H;GRACEFUL/
   QUARANTINE 最短等待 100/400ms(Trap 23);WAIT_CLOSE 内置
   LISTEN 态二段 CLOSE 补发(TC1502b 实证 ~180ms 落定);
4. ch395f_cmd_done 状态回读判据(E3:GET_CMD_STATUS 对
   OPEN/LISTEN/CLOSE 无判别力);
5. 链路态缓存 ch395f_glob_event_feed + link_up/变化计数
   (B9 判据 PHY!=DISCONN)。

Phase 15 板测(硬件层模式,Socket 7,无需 PC):20/20 PASS,
含二段关闭语义断言(一段 05/00、二段 byte0=00)。

RAM +56B < 64B(g_sock_state 16B + g_rst 32B + 链路/fault 8B);
产品 Code 与阶段 2 前逐字节同 209780(无调用者被链接器裁剪)。
@test PASS;relisten_stress 20/20、n30 3/3 零回归。
RAM 台账同步:RW_IRAM1 97952B 74.7% / RW_CCM 57376B 87.9%。
This commit is contained in:
2026-10-13 12:43:17 +08:00
parent 33405a57b5
commit f7f17931c9
8 changed files with 634 additions and 6 deletions
@@ -37,9 +37,9 @@
| 区域 | 用量 | 容量 | 占比 |
|---|---|---|---|
| ER_IROM1 | 228,372 B (223.02 KB) | 1,048,576 B (1024 KB) | 21.8% |
| RW_IRAM1 | 97,896 B (95.60 KB) | 131,072 B (128 KB) | 74.7% |
| RW_IRAM1 | 97,952 B (95.66 KB) | 131,072 B (128 KB) | 74.7% |
| RW_CCM | 57,376 B (56.03 KB) | 65,280 B (64 KB) | 87.9% |
| **Flash (ROM 合计)** | **229,476 B (224.1 KB)** | 1,048,576 B (1024 KB) | **21.9%** |
| **Flash (ROM 合计)** | **229,484 B (224.1 KB)** | 1,048,576 B (1024 KB) | **21.9%** |
<!-- MEM_SNAPSHOT:END -->
各区的容量与常量来源:
+2 -2
View File
@@ -18,11 +18,11 @@
| ER_IROM1 (Flash) | 228,372 B | 1,048,576 B | 21.8% | 参考 |
| RW_CCM | 57,376 B | 65,280 B | 87.9% | PASS |
| UNINIT_CCM | 48 B | 256 B | 18.8% | 参考 |
| RW_IRAM1 | 97,896 B | 131,072 B | 74.7% | PASS |
| RW_IRAM1 | 97,952 B | 131,072 B | 74.7% | PASS |
| 子系统(静态 RW+ZI;除 RTOS 堆在 CCM 外均在 SRAM1) | 现值 | 配额 | 状态 |
|---|---|---|---|
| 网络 | 13,442 B | 12 KB | ⚠ 超 1.1 KB |
| 网络 | 13,498 B | 12 KB | ⚠ 超 1.2 KB |
| 存储 | 7,056 B | 12 KB | OK |
| UI | 54,988 B | 16 KB | ⚠ 超 37.7 KB |
| RTOS 堆 | 57,376 B | 56 KB | 堆=配额 |
+29 -1
View File
@@ -84,7 +84,7 @@ MCU: STM32F407ZGTx @ 168MHz, Keil MDK-ARM v5 (ARMCC)
| 构建模式 | 启用宏 | 固件形态 |
|----------|--------|----------|
| **硬件层模式** | `ENABLE_PHASE1~5_TESTS` | netTask 自挂起(基础线程创建但不运行),CH395F 协议栈初始化由 testTask 完成后独占芯片执行阶段 1~5(裸调 `ch395f_*` 命令) |
| **硬件层模式** | `ENABLE_PHASE1~5_TESTS`(另含 12/15) | netTask 自挂起(基础线程创建但不运行),CH395F 协议栈初始化由 testTask 完成后独占芯片执行阶段 1~5(裸调 `ch395f_*` 命令) |
| **NET 层模式** | `ENABLE_PHASE6~11_TESTS` | 完整网络栈:netTask 运行 `net_poll()` 轮询,testTask 经 `net_socket` API 执行阶段 6~11(`net_layer_test_main()` 回显、`net_layer_client_test_main()` Client 等) |
**执行顺序严格递增**:先烧录硬件层固件完成阶段 1→2→3→4→5(全部通过),再切换为 NET 层固件执行阶段 6→7→…→11。硬件层测试期间 netTask 轮询不存在,从根上排除中断偷取与 SPI 并发问题。
@@ -1101,6 +1101,30 @@ IDLE → ACCEPT → [SEND: 分块发 → DONE] / [RECV: 分块收+校验 → DON
## 12.5 阶段 15:N34 阶段 2 驱动原语(硬件层,无需 PC)
验证 `ch395f` 新增自愈原语(`docs/网络/N34-自愈审计/实施方案.md` §4;形态定案
`docs/网络/N34-自愈审计/实验方案.md` E2/E3/E4)。硬件层模式独占芯片,用 Socket 7
(产品监听 0~4 不涉),无需 PC 配合。污染会话下的复位载荷完整性不在本 Phase
(已由 E4 bench 60 轮实证),本 Phase 只验状态机跑通与判据语义。
| 用例 | 内容 | 通过标准 |
|------|------|----------|
| TC-NET-1501 | 状态回读一致性 + `ch395f_cmd_done` 语义 + 二段关闭 + 哨兵/边界 | open done ≤50ms;listen done ≤20ms(E2:100% ≤10ms);缓存 05/01;**LISTEN 态 close 二段**:一段后 05/00(监听已拆、byte0 未落)、二段后 byte0=00 ≤500ms;closed 时 tcp_state=0xFF 哨兵;sn=8 越界返 {00,FF} |
| TC-NET-1502 | `sock_reset_begin/poll` 非阻塞状态机(OPEN 态,QUARANTINE) | begin 受理;运行中二次 begin 返 -1(busy reject);≤3000ms 落定 rc=0;复位后芯片 CLOSED、poll 幂等返 0、可重开 |
| TC-NET-1502b | LISTEN 态 Socket 复位(GRACEFUL,走 WAIT_CLOSE 二段补发路径) | ≤3000ms 落定 rc=0(实测 ~180ms);复位后 CLOSED |
| TC-NET-1503 | 链路态缓存 + 事件护栏边界 | 稳定链路 feed 两次不虚增变化计数;link_up 缓存=1;`sock_events(8)` 越界返 0 |
**二段关闭语义**(本 Phase 首跑实证,详见实验方案 E2 补充发现):LISTEN 态
`CLOSE_SOCKET` 返 SUCCESS 但只拆监听(TCP 01→00),byte0 恒 05;需再发一次
CLOSE 才落 00。与 Trap 07 的 `0x05/0x00` 驻留签名同源;`sock_reset_poll` 的
WAIT_CLOSE 阶段已内置二段补发(只补一次),生产 net 层则靠 Trap 09 open 重试吸收。
**运行方法**:`ch395f_test.h` 启用 `ENABLE_PHASE15_TESTS`(自动进入硬件层模式,
勿与 NET 层 Phase 混选)→ `@build` → 烧录 → 串口看 `=== Phase 15: 20/20 PASSED ===`。
---
## 13. Python 测试脚本参考
| 命令 | 模式 | 说明 |
@@ -1180,6 +1204,10 @@ IDLE → ACCEPT → [SEND: 分块发 → DONE] / [RECV: 分块收+校验 → DON
| TM-PHY-10 | TC-NET-1005 | P1 | 压力测试 | 🟡 |
| TM-PHY-10 | TC-NET-1006 | P1 | 稳定性测试 | 🟡 |
| TM-PHY-11 | TC-NET-1101 | P1 | 功能测试 | 🟡 |
| TM-PHY-15 | TC-NET-1501 | P0 | 状态回读/二段关闭 | ✅ |
| TM-PHY-15 | TC-NET-1502 | P0 | 复位状态机 | ✅ |
| TM-PHY-15 | TC-NET-1502b | P1 | LISTEN 态复位 | ✅ |
| TM-PHY-15 | TC-NET-1503 | P1 | 链路缓存/事件护栏 | ✅ |
✅ = 已实现并验证 | 🟡 = 已实现待验证 | 🟠 = 待实现