存储栈RAM优化P0-1:BBT缓冲按实际载荷272B收紧,编程回读校验整体移除(向业界靠拢),新增存储栈RAM优化调研报告
This commit is contained in:
@@ -35,7 +35,7 @@ static uint32_t s_usable_blocks = GD5F_TOTAL_BLOCKS; /* dhara 可见块数(=
|
||||
static uint32_t s_bbt_write_slot = 0; /* 下一写入槽(轮转指针) */
|
||||
static uint32_t s_bbt_version = 0; /* 当前持久化 BBT 版本号 */
|
||||
static uint8_t s_bbt_slot_dead = 0; /* 池块损坏位掩码 */
|
||||
static uint8_t s_bbt_page_buf[GD5F_PAGE_SIZE]; /* BBT 读写页缓冲(静态,避免占栈) */
|
||||
static uint8_t s_bbt_page_buf[GD5F_BBT_HDR_SIZE + GD5F_BBT_SIZE]; /* BBT 读写缓冲(静态,避免占栈):实际载荷仅 16B 头+256B 位图,按实际传输长度声明(2026-09-21 由整页 2048 收紧,省 1776B) */
|
||||
static uint8_t s_bbt_best[GD5F_BBT_SIZE]; /* 最高版本位图缓存 */
|
||||
static const uint8_t s_bbt_magic[4] = { 'G', 'B', 'B', 'T' }; /* BBT 存储魔数 "GBBT" */
|
||||
|
||||
@@ -230,7 +230,7 @@ static void gd5f_page_read_issue(uint32_t page_addr) {
|
||||
* 台架实证(2026-09-20,VDD 3.1V 欠压工况):① 就绪信号可早于
|
||||
* array→buffer 整页装载完成 → 0Bh 读到"前段新、后段旧"混合页;
|
||||
* ② 13h 命令在编程/擦除风暴后可不被芯片锁存(空操作)→ 0Bh
|
||||
* 读到上一操作残留 buffer(编程数据)→ in-boot 回读校验/文件
|
||||
* 读到上一操作残留 buffer(编程数据)→ 后续文件/BBT/journal
|
||||
* 读取全部"虚假成功",阵列实际未更新 → 复位后数据丢失。
|
||||
* 二次发令覆盖②(重发必被锁存),固定沉降覆盖①(整页装载完成)。
|
||||
*/
|
||||
|
||||
@@ -131,38 +131,10 @@ int dhara_nand_prog(const struct dhara_nand *n, dhara_page_t p, const uint8_t *d
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* 编程回读校验(硬化措施,2026-09-20):拦截"状态寄存器报成功但
|
||||
* cell 未可靠 latch"的静默编程失败——此类页若流入 journal,复位后
|
||||
* resume 会因 ECC/魔数门整体拒收 checkpoint,造成新写入丢失。
|
||||
* 回读比对+ECC 检查,失败即标记坏块交由 dhara 迁移(宁可丢块)。
|
||||
* 注:本校验曾被认为是重格式化循环根因(低电压假设),后经验证
|
||||
* 该假设证伪——循环真根因是 FatFs 探针名非法(见 freertos.c 探针
|
||||
* 注释与 Trap Records);本校验作为数据完整性硬化长期保留。 */
|
||||
if (gd5f_page_read(phy_pg) != GD5F_OK) {
|
||||
dhara_nand_mark_bad(n, p >> n->log2_ppb);
|
||||
dhara_set_error(err, DHARA_E_ECC);
|
||||
DBG_ERROR("program verify: readback fail, blk %lu",
|
||||
(unsigned long)(p >> n->log2_ppb));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (gd5f_check_ecc() != GD5F_OK) {
|
||||
dhara_nand_mark_bad(n, p >> n->log2_ppb);
|
||||
dhara_set_error(err, DHARA_E_ECC);
|
||||
DBG_ERROR("program verify: ecc uncorrectable, blk %lu",
|
||||
(unsigned long)(p >> n->log2_ppb));
|
||||
return -1;
|
||||
}
|
||||
|
||||
gd5f_read_from_cache(0, s_copy_buf, FTL_PAGE_SIZE);
|
||||
if (memcmp(s_copy_buf, data, FTL_PAGE_SIZE) != 0) {
|
||||
dhara_nand_mark_bad(n, p >> n->log2_ppb);
|
||||
dhara_set_error(err, DHARA_E_BAD_BLOCK);
|
||||
DBG_ERROR("program verify: data mismatch, blk %lu",
|
||||
(unsigned long)(p >> n->log2_ppb));
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* 编程正确性以 P_FAIL 状态位(gd5f_program_exec 内检查)+ 读时 ECC +
|
||||
* journal 读时门(magic/CRC)为准;数据路径不做整页回读比对——
|
||||
* 2026-09-20 曾加回读校验(GD5F_PROG_VERIFY),2026-09-21 经评估整体
|
||||
* 移除(依据见 docs/内存管理/存储栈RAM优化调研.md 与 GD5F Trap Records Trap 05) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user