FLASH的类型,结构,比较,驱动编写.docx

上传人:小飞机 文档编号:4884556 上传时间:2023-05-21 格式:DOCX 页数:31 大小:272.02KB
返回 下载 相关 举报
FLASH的类型,结构,比较,驱动编写.docx_第1页
第1页 / 共31页
FLASH的类型,结构,比较,驱动编写.docx_第2页
第2页 / 共31页
FLASH的类型,结构,比较,驱动编写.docx_第3页
第3页 / 共31页
FLASH的类型,结构,比较,驱动编写.docx_第4页
第4页 / 共31页
FLASH的类型,结构,比较,驱动编写.docx_第5页
第5页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《FLASH的类型,结构,比较,驱动编写.docx》由会员分享,可在线阅读,更多相关《FLASH的类型,结构,比较,驱动编写.docx(31页珍藏版)》请在三一办公上搜索。

1、最近一直在致力于基于ARM920T的FLASH的读写,虽然这部分一般没有 多少人屑于研究,认为比较简单(U-boot和VIVI中都有现成的支持程 序),但对于初学的我,还是尽心尽力地学习一下,目的在于自己编写 一个通用flash驱动程序,以下是前段时间对主要两种flash的认识,大致整理了一下FLASH所谓Flash,是内存(Memory)的一种,但兼有RAM和ROM的优点,是一种可在系统 (In-System)进行电擦写,掉电后信息不丢失的存储器,同时它的高集成度和低成本使它 成为市场主流。Flash芯片是由内部成千上万个存储单元组成的,每个单元存储一个bit。具有低功耗、 大容量、擦写速度

2、快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌 入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。作为一种非易失性存储器,Flash在系统中通常用于存放程序代码、常量表以及一些在 系统掉电后需要保存的用户数据等。常用的Flash为8位或16位的数据宽度,编程电压为 单3.3V。主要的生产厂商为INTEL、ATMEL、AMD、HYUNDAI等。Flash技术根据不同的应用 场合也分为不同的发展方向,有擅长存储代码的NOR Flash和擅长存储数据的NAND Flash。 一下对NOR Flash和NAND Flash的技术分别作了相应的介绍。一.NOR Flas

3、h1. 市场介绍随着技术的发展,愈来愈多的电子产品需要更多的智能化,这也 对这些产品的程序存储提出了更高的要求。Flash作为一种低成本、 高集成度的存储技术在电子产品领域的应用非常广泛。今天90%的PC、 超过90%的手机、超过50%的Modem,都是用了 Flash,如今Flash市 场规模已经超过了 100亿美元。如此巨大的市场规模,也导致市场上的Flash品牌层出不穷。在 NOR Flash市场中,Intel公司是非常重要的一家生产厂商。Intel公 司生产的Flash芯片多年来占据着市场的很大份额,而它的芯片封装 形式和接口也成为业界标准,从而为不同品牌的Flash带来了兼容的 方便

4、。2. NOR Flash的硬件设计和调试首先,Flash要通过系统总线接在处理器上,即保持一个高速的数据交换的通道。 那么就必须了解一下Flash在系统总线上的基本操作。1)先了解一下处理器存储空间BANK的概念。以32位处理器S3C2410为例,理论 上可以寻址的空间为4GB,但其中有3GB的空间都预留给处理器内部的寄存器和其他设 备了,留给外部可寻址的空间只有1GB,也就是0X000000000X3fffffff,总共应该有 30根地址线。这1GB的空间,2410处理器又根据所支持的设备的特点将它分为了 8份, 每份空间有128MB,这每一份的空间又称为一个BANK。为方便操作,2410

5、独立地给了 每个BANK 一个片选信号(nGCS7nGCS0)。其实这8个片选信号可以看作是2410处理 器内部30根地址线的最高三位所做的地址译码的结果。正因为这3根地址线所代表的 地址信息已经由8个片选信号来传递了,因此2410处理器最后输出的实际地址线就只 有A26A0 (如下图1)图1 2410内存BANK示意图2)以图2(带nWAIT信号)为例,描述一下处理器的总线的读操作过程,来说明Flash 整体读、写的流程。第一个时钟周期开始,系统地址总线给出需要访问的存储空间地址,经 过Tacs时间后,片选信号也相应给出(锁存当前地址线上地址信息),再经过Tcso时间后, 处理器给出当前操作

