打印

关于nand flash的坏块管理

[复制链接]
4549|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzh08|  楼主 | 2009-8-6 17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有几个问题不明白,望指教
1.在判断spare区相应字节是否是ff之前,是不是必须先要执行块擦除指令BlockErease,然后才能判断spare区的相应字节;可以直接判断该spare区的相应字节是否为ff么?
2.我在程序初始化的时候建立了一个block table,函数名为CreateBlockTable,可以每次在程序重启的时候都执行该函数,刷新这个block table么?
3.stm32是支持硬件计算ECC的,其过程是写入的时候CPU计算出ECC的值,然后放入spare的某个地址,然后读出的时候CPU重新计算ECC,和以前的ECC作比较,如果二者相同,则认为ECC正确,不用纠正;否则,要进行ECC的处理。我现在想知道的是,cpu计算出ECC后,把这个ECC的3个字节放在spare的哪个地址了呢?这个过程应该是cpu自己完成的,没有程序的参与吧。
沙发
ssoftboy| | 2009-8-6 17:24 | 只看该作者
Pls ref to SAMSUNG's XSR code.

使用特权

评论回复
板凳
lzh08|  楼主 | 2009-8-6 17:36 | 只看该作者
不明白,什么是XSR code?

使用特权

评论回复
地板
香水城| | 2009-8-6 18:51 | 只看该作者
简单回答如下:
1)可以直接判断该spare区的相应字节,不必先做擦除。
2)可以每次在程序重启的时候都执行该函数,刷新这个block table
3)ECC不是CPU计算的,是由一个专门的ECC计算器计算的,不占用CPU时间。读写达到规定的字节数目(256、512......)后,需要由程序读出ECC的结果,程序自己决定写入的地址,CPU或ECC计算器都不负责写ECC到Flash。

使用特权

评论回复
5
lzh08|  楼主 | 2009-8-6 22:32 | 只看该作者
哦,明白了。那个读出ecc的函数是不是函数库自带的一个叫
library\src\stm32f10x_fsmc.c文件里面一个
u32 FSMC_GetECC(u32 FSMC_Bank)函数?

使用特权

评论回复
6
fabest| | 2009-8-7 08:15 | 只看该作者
呵呵,楼主可以参考圈圈写的代码,坏块管理写得很不错。。。

使用特权

评论回复
7
lzh08|  楼主 | 2009-8-7 09:19 | 只看该作者
看了,确实写的不错,思路挺好。

使用特权

评论回复
8
hqzhisou| | 2009-9-8 15:00 | 只看该作者
在判断是否坏块之前,严禁擦除;

另外,圈圈的帖子在哪儿呢,没找到,大家可以给个链接吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

114

帖子

0

粉丝