Files
STM32F4-Base/Drivers/BSP
wandering1 afb0bfd5ff fix(net-audit): 修 6 处寄存器口径/注释错误 + Trap 记录全量复核与审计章节
智能体团队四路并行只读审计(驱动层逐命令 / NET+测试层逐调用点 /
Trap 01-12 复核 / Trap 13-25 复核),三源交叉:芯片手册 + WCH 官方
SDK(CH395CMD.c / CH395INC.H / 21 个例程)+ git 历史。本提交只落
"已确认且低风险"的修法,其余发现登记进文末审计章节待逐项决策。

已修(A 类,全部有手册/SDK 出处):
A1 测试 TC-203 反核实写成 st_chk[0]==CH395F_TCP_ESTABLISHED——§5.22
   byte0 只有 00H/05H,条件恒假,这道 Trap 14 防线自写下起从未生效
   且日志无痕(与 Trap 07 同类的 byte0/byte1 语义越界)。改为
   byte0==OPEN && byte1==ESTABLISHED。
A2 测试 Phase3/4 把 GET_RECV_LEN 返回值直接当读取长度(本地
   rx_buf[300]/[64],芯片 RX 缓冲 2KB)→ 栈溢出;补夹取 + 留痕
   (同文件 TC201/202/204 早已 clamp,这两处是漏)。
A3 CH395F_GINT_STAT_DHCPV6 由 0x8000(bit15) 改 0x1000:SDK 是
   (1<<12)、§5.16 明确 CH395F 的 [12:15] 保留。全仓零引用。