6、是读(nOE为低)还是写(new为低),并在Tacc时间内将数据数据准 备好放之总线上,Tacc时间后(并查看nWAIT信号,为低则延长本次总线操作),nOE拉 高,锁存数据线数据。这样一个总线操作就基本完成图2带nWAIT信号的总线读操作3)NOR Flash的接口设计(现代的29LV160芯片)29LV160存储容量为8M字节,工作电压为3.3V,采用56脚TSOP封装或48脚FBGA封装,16位数据宽度。29LV160仅需单3.3V电压即可完成在系统的编程与擦除操作,通过对其内 部的命令寄存器写入标准的命令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦 除以及其他操作。引脚信号

7、描述和接口电路分别如图3和图4所示。信号I地址输入意妹DQ15-DQ0IO数据输入输出引脚pEh :PE2I激活芯片的控制谩辑ADEI输出使能/WEI写使能/RP4复位下电控制/BYTEI字节使能,低电平,戒.模式;高电平,部模式;STS:0.指示内部瘀态机的茯.态;VPENI擦除斓翱加锁便能VCG/GND. F内部电源地麻入媛存反电源此VC.CQA3NDP输出缓存区电源此图3 29LV160引脚信号描述图 4 FLASH (29LV160)接口电路DID3D4D5DgD7D8D3A1.0D1UAllDllA12D12ABD13A 4P14A15DI 5A16Al?ASA1.9A20A22A2

8、1府STSVCCQBT7EOEVCCWTVCCCE_OGXDCE_1GXDL 口 门 Ci上GXD353&4044464P况,513436JPDI。,41454750DU ,52可以从信号引脚图3和总线操作图2看出,NOR Flash的接口和系统总线接口完全匹配, 可以很容易地接到系统总线上。3. NOR Flash的软件设计Flash的命令很多,但常用到的命令就3种:识别、擦除、编程命令。以下就对3种命令作分别的简要介绍:1) NOR Flash 的识别29lv160_CheckId()U8 tmp;U16 manId,devId;int i;_RESET();_WR(0x555,0xaa)

9、;_WR(0x2aa,0x55);_WR(0x555,0x90);manId=_RD(0x0);devId=_RD(0x1);_RESET();printf(Manufacture ID(0x22C4)=%4x, DeviceID(0x2249)=%4xn”,manId,devId);if(manId = 0x22C4 & devId = 0x2249)return 1;elsereturn 0;NOR Flash的识别程序由四个读写周期就可以完成,在Flash的相关 命令表中可以查到相应ID识别的命令。2) NOR Flash 的擦除要对NOR Flash进行写操作,就一定要先进性擦除操作。

10、NOR Flash的 擦除都是以块(sector)为单位进行的,但是每一种型号的Flash的 sector的大小不同,即使在同一片的Flash内,不同sector的大小 也是不完全一样的。void 29lv160db_EraseSector(int targetAddr)printf(Sector Erase is started!n);_RESET();_WR(0x555,0xaa);_WR(0x2aa,0x55);_WR(0x555,0x80);_WR(0x555,0xaa);_WR(0x2aa,0x55);_WR(BADDR2WADDR(targetAddr),0x30);return

