f754d59218
分层:流程与规范/ 单元测试/ 板级测试/ 专项验证/ 测试工具/ 测试数据/, 顶层只留新增的目录导航 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 处(无新增断链)。
77 lines
3.0 KiB
C
77 lines
3.0 KiB
C
/*
|
||
* 模块名称:GD5F2GQ5UE Driver Test Suite
|
||
* 模块功能:GD5F2GQ5UE SPI NAND Flash 驱动测试入口,按阶段组织测试用例,
|
||
* 覆盖 gd5f2gq5ue.c 全部公开/私有函数,并延伸到 FTL(nand_ftl)与
|
||
* FatFS diskio。详见 docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md。
|
||
* 适用平台:STM32F4 系列(GD5F2GQ5UE SPI NAND)
|
||
* 作者:王建锋
|
||
* 创建日期:2026-08-26
|
||
*
|
||
* === 测试阶段一览(与指南 TC 一一对应)===
|
||
* Phase | 描述
|
||
* ---------|-----------------------------------------------
|
||
* Phase 1 | 初始化与 ID 识别(init / read_id / reset)
|
||
* Phase 2 | 坏块管理(BBT:scan / is_block_bad / mark+clear / rescan)
|
||
* Phase 3 | 页读写(跨页 / 非对齐 / 多页 / 单字节)
|
||
* Phase 4 | 块擦除(单块 / 多块 / 非对齐负向 / 擦写读闭环)
|
||
* Phase 5 | ECC 验证(开启下写读 / check_ecc)
|
||
* Phase 6 | SPI 原语(page_read / program_load+exec / block_erase / write_enable / wait_busy)
|
||
* Phase 7 | DMA 边界(阈值 32/33/整页)
|
||
* Phase 8 | FTL 层(nand_ftl_init / nand_ftl_format)
|
||
* Phase 9 | FatFS diskio(可选)
|
||
* Phase 10 | 边界条件(offset 越界 / size=0 / 未擦除写入 / 写保护解除)
|
||
* Phase 11 | 13h 锁存 / WIP 提前清零对照复现(编程擦除风暴 + 立即读比对,2026-09-21)
|
||
*/
|
||
|
||
#ifndef GD5F_TEST_H
|
||
#define GD5F_TEST_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include <stdint.h>
|
||
#include "test_common.h"
|
||
#include "gd5f2gq5ue.h"
|
||
|
||
/* ======================== 阶段使能开关 ======================== */
|
||
/* 取消注释对应阶段即可启用;总开关 ENABLE_GD5F_TESTS 控制是否编译并运行测试。
|
||
* 启用后,defaultTask 中的常规 FTL/FatFS 存储测试会被跳过(独占 NAND)。
|
||
* 注意:测试会擦除/写入若干块,且 Phase 8/9 会格式化 FTL/FatFS,仅用于测试构建。 */
|
||
//#define ENABLE_GD5F_TESTS /* 总开关(由 test_config.h 的 TEST_SUITE_GD5F 自动开启) */
|
||
|
||
//#define ENABLE_GD5F_PHASE1_TESTS
|
||
//#define ENABLE_GD5F_PHASE2_TESTS
|
||
//#define ENABLE_GD5F_PHASE3_TESTS
|
||
//#define ENABLE_GD5F_PHASE4_TESTS
|
||
//#define ENABLE_GD5F_PHASE5_TESTS
|
||
//#define ENABLE_GD5F_PHASE6_TESTS
|
||
//#define ENABLE_GD5F_PHASE7_TESTS
|
||
//#define ENABLE_GD5F_PHASE8_TESTS
|
||
//#define ENABLE_GD5F_PHASE9_TESTS
|
||
//#define ENABLE_GD5F_PHASE10_TESTS
|
||
//#define ENABLE_GD5F_PHASE11_TESTS /* 13h 锁存复现(仅擦写最高一块,独立门控,可随时启用) */
|
||
|
||
/* ======================== 测试统计与断言 ======================== */
|
||
|
||
typedef test_stats_t gd5f_test_stats_t;
|
||
|
||
extern gd5f_test_stats_t g_gd5f_test_stats;
|
||
|
||
#define GD5F_TEST_CHECK(cond, fmt, ...) \
|
||
TEST_CHECK_IMPL(g_gd5f_test_stats, cond, fmt, ##__VA_ARGS__)
|
||
|
||
#define GD5F_TEST_REPORT(name) TEST_REPORT_IMPL(g_gd5f_test_stats, name)
|
||
|
||
#if defined(ENABLE_GD5F_TESTS)
|
||
void gd5f_test_run(void);
|
||
#else
|
||
#define gd5f_test_run() ((void)0)
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* GD5F_TEST_H */
|