目录

参考资料

一、NAND FLASH

1.1、特性

1.2、存储单元结构

1.3、NAND FLASH寻址

1.4、坏块管理与磨损均衡

1.5、ECC校验

二、uffs

1、uffs配置相关宏


参考资料

1、rtthread-uffs

11.文件系统 - UFFS - 《RT-Thread编程手册》 - 书栈网 · BookStack

2、UFFS嵌入式NAND Flash文件系统

UFFS项目放在sourceforge上: UFFS download | SourceForge.net

项目简介(on google page): http://uffs.sf.net/  < 中文版 >

UFFS Blog:  http://all-about-uffs.blogspot.com/

讨论组: http://groups.google.com/group/uffs

一、NAND FLASH

1.1、特性

  • 相对于SPI FLASH(W25Q256)和SD卡等存储设备,NAND FLASH采用8位并口访问,具有访问速度快的优势
  • 芯片操作是以块(block)为基本单位。每块又分成多个页(page),页大小一般是2048字节,读和写都是按照扇区进行的,最小擦除单位是 block
  • NAND FLASH的写操作具有只可以写0,不能写1的特性,所以,在写数据的时候,必须先擦除block(擦除后,block数据全部为1),才可以写入
  • NAND FLASH的page由2部分组成:数据存储区(data area)和备用区域(spare area),对MT29F4G08来说,数据存储区大小为2K字节,备用区域大小为64字节。我们存储的有效数据,一般都是存储在数据存储区。备用区域一般用来存放ECC(Error Checking and Correcting)校验值

1.2、存储单元结构

图为MT29F4G08的存储结构,由2个plane组成,每个plane有2048个block,每个block由64个page组成,每个page有2K+64字节(2112字节)的存储容量。所以,MT29F4G08的总容量为:2*2048*64*(2K+64)= 553648128字节(512MB)

1.3、NAND FLASH寻址

对NAND操作实际上就是对NAND的指定地址数据进行读写,NAND FLASH的地址分为三类:

块地址(Block Address)用于在一个Page内部字节寻址

页地址(Page Address)用于在一个Block内部页寻址

列地址(Column Address)用于在NAND内部块寻址

以MT29F4G08为例,这三个地址,通过5个周期发送,首先发送列地址,在发送页地址和块地址。如表所示:

CA0~CA11为列地址,MT29F4G08的一个Page为2112字节,需要12个地址线寻址;

PA0~PA5为页地址,MT29F4G08一个Block为64个Page,需要6个地址线寻址;

BA6~BA17为块地址,MT29F4G08总共有4096个Block,需要12根地址线寻址。

1.4、坏块管理与磨损均衡

因为NAND FLASH在出厂和使用过程中都可能会产生坏块,且每个BLOCK的擦除次数是有限制的,超过规定次数后,BLOCK将无法再擦除(即产生坏块),因此,我们首先需要能对这些坏块进行识别跟标记,然后合理的分配和使用好的块,以最大限度的延长NAND FLASH的寿命。NAND FLASH的坏块识别有几种方式:1,NAND厂家出厂的时候,会在每个Block的第一个page和第二个page的spare区的第一个字节写入非0XFF的值来表示,我们可以通过这个判断该块是否为坏块;2,通过给每个Block写入数值(0XFF/0X00),然后读取出来,判断写入的数据和读取的数据是否完全一样,来识别坏块;3,通过读取数据时,校验ECC错误,来识别坏块。

1.5、ECC校验

ECC,英文全称为:Error checking and Correction,是一种对传输数据的错误检测和修正的算法。NAND FLASH存储单元是串行组织的,当读取一个单元的时候,读出放大器所检测到信号强度会被这种串行存储结构削弱,这就降低了所读信号的准确性,导致读数出错(一般只有1个bit出错)。ECC就可以检测这种错误,并修正错误的数据位。

STM32的FMC模块就支持硬件ECC计算,使用的是汉明码,可以实现1bit错误的修正和2bit以上错误的检测,支持页大小按256、512、1024、2048、4096和8192字节为单位进行ECC计算。汉明码算法需要2n bit的ECC校验数据来处理2^n bit的数据包。比如,我们一般以512字节为单位来计算ECC值,只需要24bit的ECC码即可表示 2^12=4096bit=512字节,12*2=24bit

二、uffs

UFFS是Ultra-low-cost Flash File System(超低功耗的闪存文件系统)的简称。它是国人开发的、专为嵌入式设备等小内存环境中使用Nand Flash的开源文件系统。与嵌入式中常使用的yaffas文件系统相比具有资源占用少、启动速度快、免费等优势

特征

  • 坏块耐受性,动态磨损水平
  • 支持高达 4K 字节的大页面大小
  • 无需部分页面编程
  • 分组的页面缓冲区
  • 恒定内存消耗,支持静态内存分配
  • 支持多个分区
  • 支持硬件 ECC/RS-ECC,支持 SLC/MLC NAND
  • 像文件系统 API 这样的 POSIX
  • 在 PC 上完全模拟

1、uffs配置相关宏

1.1、ECC校验方式

RT_CONFIG_UFFS_ECC_MODE

  • UFFS_ECC_SOFT
  • UFFS_ECC_HW_AUTO
  • UFFS_ECC_NONE

方式一为软件校验方式,主要用于一些不支持硬件ECC的的情况下,ECC校验由UFFS完成。由于ECC数据校验比较耗时,因此这种方式会导致读写速度降低,不推荐使用。

