怎么查nandflash的坏块

怎么查nandflash的坏块,第1张

首先调用erase,将NAND全部擦除一遍,然后执行如下检测 *** 作,
如果页大于512字节,
badblockpos = 0;
badblockbytes = 2;
如果页小于512字节,
badblockpos = 5;
badblockbytes = 1;
读取每个block的前两页OOB区域的第badblockpos开始的后badblockbytes字节是否为0xff,
如果是,那么说明该block是好的,否则该block是坏块[gliet>参考

>1、如果你的linuxkernel也在nandflash上,下载程序时不擦除全部flash,你的linux系统还在。2、如果下载程序时,将整个nandflash擦除了,linux就会没了。需要重新烧写kernel。

必须 就是这个工作原理。至于如何写看主控芯片,比如SSD就会用平均损耗,会先挑空的写,不一定会覆写。不是很明白你的问题,反正一个块如果要重新写是肯定要擦除的,擦了东西就没了。至于如何避免数据丢失是控制芯片如何去写的事情,不是flash芯片可以解决的问题。

NAND技术在设计之初是为了数据存储应用,nand的写回速度比较快,芯片面积小,特别容量大有很大的优势

NAND的地址分为三部分:块号,块内页号,页内字节号;正因为如此,NAND的一次数据访问,要经过3次寻址,先后确定块号,块内页号,页内字节号,至少占用了三个时间周期。因此:NAND FLASH的一个劣势出来了:随机字节读写速度慢。但是nand flash平均每MB成本比nor flash少了三,四倍。所有NAND FLASH的容量可以做的比较大。

Nand flash 的数据是以bit的方式保存在memory cell,一个cell里面只能存储一个bit。这些cell以8个或者16个为单元,连成bit line,形成所谓的byte(X8)/word(X16),这就是NAND Device的位宽。这些line会再组成page,page又分为main area(一般用来做普通数据的存储区)和spare area(一般用于在读写 *** 作的时候存放效验码等额外数据用的),最后再又多个page形成一个block。

NAND flash以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址:

――Block address――page address――column address

对于NANDFLASH来说,地址,命令和数据都只能在I/O[7:0]上传递,数据宽度为8bits或16bits。

在擦除数据的时候块地址会被用到。

块地址(block address):如果一个块有32个page,一个page有512个byte。那么一个block有32×512个byte。所以块地址由A[14]以上的位来表示。32Mbytes的有3210241024/32/512 = 2048个block。需要占用11个bit,即A[24:14]。

对Nand flash的访问中,地址由列地址和行地址两部分组成。

列地址(column address):列地址表示在页内以byte(如果是X16,则以word)为单元的页内偏移量;    

行地址(页地址)(row address):指page在整个nand芯片中的索引。

以下列举3个不同大小型号的nand flash进行说明:

SAMSUNG_K9F5608X0D(512Bytes(没有包括16Bytes spare)32pages2048blocks=32Mbytes)需要3个地址周期


列地址:A[7:0] 第一个地址周期发出,对于X8的nandflash来说,如果要把A[8]也编进列地址里面去,那么整个地址传输需要4个周期完成,所以为了节省一个周期,K9F5608X0D把页内分为A(1 half array)区,B(2 half array)区。A区0-255字节,B区256-511字节。访问某页时必须通过A[8]选定特定的区,A[8]则由 *** 作指令决定的,00h,在A区;01h在B区。所以传输地址时A[8]不需要传输。对于X16的nand flash来说,由于一个page 的main area 的容量为256word,仍相当于512byte。但是,这个时候没有所谓的1st halfpage 和2nd halfpage 之分了,所以,bit8就变得没有意义了,也就是这个时候 A8 完全不用管,地址传递仍然和x8 器件相同。除了这一点之外,x16的NAND使用方法和 x8 的使用方法完全相同。

行地址:A[24:9]由第2,3个地址周期发出;

SAMSUNG_K9F1208(512Bytes(不包括16Bytes spare)32pages4096blocks=64MBytes)需要4个地址周期

列地址:A[7:0] 第一个地址周期发出,同上;

行地址:A[25:9]由第2,3,4个地址周期发出,A[25]以上的各位必须被设置为L;

SAMSUNG_K9F1G08U0B(2048Bytes(不包括64Bytes spare)64pages1024blocks=128MBytes)需要4个地址周期

列地址:A[11:0] 第1,2个地址周期发出,如图L位要置为low;

行地址:A[27:12]由第3,4个地址周期发出;

④页寄存器:由于对nand flash读取和编程 *** 作,一般最小单位是page。所以nand在硬件设计时候,对每一片都有一个对应的区域用于存放将要写入到物理存储单元中区的或者刚从存储单元中读取出来的一页的数据,这个数据缓存区就是页缓存,也叫页寄存器。所以实际上写数据只是写到这个页缓存中,只有等你发了对应的编程第二阶段的确认命令0x10之后,实际的编程动作才开始把页缓存一点点的写到物理存储单元中去,这也就是为什么发完0x10之后需要等待一段时间的原因。

flash存储器是嵌入式硬件系统所使用的存储设备,相当于PC机的硬盘,断电后仍然能够保存数据。一般固件(或者说,嵌入式软件)就是保存在里面的。
包括Nor flash和Nand flash。各有优缺点。Nand flash容量较大。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13353189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-20
下一篇 2023-07-20

发表评论

登录后才能评论

评论列表(0条)

保存