Linux MTD下获取Nand flash各个参数的过程的详细解析 您所在的位置:网站首页 mtd含义 Linux MTD下获取Nand flash各个参数的过程的详细解析

Linux MTD下获取Nand flash各个参数的过程的详细解析

2023-10-11 13:24| 来源: 网络整理| 查看: 265

Internal Chip Number

意思是,内部芯片有几颗。

有些型号的Nand Flash,为了实现更高的容量,在芯片内部封装了多个芯片。

比如三星的K9WAG08U1A容量是2GB,内部是装了2个单片是1GB的K9K8G08U0A,对应地,里面要包含2个片选CE1和CE2(均是低电平有效),而4GB的K9NBG08U5A包含了4片的K9K8G08U0A。

Cell Type:SLC / MLC

bit2&bit3表示的是芯片的类型,是SLC还是某种MLC:

Bit2,bit3=0x00 : SLC,简单说就是内部单个存储单元,存储一位的数据,所能表示的数值只有0,1,也就需要两种不同的电压来表示,所以叫做2 Level的Cell。 Bit2,bit3=0x01/0x10/0x11 : 4 /8/16 Level Cell,都叫做MLC,其含义是内部单个存储单元设计成可以表示多个,即4/8/16个不同的电压,对应地,可以表示2,3,4位的数据。

这类的MLC的nand flash,由于单个存储单元,要存储更多的数据,所以内部结构更复杂,读取和写入数据的逻辑更复杂,相对数据出错的几率也比SLC要大。

所以,一般MLC的使用,都需要检错和纠错能力更强的硬件或软件算法,以保证数据的正确性。

软件实现此类的多位数据的检错和纠错的效率相对较低,一般是硬件本身就已经提供此功能。

对应的其为硬件ECC,也就是Linux内核MTD中的HW_ECC。

其他关于SLC/MLC的更详细解释,感兴趣的可以去看另一个帖子:【详解】如何编写Linux下Nand Flash驱动

Number of Simultaneously Programmed Pages

可以对几个页同时编程/写。

此功能简单的说就是,一次性地写多个页的数据到对应的不同的页。

对应支持此操作的,硬件上必须要有多个plane,而每个plane,都有一个自己的页寄存器。

比如K9K8G08U0A有4个plane,分别叫做,plane0,plane1,plane2,plane3。

它们共分成2组,plane0和plane1,plane2和plane3。如图:

图 2.3. Nand Flash中多页编程对应的多个Plane的组织架构

在多页编程时候,只能对某一组中的两个plane操作,不允许类似于plane0和plane2或plane3一起去做多页编程。

以plane0和plane1为例,在实现具体的编程动作之前,将你要写入的2个页的数据,分别写入plane0和plane1中的页寄存器,然后才能发命令,去实现具体的编程操作。

正是因为多页编程需要底层的多plane支持,底层实现的时候,是同时对多个plane编程,所以,也被叫做Multi Plane Program

Interleave Program Between Multiple chips

交错,从字面意思就可以看出,此操作涉及对象就不止一个。

交错编程,就是对多个chip,交错地进行编程,先对一个编程,充分利用第一个编程过程中需要等待的时间,转去操作另一个,以此实现总体效率的提高。

如果支持Interleave Program的话,那么前面的chip number必然大于1。

Cache Program Cache读

在开始了一次cache读之后,在你把数据读出去的这段时间,nand flash会自动地把下一页的数据读取出来放到页寄存器。

Cache写

在你写入数据的时候,对应的内存中的数据,不是直接写到页寄存器中,而是到了cache buffer中

然后再发cache 写的命令,此时,数据才从cache buffer中,转递到页寄存器中,然后把数据一点点编程到nand flash

此时,你可以去利用页编程的时间,去准备下一次的数据,然后依此地写入下一个页。

Cache读或写,是充分利用了读一页数据出来,或者将一页数据写到flash里面去的时间,去准备新的一页的数据,这样就可以实现连续的读或写,大大提高读写效率。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有