Files
STM32F4-Base/MDK-ARM
wandering1 d1e6bb4ba7 W5波+N-19收口:FTP鉴权落地、Trap25三连定案修复(N-30)、N-20/N-23/N-26
N-19 FTP 鉴权:
- lftpd_auth(USER/PASS 状态机 + 连续5次失败锁60s)+ SHA-256
  (user||pwd) 口令哈希;config.ini [ftp] 段 user/pwd_hash/write,
  出厂 admin/admin 在用有启动告警;lftpd_log.c 删除并入 lftpd_auth
- ftp_cfg 配置读写;台架 ftp_auth_bench.py 13/13

N-30 / Trap 25(CH395F_Trap_Records.md 四次定案全记录):
- 修复1 closed-with-data accept:客户端发完正常 FIN 后芯片按
  FUN_PARA(0x09) §5.52② 保留 Socket+RX 缓冲,旧代码把 CLOSED 一律
  relisten 自毁缓冲 → STOR 必挂 425;改为接受"已关但可读"连接排空
- 修复2 丢 CONNECT 中断探针 net_lost_connect_probe + last_peer_port
  幽灵甄别(拆链窗口握手完成但中断丢失,双信源去抖补 accept)
- 修复3 send_list/send_nlst 批量单发:背靠背 ~60B 小段毒化芯片 TX
  (芯片报 SEND_OK 但对端全丢),整份目录一次性写入
- 证伪存档:固定沉降/Socket 轮换冷却/listen 门控(台架 v7 矩阵)
- 台架工具 test/board/ch395f_reuse_bench.{c,h} + host 脚本存档
  (不注册编译;实验分支 n30-chip-bench 保留)

N-20:Error_Handler 死循环降级(记录+复位路径)
N-23:scripts/check_registration.py 双端注册反向校验(pre-commit)
N-26:GD5F NAND 直 DMA 调用方缓冲窗口断言

验证:BUILD_OK 0/0;ftp_regression 连跑 4 轮 11/11(修复前
LIST#4/#7 100% 挂、STOR#2 曾 100% 425);ftp_auth_bench 13/13;
@test 启动标记 PASS;ci_local L0+L0.5 全过;doc-links 通过。
登记簿 N-30 已销项。
2026-10-11 18:50:24 +08:00
..

MDK-ARM/ — Keil MDK-ARM v5 工程与构建/烧录/探针脚本

唯一工具链:Keil MDK-ARM v5(ARMCC,C99)。本目录含工程文件、启动文件、 命令行构建/烧录脚本,以及台架探针与判读脚本。

关键文件

文件/目录 作用
STM32F407-Demo.uvprojx Keil 工程文件(源文件清单、编译选项、目标配置)
STM32F407-Demo.uvoptx Keil 用户选项(调试器、断点等)
startup_stm32f407xx.s 启动文件(Heap_Size EQU 0x200(512B)在此限定)
.dsh/skills/stlink-flash/scripts/stlink_flash.py 复位/烧录/回读(ST-LINK_CLI 封装,见下;原 reset.bat 已于 2026-10-10 删除)

构建与烧录

# 编译(@build = keil-build skill;相对路径,勿用绝对路径)
& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py   # 退出码 0 = 0 errors, 0 warnings

# 烧录 + 复位运行(@download = stlink-flash skill)
& '.venv\Scripts\python.exe' .dsh\skills\stlink-flash\scripts\stlink_flash.py flash <文件.hex|.bin>

# 仅复位
& '.venv\Scripts\python.exe' .dsh\skills\stlink-flash\scripts\stlink_flash.py reset

⚠️ 烧录铁律

  • stlink_flash.py flash = ST-LINK_CLI -c SWD -P <文件> -Rst -Run——-Rst -Run 不可省略! 裸 -P 会报 Programming Complete,但目标核处于异常状态时写入并不落地(芯片内容不变)
  • 烧录后必须回读校验:ST-LINK_CLI -c SWD -CmpFile <文件> 0x08000000(No difference found 才算真写入)
  • 本机 3 线接线(nRST 未接),只重启不烧录用 stlink_flash.py reset

台架探针与判读脚本

脚本 作用
bench_verdict.py 台架判读(把运行结果判为 PASS/FAIL)
ftp_freeze_probe.py FTP 上传+回读哈希(真实路径冻结探针)
ftp_abort_probe.py FTP 中止场景探针(Trap 23)
ftp_retr_abort_probe.py FTP RETR 中止探针
tcp_reconnect_probe.py TCP 快速复连探针(Trap 22)
audit_runs.py / audit_tcpclient.py 运行记录审计 / TCP 客户端审计
check_crecipe_content.py 检查创建配方内容

子目录

目录 内容
RTE/ Keil Run-Time Environment 配置
DebugConfig/ 调试会话配置
STM32F407-Demo/ 构建输出(.o/.axf/.map 等,产物不提交)
bench_diag/ 台架诊断数据
retracted_bench_20260922/ 已撤回的台架数据(存证)

⚠️ 注意

  • 工具路径经 DTU_* 环境变量解析(DTU_KEIL_UV4 = UV4.exe 完整路径,DTU_STLINK_CLI = ST-LINK_CLI.exe 完整路径;换机设变量即可,无需改脚本;契约见 docs/环境与部署/本地工具路径环境变量方案.md)
  • 本目录被 pre-commit 门禁排除
  • 启动文件的 Heap_Size = 512B 是自研代码禁用 malloc 的根因(见 AGENTS.md)

相关文档

  • 烧录/复位:docs/测试说明/ST-LINK_CLI_复位使用说明.md
  • 构建与验证:根 AGENTS.md「构建与验证」章
  • 测试流程:docs/测试说明/自动化测试流程.md