初始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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |