初始mtd学习笔记

 

一、基本架构

闪存是无需供电保持信息的可擦写的存储器。闪存与经过裁剪的、合适的设备驱动程序和文件系统一起使用。在linux系统中,这种特别设计的驱动程序和文件系统是由MTD子系统提供的。

linux-MTD的组成

1.       MTD核心

2.       映射驱动程序。

3.       芯片驱动程序。芯片通信的命令支持。

用户程序提出请求后,经过VFS(虚拟文件系统),解析出具体的文件系统,如jffs2,yaffs2

mtd设备驱动分三层

操作系统接口层

块设备mtd_block.c mtd_blkdev.c

字符设备mtd_char.c

 

处理协议层

MTD设备驱动(nandbase.c)

和结构nand_chip相关

 

相关硬件层(芯片驱动程序)

S3C2410_nand.c和硬件相关。

 

MTD块设备驱动程序可以让flash器件伪装成块设备

mtd_info用于描述MTD原始设备信息。其中定义了大量关于MTD的数据和操作函数。如页大小,OOB大小,块大小,ecc类型等。

块设备是要放在文件系统上才能访问的。JFFS2是专门为flash设计的完整的文件系统。cramfs,只读的文件系统,压缩比例高。yaffs文件系统是为nand flash器件设计的文件系统。

二、数据结构

mtd_partition  标识闪存芯片的分区情况

map_info 联系映射驱动程序与芯片驱动程序

mtd_info一般设备相关信息

erase_info,erase_info_user,用于闪存擦除管理结构

cfi_private, 由NOR芯片驱动程序维护的设备相关信息

nand_ecclayout,NAND芯片组的OOB空闲区布局

三、nand flash相关

nand flash内部有许多块(block)组成,每块又由若干页(page)组成。第

页有保留的冗余区(spare area)。写入数据的最小单元是页,擦除的最小单

元是块。一般情况下,每512个字节对应16个冗余字节的冗余区,用于存储差

错校验码,逻辑地址等。

 

根据一个flash单元可存储的bit位,可将flash分为SLC和MLC两种。MLC

flash可存储2~4位信息。

使用flash要解决的问题

1.块擦除次数有限

       采用损耗均衡法使各个块近似均衡使用

2.异位更新

       flash中的数据修改后要放在其它空闲的区域,原来的区域要在适

当的时候擦除。因此需要地址映射、垃圾回收等技术来管理存储空间。

3.坏块

       nand在生产和使用的过程中会产生坏块。

4.错误校验码

       nand flash会产生位翻转的问题。需要使用ECC算法来纠错。

 以上4个问题都要在文件系统中(NFTL层)解决。

 

nand flash使用

nand flash按功能上可以分为这么几个部分

1.有效数据区

2.替代区

3.空闲区

4.待擦除区

5.坏块区

所以在物理区管理上你可以分为这么三个部分

1.映射区

2.数据使用区

3.保留区

映射区内要包含坏块表(一般一页就够了)

数据使用区,就是自己使用的地方。具体就是上面说的空闲区,待擦除区,替代区。

保留区,就是防止flash使用过程中产生了坏块,用此区去填充坏掉的块。

第一次使用时,必须扫描全盘建立坏块表。这一步是通过查询冗余区的块状态字节完成的。此后根据情况,利用冗余区查询flash的ecc信息,地址转换表信息,块状态信息等完成相应的操作。

关于nand flash的具体操作,参看http://download.csdn.net/source/3568972

 

 

      

你可能感兴趣的:(数据结构,算法,linux,user,Flash,存储)