A4 ch395f.h 命令分组注释字节数错 4 处(GET_GLOB_INT_STATUS_ALL /
   GET_UNREACH_IPPT 归"1 字节输出"、SET_FUN_PARA 归"1 入 1 出"、
   SET_RETRAN_PERIOD 归"3 字节输入"、GET_SOCKET_STATUS_SN 归"1 字节
   输出");KeepAlive 参数注释"秒"改"毫秒"(§5.53/5.54 单位 ms);
   set_retrans_count 删"0=默认值5"(§5.17 默认 12、无 0=默认语义)。
   实现全对、注释误导——Trap 25 的 1 字节缓冲栈越界正是这类注释发起。
A5 net_socket.c 六处注释与手册/HEAD 相反:FUN_PARA(SOCKET_CLOSE=0)
   实为 bit3=1(正是 closed-with-data accept 的契约依据,写反会诱导
   把 0x08 改回去)、"初始化成功后设置 MAC"(§9.2.1 ① 是之前)、
   "复用默认缓冲"(net_init 已为 8 Socket 显式分配)、"由 MSS 推导"
   (固定布局、Trap 21 已解耦)、"等 SEND_OK"(门控是 SENBUF_FREE)、
   UDP 头 [0-1] reserved(§9.2.4 是数据长度)。
A6 ch395f.c write_send_buf 超限静默 return(void 无日志),且上限取
   DMA 2048 而非发送缓冲 1024;读路径有 OVERSIZE 金丝雀、写路径没有
   → 补 [ERR] 留痕 + >1KB 告警,行为不变(分块责任仍在调用方)。

审计确认"不是 bug"的最危险一项:GET_GLOB_INT_STATUS_ALL 拼装方向。
我们"第1字节|第2字节<<8"与官方 CH395CMDGetGlobIntStatus() 逐字相同,
glob & (1<<(sock+4)) = §5.16 bit4..bit11 = SDK GINT_STAT_SOCKn,三源
一致。另 55 条命令码、9 处 16 位字节序、14 条读命令字节数、60 个
常量、12 个单位参数点、48 块缓冲布局逐条核对无异常;17 处
get_socket_status 调用点全是 st[2],Trap 25 的 1 字节 bug 无残留。

文档:Trap_Records 加文末「2026-10-11 寄存器/数值口径全量审计」章节
(干净清单计数 + 15 条新发现含已修/待修 + 文档待修清单)。就地修正:
Trap 07 定案更正里"全文 RST 仅见于错误码与引脚"的绝对表述(§5.29 /
§9.2.6 其实写了芯片发 TCP RESET,只是都与 close 无关)+ 删不可核验的
"11 个悬空提交";Trap 16 的"IP/端口寄存器大端"(端口 §5.25/5.26 明确
低字节在前)+ 注明 §5.8 总括与官方例程自相矛盾;Trap 18 删悬空
"Trap 19"(该条从未存在)、net_socket() 改 net_bind();速查清单 DMA
1500 改 2052;Trap 13 加复核注(最高优先级:其"部分读后 recv_len
归零"与 §5.34 直接相左、与本仓 TC201 注释相反,且同族结论已被 Trap 21
撤回,却仍被 6 处当现行约束引用);Test_Guide 的 TRAP-07 行仍教
"卡 FIN_WAIT_2 / close(RST)"、悬空的 Trap 19 与两处"见风险 #N"。

待修(B 类,登记未动,需逐项决策与实测):B1 产品路径从未启用 Socket
KeepAlive(唯一调用点在 client 分支,产品三服务全是 TCP Server,
§5.56 要求服务器在 CONNECT 后开,60s/5s/3 参数空转);B2 tcp_connect
返回值丢弃且 CONNECTING 不在对账范围;B3 net_listen_locked 全 8 Socket
读即清会吞别槽事件;B4 全局中断 bit0-3 从不消费、get_unreach_info 零
调用;B5 getsockname 的 s_addr 与本层约定相反致 FTP 日志设备 IP 反序
(PASV 双重反转恰好正确,勿误判);B6 三处判据只看 byte1 未按 byte0
门控;B7 Phase5 单次写 4093B;B8 Phase4 缓冲块与 sock4 交叠;B9 杂项。

验证:产品构建 0 错 0 警、Code=196912(+124B,写路径两条新日志);
测试路径(PHASE2/3/4 打开)单独编译 0/0;内存快照已刷新;doc-links
EXIT=0、无 U+FFFD、pre-commit 全绿;@test 闭环 PASS(戳匹配 + 回读无
差异 + 锚点 x1 + 548ms)。
2026-10-12 00:20:17 +08:00
..

Drivers/BSP/ — 板级支持包(纯手工自研代码)

本目录全部为手工编写的板级驱动与中间层(非 CubeMX 生成、非第三方库、非 ST HAL)。 每个芯片/子模块一个子目录。改驱动前必读对应模块的 Trap Records(见下)。

子模块一览

目录 芯片/模块 接口 职责 关键文档
CH395F/ CH395F 以太网控制器 SPI2 以太网 MAC/PHY 控制器底层驱动 docs/问题记录/CH395F_Trap_Records.md
GD5F2GQ5UE/ GD5F2GQ5UE SPI NAND SPI1 NAND 驱动 + FTL(nand_ftl.c) docs/问题记录/GD5F2GQ5UE_Trap_Records.md
TPAFE5160/ TPAFE5160 高精度 ADC 并行 16 位 ADC 采样驱动(CONVST/BUSY 时序) —
SD2506/ SD2506 RTC I2C 实时时钟驱动 docs/问题记录/SD2506_Trap_Records.md
RS485/ RS-485 半双工 UART5 收发方向控制(DE 引脚)+ 时序 —
NET/ BSD Socket 网络抽象层 — Socket API + select + 轻量 FTP 服务器 docs/网络/(含 Net层阻塞模型架构设计.md)
NETCFG/ 网络配置 — /config.ini 网络段的加载/保存(旧 NCFG 档已删除,2026-10-10) docs/子系统设计/网络配置说明.md
UI/ LVGL UI 组件 — 菜单/内容页/组件/中文字体 docs/UI设计/

根级文件

文件 作用
dbg_log.h 调试日志宏(DBG_INFO 等),编译期开关
dbg_cfg.h 调试配置项

子模块 README

⚠️ 改驱动前必读(踩坑速查)

模块 陷阱
CH395F SPI 事务须 ch395f_spi_begin()/end() 包裹;分频系数必须为 8(PCB 约束,勿"优化");快速复连会丢中断致监听死亡(Trap 22 已修);上传中止后首笔复连截断(Trap 23 已修)
GD5F2GQ5UE FatFs 移植版打开模式陷阱(FA_OPEN_APPEND 不含写位);文件名严格 8.3 短名、不得以点开头;f_write 簇分配失败返 FR_OK + 短写,须校验字节数
NET 就绪屏障位必须 osFlagsNoClear;s_net_errno 已按任务隔离(勿改回全局)
通用 自研代码禁用 C 库堆分配(MicroLIB 堆仅 512 B),动态内存只用 pvPortMalloc/vPortFree

完整平台约束见根 AGENTS.md「平台约束」章,以及各模块的 Trap Records。

相关文档

  • 架构全景:docs/架构设计/项目架构总览.md
  • 存储栈:docs/架构设计/STM32F4-Base存储架构说明.md
  • 测试指南:docs/测试说明/*_Test_Guide.md