11、_WAIT(BADDR2WADDR(targetAddr);图 5 Erase Operation*个*个*如上图5所示,擦除操作时还要有一个关键的操作擦除查询算法,即等待Flash擦除的过程,并返回擦除是否成功的结果。算法如右图6所示*/Int _WAIT(void)unsigned int state, flashStatus, old;old=_RD(BADDR2WADDR(0x0);while(1)flashStatus=_RD(BADDR2WADDR(0x0);if( (old&0x40) = (flashStatus&0x40)break;if( flashStatus&0x20

12、)/printf(DQ5=1:%xn,flashStatus);old=_RD(BADDR2WADDR(0x0);flashStatus=_RD(BADDR2WADDR(0x0);if( (old&0x40) = (flashStatus&0x40)return 0;else return 1;/printf(.);old=flashStatus;return 1;/printf(!n);图 6 Toggle Bit Algorithm以上的方法为查询数据线上的一个特定位Toggle位。此外还有2种检测方法,一种为提供额外 的Busy信号,处理器通过不断查询Busy信号来得知Flash的擦除操

13、作是否完成,一般较少应 用;一种为查询Polling位。3) NOR Flash的编程操作int 29lv160db_ProgFlash(U32 realAddr,U16 data) _WR(0x555,0xaa);_WR(0x2aa,0x55);_WR(0x555,0xa0);_WR(BADDR2WADDR(realAddr),data);return _WAIT(BADDR2WADDR(realAddr);对擦除过的Flash进行编程比较简单,但仍然用到以上提到的查询算法,速度比较慢,一般 为20uS,最长的达到500uS。二.NAND FLASHNAND FLASH在对大容量的数据存储需

14、要中日益发展,到现今,所有的数码相机、多数 MP3播放器、各种类型的U盘、很多PDA里面都有NAND FLASH的身影。1. Flash的简介NOR Flash: 程序和数据可存放在同一片芯片上,拥有独立的数据总线和 地址总线,能快速随机地读取,允许系统直接从Flash中读 取代码执行,而无需先将代码下载至RAM中再执行 可以单字节或单字编程,但不能单字节擦除,必须以块为单 位或对整片执行擦除操作,在对存储器进行编程之前需要对 块或整片进行预编程和擦除操作。NAND FLASH 以页为单位进行读写操作,1页为256B或512B;以块为单位 进行擦除操作,1块为4KB、8KB或16KB。具有快编

15、程和快擦 除的功能 数据、地址采用同一总线,实现串行读取。随机读取速度慢 且不能按字节随机编程 芯片尺寸小,引脚少,是位成本(bit cost)最低的固态存 储器 芯片存储位错误率较高,推荐使用ECC校验,并包含有冗余 块,其数目大概占1%,当某个存储块发生错误后可以进行标 注,并以冗余块代替 Samsung. TOSHIBA和Fujistu三家公司支持采用NAND技术 NAND Flasho目前,Samsung公司推出的最大存储容量可达 8Gbit。NAND 主要作为 SmartMedia 卡、Compact Flash 卡、 PCMCIA ATA卡、固态盘的存储介质,并正成为Flash磁盘

16、技 术的核心。2. NAND FLASH 和 NOR FLASH 的比较1)性能比较flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦 写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内 进行,所以大多数情况下,在进行写入操作之前必须先执行擦除NAND 器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将 目标块内所有的位都写为0。由于擦除NOR器件时是以64128KB的块进行的,执行一个写入/ 擦除操作的时间为5s,与此相反,擦除NAND器件是以832KB的块进 行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了 NOR和NADN之间

17、的性能差 距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更 多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决 方案时,设计师必须权衡以下的各项因素。 NOR的读速度比NAND稍快一些。 NAND的写入速度比NOR快很多。 NAND的4ms擦除速度远比NOR的5s快。 大多数写入操作需要先进行擦除操作。 NAND的擦除单元更小,相应的擦除电路更少。2)接口差别NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容 易地存取其内部的每一个字节。NAND器件使用复杂的I/O 口来串行地存取数据,共用8位总线(各 个产品或厂商的方法可能各不相同)。8个引脚用来

18、传送控制、地址和 数据信息。NAND读和写操作采用512字节的页和32KB的块为单位,这 一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以 取代硬盘或其他块设备。3)容量和成本NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结 构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格,大概只有NOR 的十分之一。NOR flash占据了容量为116MB闪存市场的大部分,而NAND flash只是用在8 128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储, NAND在CompactFlash、Secure

19、Digital、PC Cards和MMC存储卡市场上所占份额最大。4)可靠性和耐用性采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要 扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐 用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写 次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型 的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时 间内的删除次数要少一些。5) 位交换(错误率)所有flash器件都受位交换现象的困扰。在某些情况下(很少见, NAN

20、D发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。 一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小 小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能 解决了。当然,如果这个位真的改变了,就必须采用错误探测/错误更 正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商 建议使用NAND闪存的时候,同时使用EDC/ECC算法。这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如 果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必 须使用EDC/ECC系统以确保可靠性。6) 坏块处理NAND器件中的坏块是随机分布的。以

21、前也曾有过消除坏块的努力, 但发现成品率太低,代价太高,根本不划算。NAND器件需要对介质进 行初始化扫描以发现坏块,并将坏块标记为不可用。现在的FLSAH 一 般都提供冗余块来代替坏块如发现某个块的数据发生错误(ECC校验), 则将该块标注成坏块,并以冗余块代替。这导致了在NAND Flash中, 一般都需要对坏块进行编号管理,让每一个块都有自己的逻辑地址。7) 易于使用可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连 接,并可以在上面直接运行代码。由于需要I/O接口,NAND要复杂得 多。各种NAND器件的存取方法因厂家而异。在使用NAND器件时,必 须先写入驱动程序,才能继续执

22、行其他操作。向NAND器件写入信息需 要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器 件上自始至终都必须进行虚拟映射。8) 软件支持当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级 的用于磁盘仿真和闪存管理算法的软件,包括性能优化。在NOR器件 上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时, 通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件 在进行写入和擦除操作时都需要MTD。使用NOR器件时所需要的MTD要 相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包 括 M-System 的 TrueFFS 驱动,该驱

23、动被 Wind River SystemMicrosoftQNX Software System、Symbian和Intel等厂商所采用。驱动还用于 对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处 理和损耗平衡。在掌上电脑里要使用NAND FLASH存储数据和程序,但是必须有 NOR FLASH来启动。除了 SAMSUNG处理器,其他用在掌上电脑的主流处 理器还不支持直接由NAND FLASH启动程序。因此,必须先用一片小的 NOR FLASH启动机器,在把OS等软件从NAND FLASH载入SDRAM中运 行才行。9)主要供应商NOR FLASH的主要供应商是INT

24、EL ,MICRO等厂商,曾经是FLASH 的主流产品,但现在被NANDFLASH挤的比较难受。它的优点是可以直 接从FLASH中运行程序,但是工艺复杂,价格比较贵。NAND FLASH的主要供应商是SAMSUNG和东芝,在U盘、各种存储 卡、MP3播放器里面的都是这种FLASH,由于工艺上的不同,它比 NORFLASH拥有更大存储容量,而且便宜。但也有缺点,就是无法寻址 直接运行程序,只能存储数据。另外NAND FLASH非常容易出现坏区, 所以需要有校验的算法。3. NAND Flash的硬件设计NAND FLASH是采用与非门结构技术的非易失存储器,有8位和16位两种组织形式,下 面以8

25、位的NAND FLASH进行讨论。1)接口信号与NOR Flash相比较,其数据线宽度只有8bit,没有地址总线,I/O 接口可用于控制命令和地址的输入,也可用于数据的输入和输出,多 了 CLE和ALE来区分总线上的数据类别。信号类型描述CLEO命令锁存使能ALEO地址锁存使能nFCEONAND Flash 片选NFREONAND Flash读使能nFWEONAND Flash写使能NCONINAND Flash 配置R/nBINAND Flash Ready/Busy2)地址结构NAND FLASH主要以页(page)为单位进行读写,以块(block)为单位进行擦除。FLASH 页的大小和块

26、的大小因不同类型块结构而不同,块结构有两种:小块(图7)和大块(图8),小块NAND FLASH包含32个页,每页512+16字节;大块NAND FLASH包含64页,每页2048+64 字节。64 K Pages (=2,048 Blocks)1/0 01/0 11/0 211/0 3I/O 4I/O 5I/O 61/0 7Column Address1 st CycleAoAiA2A3A4A5AeA?2nd CycleA9AioAuA12Ai3A14Al5A16Row Address (Page Address)3rd CycleA1ZAibAl 9A20A21A22A23A24图7小块类

27、型NAND FLASH1 Page = (2K + 64)Bytes1 Block = (2K + 64)B x 64 Pages= (128K + 4K) Bytes1 Device = (2K+64)B x 64Pages x 2048 Bk1/0 0I/O 11/0 2I/O 3I/O 4I/O 5I/O 61/0 71 st CycleAoAiA2A3A4A5A&A?2nd CycleAsA9A I 2A11LrLL*L3rd CycleA12A13Al4A15A15A17A18Aig4th CycleA2CA21AZ2A23A24A25A26A275th CycleA2BTL,LTL

