/* * 模块名称: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 #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 */