本帖最后由 yddoo 于 2010-3-1 13:40 编辑
这里就不详述NAND这种存储介质的特点了,网上有大把的描述,基本都正确。因为NAND本身的特性,使我们在使用它时不得不考虑一件重要的事情:坏块管理(BBM)
其实要做的事情非常简单:记录哪块是坏。
问题是什么呢: 这个记录信息存在哪?
如果你在网上搜索这样的问题,十有**是如同NAND 厂商那样在spear area的第一或六地址上写非0值。我就有点想不太明白,既然已经认为这个块是坏块了,那就意味着你这个标识此块为坏块的写操作也可能失败,失败了怎么办呢?(可能你认为不会出现这样的情况,但我没有从NAND的手册上看到能证明可以这样做的描述 三星或ST, 其他的我没查过,尽管这样做的成功率非常高,但没有证据啊)。
坏块标记失败对产品来说是非常危险的,所以正确的做法我想应该是不仅仅要尝试在spear area标识坏块,不论是否成功还要.....
这几天手头事情不是很多,把以前的思考总结了一下,并在这里和大家分享,欢迎拍砖。
为什么上面我提到两个厂家的NAND呢(以小页NAND为例)?
1. 当你看这两种NAND手册时,可能会发现有一个非常明显的不同点:
samsung NAND的手册里大多有提到 第一个块三星公司给出了1000次无ECC擦写保证,诸位请看:“The 1st block, which is placed on 00h block address, is guaranteed to be a valid block, does not require Error Correction up to 1K Program/Erase cycles”而ST的NAND的手册里似乎没有这样的保证,不过我不太清楚ST是不是提供有此保证的NAND,不过从价格上看好像ST的要稍稍便宜一点点。
2.当你看这两种NAND手册时,可能会发现有一个非常明显的相同点:
从概率上讲,无论是出厂或在使用过程中两家都保证坏块率不超过约2%,当然手册里不是这样写的。手册里写得非常明确:
E.g. valid blocks: 128Mbits min:1004, max: 1024. "The values shown include both the Bad Blocks that are present when the device is shipped and the Bad Blocks that could develop later on."这是ST说的,三星没有如此精确的描述,不过也有类似的表格数据。
俗话说:一命二运三风水四积德五读书。
好不容易读了点书找了个工作,发现老大给的板子上只有NAND这个非挥发性存储器。要是老大积德选了三星的NAND。这就好办了,不是说第一块穿1000次坏不了吗?那就用第一块吧,以128MBit(1024块)的NAND来说,最多产生20个坏块,换句话说,最多记录20次坏块信息,20次擦写。就记在第一块吧。 不过不要高兴得太早,目前几乎所有支持从NAND的启动ARMCPU都是读NAND的第一块的第一个PAGE中的内容作为启动代码,要是在第一块中记录坏块信息(BBI),那么万一在更新时掉电且不连启动代码也没有了,风险真大,如果第一块有启动代码就算了吧。1000次给启动代码吧,至少用不着为备份启动代码头疼了(其实产品上市很少有更新启动代码的,无所谓备份)。可问题还是没有解决啊,那就看ST的吧,因为除了第一块,三星和ST的没什么差别了。
好,要是选取了ST的呢。其实这样还算风水好啦,便宜嘛又是大厂,还记得那20次吗? 小页128MBit的NAND中,一块有32页,NAND的是以页编程的,每页写一次就可以写32次啦。随便找一个BLOCK放BBI,但为什么每页写一次呢? 不是NAND会写坏吗?那就尽量少写呗。 每坏一个块将过去的现在的BBI全写到下一个新页,还省得擦呢。
运气好的话,这个NAND 一辈子都没坏这么多,就算运次不太好,坏了20个还不止,那32个也可以, 再多 真接跟用户讲报废了,回头找ST赔去。
运气不好就有点麻烦了,倒霉选了一个BLOCK记录BBI,没写几次挂了,????可咋办呢? 再来个BBI_Block备份吧,倒霉到家了,又挂了,
继续折腾那个20吧,TMD给他20个BLOCK备份。要是都坏了呢?真接跟用户讲报废了,回头找ST赔去。万一更新时掉电呢。哎! 命不好。
要是命好的话,投个好人家,有钱。板子上只要有个 FRAM,nvRAM, SRAM+Battery哪怕是个EEPROM,也不会这么烦了。或者选个好文件系统,不用自己管了。
其实碰到连着坏个20块的话,还真不容易。跟中500万差不多了我想,要是真碰到赶紧买彩票。一准XX中心算错了,你就中了。 |