首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么你总是把写的块标记成坏的?

为什么你总是把写的块标记成坏的?
EN

Stack Overflow用户
提问于 2014-10-29 11:20:13
回答 1查看 567关注 0票数 3

我正在开发一个u-boot的nand闪存驱动程序。我认为它很好,但是u的环境不能正常工作。下面是我为测试所做的工作:

  1. 擦除整个nand闪光灯的代码完全由我自己编码,这些代码与u引导无关。也没有发现坏的街区。( nand闪光灯有可能没有坏的块吗?)这是代码 void nand_erase(u32 addr) { if (addr & (BLOCK_SIZE - 1)) {printf(“非块对齐\n”);返回;} u32行= addr / 2048;nand_select_chip();nand_cmd(0x60);NFADDR =行& 0xFF;NFADDR =(行>> 8) & 0xFF;NFADDR =(第16行)和0x07;nand_cmd(0xD0);nand_wait_ready();nand_cmd(0x70);u8 status = nand_read();if (状态& 0x01) {printf(“块0x%x是坏的”,addr);} nand_deselect_chip();}
  2. 启动u引导,它提示“坏CRC,使用默认环境”。
  3. 现在我使用了"setenv test 100“和"printenv test",它工作得很好,而"saveenv”也提示"OK“。
  4. 我用的是"nand bad",它什么也没有显示。
  5. 重新启动板和u引导。
  6. 现在它说"readenv()失败,使用默认环境“。
  7. 而我的"printenv测试“失败了。然后我用"nand“来表示,它正好显示了"CONFIG_ENV_OFFSET”的一个坏块。
  8. 然后,我将CONFIG_ENV_OFFSET更改为另一个值。重复第1-7步。它将在新的CONFIG_ENV_OFFSET上再次显示一个不好的块。

我检查了我的司机,写操作和读操作都很好。台阶在这里:

  1. “0”,它显示了所有的0xff
  2. "nand写20000000 0 800“将内存写入nand闪存。
  3. 然后"nand 0",它显示与"md 20000000 100“相同的值。

所以,你可以看到,在萨文夫之后,CONFIG_ENV_OFFSET的街区会被标记为坏的,我真的不知道为什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-30 17:20:56

现在我明白了。我设置了ecc.mode = NAND_ECC_HW_SYNDROME,但是XXX_syndrome函数不维护ecc布局。它只是简单地在主数据之后写ecc。最后,它将覆盖每个页面中oob区域的第一个和第二个字节,但是u引导检查这两个字节作为坏块标记,下面是答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26629016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档