28、七TLLTLColumn AddressColumn AddressRow AddressRow AddressRow Address图8大块类型NAND FLASH其中,512B (或1024B)用于存放数据,16B (64B)用于存放其他信息(包括:块好坏 的标记、块的逻辑地址、页内数据的ECC校验和等)。NAND设备的随机读取得效率很低, 一般以页为单位进行读操作。系统在每次读一页后会计算其校验和,并和存储在页内的冗余 的16B内的校验和做比较,以此来判断读出的数据是否正确。大块和小块NAND FLASH都有与页大小相同的页寄存器,用于数据缓存。当读数据时, 先从NAND FLASH内存

29、单元把数据读到页寄存器,外部通过访问NAND FLASH I/O端口获得页 寄存器中数据(地址自动累加);当写数据时,外部通过NAND FLASH I/O端口输入的数据 首先缓存在页寄存器,写命令发出后才写入到内存单元中。3)接口电路设计(以下以2410和K9F1208U为例)2410处理器拥有专门针对NAND设备的接口,可以很方便地和NAND设备对接,如图9所示。 虽然NAND设备的接口比较简单,容易接到系统总线上,但2410处理器针对NAND设备还集 成了硬件ECC校验,这将大大提高NAND设备的读写效率。当没有处理器的ECC支持时,就 需要由软件来完成ECC校验,这将消耗大量的CPU资源

30、,使读写速度下降。图9 S3C2410与NAND FLASH接口电路示意图3. NAND FLASH的软件编写和调试NAND设备的软件调试一般分为以下几个步骤:设置相关寄存器、NAND设备的初始化、 NAND设备的识别、NAND设备的读擦写(带ECC校验)NAND设备的操作都是需要通过命令来完成,不同厂家的命令稍有不同,以下一 Samsung 公司的K9F1208U0M命令表为例介绍NAND设备的软件编写。Fiiociieinisu Cydfr2nd. Cycte3d. CyetoAcceplcJble Ccmmand 4面叫BusyRead 1OWCHh*Read 2SDhRead ID孰h

31、RgFFhQPage Program0h10h啊TI iDurtWrty)2-eon11h.Copy-Back ProgramfT-nje)QDh10h-Progrsmi;Dummy03h附11hStock Erm潴60hDOhMuIti-Plane- Block Er,绍Wh_eOhDQhRead Status70h0Read MuhPiane Status7lhs0表 2 K9F1208U0M Command Sets1)根据2410寄存器定义如下的命令宏#define NF_CMD(cmd) rNFCMD=cmd;#define NF_ADDR(addr)rNFADDR=addr;#de

32、fine NF_nFCE_L() rNFCONF&=(111);#define NF_nFCE_H() rNFCONF|=(111);#define NF_RSTECC() rNFCONF|=(112);#define NF_RDDATA()(rNFDATA)#define NF_WRDATA(data) rNFDATA=data;#define NF_WAITRB() while(!(rNFSTAT&(10); /wait tWB and check F_RNB pin.2) NAND设备的初始化static void NF_Init(void)/Flash 初始化 rNFCONF=(115

33、)|(114)|(113)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH1 0);/设置NAND设备的相关寄存器/ 1 111,1 xxx, r xxx, r xxx/ En 512B 4step ECCR nFCE=H tACLS tWRPH0 tWRPH1NF_Reset();static void NF_Reset(void)int i;NF_nFCE_L();NF_CMD(0xFF);for(i=0;i10;i+);NF_WAITRB();NF_nFCE_H();3) NAND设备的识别0xec76static U16 NF_CheckId(void)in

34、t i;U16 id;NF_nFCE_L();NF_CMD(0x90);NF_ADDR(0x0);/Flash 重置/reset command/tWB = 100ns/wait 200500us;/#define ID_K9F1208U0M/Id辨别for(i=0;i10;i+);/wait tWB(100ns)id=NF_RDDATA()8;id|=NF_RDDATA();/ Maker code(K9F1208U:0xec)/ Devide code(K9F1208U:0x76)NF_nFCE_H();return id;4) NAND的擦操作static int NF_EraseBlo

35、ck(U32 block) U32 blockPage=(block8)&0xff);NF_ADDR(blockPage16)&0xff);NF_CMD(0xd0q2l);for(i=0;i10;i+);NF_WAITRB();NF_CMD(0x70);if (NF_RDDATA()&0x1)NF_nFCE_H();/ Erase one block 1st command/ Page number=0/ Erase one blcok 2nd command/wait tWB(100ns)/?/ Wait tBERS max 3ms./ Read status command/ Erase

