Files
STM32F4-Base/Drivers/BSP/GD5F2GQ5UE/nand_ftl.h
T
wandering1 f754d59218 docs(测试说明): 按用途分六个子目录并同步全库引用
分层:流程与规范/ 单元测试/ 板级测试/ 专项验证/ 测试工具/ 测试数据/,
顶层只留新增的目录导航 README.md(归层判据 + 硬约束 + 本次处置记录)。

- 搬迁 28 个路径:测试数据三个目录 58 个文件为纯改名(R100,内容逐字节不变)
- 全库引用同步 124 个文件:AGENTS / docs 索引 / skills / 门禁注释 / scripts
- 门禁面:scripts/check_test_traceability.py 的 glob 改 rglob
  (分层后不递归扫描=追溯门禁直接瞎掉)
- scripts/rename_ref.py:收尾的 ℹ 提示在 GBK 代码页抛 UnicodeEncodeError,
  让进程以退出码 1 收场而改写其实已落盘(RC 与真实结果相反);改为把
  stdout/stderr reconfigure 成 UTF-8,与 check_doc_links.py 等同法
- docs/文档规范.md §1.1 补「子目录文件过多时再分一层」;§3.6 补 rename_ref
  搬整目录的两个实测坑:① 会改写目录内部文件的内容 ② 内部文件的 ../ 出链
  不补层级(本次 23 个被误改的证据文件已按 HEAD 原始字节逐字节还原)
- docs/README.md §6 改为与六个子目录一一对应,并补登原先漏登记的
  「启动日志原子性复验流程」一行
- .cubemx_survival_baseline.json:App/util/task_watchdog.c 的注释路径也随分层更新,
  该文件是存活审计的 watchdog-module 漂移锚点,按脚本自己的提示跑 --write 重建基线
  (实测重建后仅 watchdog-module 一条哈希变化)
- 铁律 4 例外(本次在任务树里改了单写者文件):AGENTS.md 与
  .pre-commit-config.yaml 只被 rename_ref 改写路径字面量(后者全在注释行),
  任务表块与钩子声明一字未动

验证:check_doc_links.py --sections-strict 覆盖全部 88 个改动 .md 全绿;
check_test_traceability.py 输出与主树逐行一致;196 个文本文件无 BOM、无新增
CR、无 U+FFFD、无行尾空白;陈旧引用面由主树 25 处降到 6 处(无新增断链)。
2026-10-30 07:16:07 +08:00

61 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 模块名称:SPI NAND FTL(dhara 移植层 + FatFs 磁盘接口)
* 模块功能:把 GD5F SPI NAND 经 dhara 映射层暴露成 FatFs 的 0 号磁盘
* (disk_initialize/status/ioctl/read/write),并提供显式格式化入口。
* 适用平台:STM32F4 系列 + GD5F2GQ5UE
* 作者:王建锋
* 创建日期:2026-09
* 修改记录:
* 2026-10-23 王建锋 补模块头与函数注释(return-doc 检查);返回值语义写明"失败类目前
* 只进日志、不外传",避免调用方以为能拿到 ECC / 预算耗尽的区别
*/
#ifndef NAND_FTL_H
#define NAND_FTL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/*
* 函数功能:初始化 FTL(等价于 disk_initialize(0):SPI 起链 + dhara_map_resume)
* 入口参数:无
* 返回值:0 - 成功(映射可 resume 或判为真空白卷);-1 - 失败(disk_initialize 非 0)
* 限定条件:由 FatFs 的 f_mount(forced=1) 间接触发,或测试代码直接调用
* 函数说明:⚠ 这里的 -1 **抹掉了失败类**——"ECC 读不动"、"journal 满"与"映射损坏"对外
* 都只是 -1。分类信息目前只在失败点就地进日志(见 nand_ftl.c 的 ftl_class_from_dhara
* 与 ../架构设计/STM32F4-Base存储架构说明.md §10.4);要让调用方按类分支,需要跨调用
* 存活的失败类快照(C4 待还项,当前无消费者故未做)。
* 调用方**不得**把 -1 解读成"卷坏了,可以重格式化"——教训正在这条上。
*/
int nand_ftl_init(void);
/*
* 函数功能:清空 dhara 映射树并同步(**破坏性**:整卷逻辑地址→物理映射作废)
* 入口参数:无
* 返回值:GD5F_OK(0) - 已清空并同步;GD5F_ERROR(-1) - 初始化/刷写缓存/同步失败(卷状态未定,
* 须重新挂载判定,不要连环重试)
* 限定条件:只允许走显式命令或恢复流程调用;不得因"某次读写失败"自动调用
* 函数说明:新卷从空树写起,避免旧 journal 残留与新卷共存(结构卫生)。
* 容量恢复动作的区分(A 清日志 / B 重挂载 / C 全片擦除 / D 残留清理)
* → docs/测试说明/专项验证/存储维护与容量恢复.md。
*/
int nand_ftl_format(void);
/*
* 函数功能:复位 FTL 内存态,使下次 nand_ftl_init() 重新走 dhara_map_resume
* 入口参数:无
* 返回值:无
* 限定条件:测试用途(掉电恢复 / 坏块注入后重建场景模拟设备重启)
* 函数说明:只清 RAM 状态位,不碰闪存内容。
*/
void nand_ftl_deinit(void);
#ifdef __cplusplus
}
#endif
#endif /* NAND_FTL_H */