方式二为硬件自动方式。这种方式下,ECC校验由NAND驱动程序完成,UFFS不做任何ECC校验工作。这种方式比较灵活,驱动程序可以自行决定ECC数据的存放位置。推荐使用的

方式三为无ECC校验方式。在这种方式下,UFFS不使用ECC校验,由于NAND芯片可能出现数据写入错误,并且ECC可以识别并纠正一定bit的错误(一般ECC可以纠正一个bit的错误,可以识别2个bit的错误但是无法纠正,但这并不绝对,ECC bits越多其纠错能力越强)。在NAND设备上通常会有一定的安全风险。

1.2、坏块标记

RT_UFFS_USE_CHECK_MARK_FUNCITON

rtconfig.h中定义。NAND容易产生坏块,一般NAND文件系统(如yaffs)都需要提供检测坏块和标记坏块的功能。为了简化UFFS驱动编写,UFFS提供了上面这个宏。当打开这个宏时,NAND驱动需要提供坏块检测与坏块标记这两个函数。如果关闭这个宏,UFFS将会借助NAND驱动提供的页读写函数实现坏块检查与标记。

13、内存精简

/*** \note uffs cache the block info for opened directories and files,*       a practical value is 5 ~ MAX_OBJECT_HANDLE*/
#define MAX_CACHED_BLOCK_INFO   50/** * \note the bigger value will bring better read/write performance.*       but few writing performance will be improved when this *       value is become larger than 'max pages per block'*/
#define MAX_PAGE_BUFFERS        40

rt-thread驱动篇(08)---STM32F429单片机NAND FLASH驱动相关推荐

  1. linux下nand flash驱动工作原理,Linux下Nand Flash 驱动代码分析

    随着越来越多的平台支持从Nand Flash 中启动,掌握Nand Flash 的驱动编写有着重要的现实意义,由于内核已经完成了大部分的工作,实际工作中大部分工程师对Nand Flash 驱动只是简单 ...

  2. 《Linux驱动:nand flash驱动看这一篇就够了》

    文章目录 一,前言 二,硬件电路 2.1 Nand flash相关 2.2 S3c2440相关 2.3 Nand flash 位反转 三,Nand flash驱动框架 四,S3c2440 Nand F ...

  3. nand flash 经典 全面 ------如何编写Linux下Nand Flash驱动

    Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flash的常见的物理特性,且深入介绍了Nand Flash的一些高级功能,然后开 ...

  4. 如何编写linux下nand flash驱动

    http://www.cnblogs.com/sankye/articles/1638852.html 向作者Sankye致敬 [编写驱动之前要了解的知识] 1.       硬件特性: [Flash ...

  5. Linux MTD架构下的nand flash驱动详解

    转载自:http://blog.csdn.net/wang_zheng_kai/article/details/18988521 有了前面的基础(Nandflash详解:https://blog.cs ...

  6. NAND FLASH学习笔记之MTD下nand flash驱动(一)

    转载请注明:http://blog.csdn.net/wang_zheng_kai/article/details/18988521 有了前面的基础,我们就可以研究MTD下的nand驱动了,我这里用的 ...

  7. Nand flash驱动的编写与移植

    1 Nand flash工作原理     S3C2410板的Nand Flash支持由两部分组成:Nand Flash控制器(集成在S3C2410 CPU)和Nand Flash存储 芯片(K9F12 ...

  8. linux驱动编写(nand flash驱动)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很长一段时间,nand flash都是嵌入式的标配产品.nand flash价格便宜,存储量大, ...

  9. linux下nand flash驱动工作原理,1.3.4. Nand flash驱动工作原理

    1.3.4. Nand flash驱动工作原理 在介绍具体如何写Nand Flash驱动之前,我们先要了解,大概的整个系统,和Nand Flash相关的部分的驱动工作流程,这样,对于后面的驱动实现,才 ...

最新文章

  1. 经典C语言程序100例之三五
  2. nginx location配置详解
  3. 【转】使用JMeter对数据库做压力测试
  4. shell-awk详细笔记
  5. google protobuf_protobuf 指南
  6. sqlserver常用语法
  7. HP 288 Pro G5 BIOS降级F5
  8. 360安全卫士清理C盘
  9. win10 网卡驱动正常搜索不到WiFi信号 解决方法
  10. 一则 HTTP 405 Method Not Allowed 的解决办法
  11. Android实现省市区三级联动效果
  12. MM 移动类型-入门篇
  13. Android本应用数据清除管理器
  14. imx6ul spi 设备驱动开发
  15. java zxing条形码去掉两边空白,密度调整,固定条形码宽度
  16. Retinanet网络结构简介
  17. Android五大数据存储
  18. R时间序列分析|SP500股指的ARIMA模型预测与残差ARCH效应分析
  19. 几种常见的RAID工作模式讨论
  20. 语音和面部识别技术能帮助AI在情商上超越人类吗

热门文章

  1. java抽象语法树(ast),【你应该了解的】抽象语法树AST
  2. 价值感知:如何评价企业 IT 项目的价值?
  3. 对抗式主动学习三部曲(GAAL 、VAAL、TA-VAAL)---入内不亏
  4. 移动支付之争,NFC较QR Code更为适合发展
  5. 补充知识——干涉仪的原理
  6. H5+CSS3实现简单表情包
  7. 蓝牙耳机哪个品牌性价比高?适合圣诞送礼的高性价比蓝牙耳机推荐
  8. flex布局设置换行无间隙
  9. jsp成绩单综合设计
  10. telnet安装和使用教程