36、errorUart_Printf(ERASE_ERROR:block#=%dn,block) return 0;elseNF_nFCE_H();return 1;5) NAND的读操作static int NF_ReadPage(U32 block,U32 page,U8 *buffer)/读 Flashint i;unsigned int blockPage;U8 ecc0,ecc1,ecc2;U8 *bufPt=buffer;U8 se16;page=page&0x1f;blockPage=(block8)&0xff);NF_ADDR(blockPage16)&0xff);for(i=0;

37、i10;i+);NF_WAITRB();for(i=0;i512;i+)*bufPt+=NF_RDDATA();/32 页/1Bolck 包含 32 页/ Initialize ECC/ Read command/ Column = 0/ Block & Page num./wait tWB(100ns)/ Wait tR(max 12us)/ Read one page/*ECC 校验*/ecc0=rNFECC0;ecc1=rNFECC1;ecc2=rNFECC2;q3for(i=0;i16;i+)sei=NF_RDDATA();/利用2410自带的硬件ECC校验/ Read spare a

38、rray/读页内冗余的16BNF_nFCE_H();if(ecc0=se0 & ecc1=se1 & ecc2=se2)/未知使用哪一种软件规范?比较数据结果是否正确Uart_Printf(ECC OK:%x,%x,%xn”,se0,se1,se2);return 1;elseUart_Printf(ECC ERROR(RD):read:%x,%x,%x, reg:%x,%x,%xn”,se0,se1,se2,ecc0,ecc1,ecc2);return 0;6) NAND的写操作static int NF_WritePage(U32 block,U32 page,U8 *buffer)/写

39、Flashint i;U32 blockPage=(block8)&0xff);NF_ADDR(blockPage16)&0xff);/ Initialize ECC/?Read Mode 1/ Write 1st command,数据输入/ Column 0/ Block & page num.for(i=0;i512;i+)NF_WRDATA(*bufPt+);/ Write one page to NFM from bufferseBuf0=rNFECC0;seBuf1=rNFECC1;seBuf2=rNFECC2;seBuf5=0xff;for(i=0;i16;i+)NF_WRDATA

40、(seBufi);q5NF_CMD(0x10);/ Marking good block/ Write spare array(ECC and Mark)/ Write 2nd commandfor(i=0;i10;i+);NF_WAITRB();NF_CMD(0x70);/tWB = 100ns. /?/wait tPROG 200500us;/ Read status command/twhr=60nsfor(i=0;i3;i+);if (NF_RDDATA()&0x1)/ Page write errorNF_nFCE_H();Uart_Printf(PROGRAM_ERROR:bloc

41、k#=%dn,block);return 0;elseNF_nFCE_H();#if (WRITEVERIFY=1)/return NF_VerifyPage(block,page,pPage);#elsereturn 1;#endif以下讨论一下NAND设备上所支持的文件系统,大概现在有以下几种:A. JFFS2 (没有坏块处理,支持大容量存储的时候需要消耗大量的内 存,大量的随机访问降低了 NAND设备的读取效率)和YAFFS (速 度快,但不支持文件的压缩和解压)B. 支持 DiskOnChip 设备的 TRUEFFS (True Flash File System). TRUEFFS是

42、M-Systems公司为其产品DiskOnChip开发的文件系统, 其规范并不开放。C. 由 SSFDC (Solid State Floppy Disk Card)论坛定义的支持SM 卡的DOS-FAT。SM卡的DOS-FAT文件系统是由SSFDC论坛定义的, 但它必须用在标准的块设备上。对于大量用在各类存储卡上的NAND设备而言,他们几乎都采用FAT文件系统,而在嵌 入式操作系统下,还没有驱动程序可以直接让NAND设备采用文件系统,就技术角度来说, FAT文件系统不是很适合NAND设备,因为FAT文件系统的文件分区表需要不断地擦写,而 NAND设备的只能有限次的擦写。在上面已经很明显的提到,NAND设备存在坏块,为和上层文件系统接口,NAND设备的 驱动程序必须给文件系统提供一个可靠的存储空间,这就需要ECC (Error Corection Code) 校验,坏块标注、地址映射等一系列的技术手段来达到可靠存储目的。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号