大容量NANDFLASH在ARM嵌入式系统中的设计与实现
发布时间:2008/5/27 0:00:00 访问次数:401
随着嵌人式系统在数码相机、数字摄像机、移动电话、mp3音乐播放器等移动设备中越来越广泛的应用,flash存储器已经逐步取代其他半导体存储元件,成为嵌入式系统中主要数据和程序载体。flash存储器又称闪存,是一种可在线多次擦除的非易失性存储器,即掉电后数据不会丢失。flash存储器还具有体积小、功耗低、抗振性强等优点,是嵌入式系统的首选存储设备。
nand和norflash是现在市场上两种主要的非易失闪存芯片,这两种类型的flash区别在于:
nor类型flash可以按照字节访问,所以存放在flash里的程序可以直接执行,而nand类型flash是串行访问的,需要先把程序读取到内存然后再从内存中运行。与nor型相比,nand型闪存的优点是容量大,但是nand型的速度比较慢,因为他的i/o端口只有8(或16)个,要完成地址和数据的传输就必需让这些信号轮流传送。nand型flash具有极高的单元密度,容量可以比较大,价格相对便宜。本文采用samsung公司的nand型flash存储设备k9f2808u0c。
2系统硬件结构及接口电路
2.1arm芯片介绍
arm公司自1990年正式成立以来,在32位risc(reducedinstructionsetcomputer)cpu开发领域不断取得突破,目前已经占有75%以上的32位risc嵌入式产品市场。在低功耗、低成本的嵌人式应用领域确立了市场领导地位。
philips公司的lpc2210是基于一个支持实时仿真和跟踪的32位arm7tdmi-stmcpu的微控制器,片内128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟频率下运行。lpc2210极低的功耗、多个32位定时器、8路10位adc以及9个外部中断使其特别适用于工业控制、医疗系统、访问控制和pos机。由于内置了宽范围的串行通信接口,他们也非常适合于通信网关、协议转换器、嵌入式软modem以及其他各种类型的应用。
2.2k9f2808u0c芯片的结构和特点
k9f2808u0c是samsung公司生产的nand型flash存储器。
k9f2808u0c存储容量为132mb,其中主数据区为128mb,辅助数据区为4mb,工作电压为2.7~3.6v,i/o端口宽度为8b。片内写控制自动实现编程和擦除所有功能,包括内部校验、脉冲的周期和数据冗余。
芯片的存储空间是按照块和页的概念来组织的,一个芯片分为1024个块,每个块有32页,每一页有528b。528b中分为512b的数据区和16个字节的空闲区,空闲区用于存放ecc代码、坏块信息和文件系统相关代码。一个528b的数据寄存器作为数据缓冲单元,用来实现i/0缓冲和存储器之间的数据传输。
使用nand型flash的关键技术之一是存储空间的管理。samsung公司的nandflash存储器有一些初始无效块(包含一个或多个坏位的存储块),制造商不保证这些块的可靠性。nandflash容许成品中有坏块存在,这是采用nand技术所特有的现象。坏块的存在并不影响有效块的性能。但是,系统级的设计必须能够用地址映射把这些坏块屏蔽掉。芯片在出厂时,除保存坏块信息的区域外,其他部分一律被擦除(值为0xff),对坏块的读操作是允许的,但不推荐进行写和擦除操作,以免由于结构方面的原因使邻近的块也失效。系统设计时必须根据初始的坏块信息识别出坏块,并建立坏块列表。进行写或擦除操作时将欲操作块的地址与坏块地址表的地址相比较,若是坏块则应跳过。为了提高存储空间的效率,单个位数据错误引起的读写失败都可以用ecc(校错和纠错)方法处理。
芯片在使用过程中,可能有新坏块的产生,为了系统的可靠性,必须对此情况加以考虑。在数据写入或块擦除操作后,如果读状态寄存器出现错误,则表示块内有坏页存在,也即表明此块已坏,因为块内坏页的存在并不影响其他页的读写,这时可采用块替换操作来把页内有用数据转移到其他空闲块内,并把坏块信息存入坏块表中。
2.3k9f2808u0c与lpc2210的连接
k9f2808u0c与lpc2210的连接如图3所示,使用8位数据总线d0~d7与k9f2808u0c的i/o0~i/o7引脚相连,使用数据总线来发送地址、数据和命令。k9f2808u0c的片选信号由cs3控制,即使用lpc2210的外部存储器接口的bank3地址空间,而cle,ale信号分别由a0,a1控制。
3读写操作流程
首先向i/o写人编程指令80h,然后使用3个时钟周期写入目的地址(a0~a23),接着向i/o写入数据。数据发送完成后,写入指令10h启动页编程,此时芯片内部的逻辑电路将进行页擦除和数据编程操作。微控制器可以读状态指令70h来读取状态寄存器的值,若d6位为1,则表明写操作完成。
写操作完成后,通过读取状态寄存器的d0位判断编程是否成功,若d0位为0,则表示编程成功;否则表示编程失败。
k9f2808u0c的块擦除和读数据操作如图5所示:对于k9f2808u0c的擦除是以块为单位,擦除时首先写入块擦除命令60h,然后输入要擦除块的地址,再写入指令doh启动
随着嵌人式系统在数码相机、数字摄像机、移动电话、mp3音乐播放器等移动设备中越来越广泛的应用,flash存储器已经逐步取代其他半导体存储元件,成为嵌入式系统中主要数据和程序载体。flash存储器又称闪存,是一种可在线多次擦除的非易失性存储器,即掉电后数据不会丢失。flash存储器还具有体积小、功耗低、抗振性强等优点,是嵌入式系统的首选存储设备。
nand和norflash是现在市场上两种主要的非易失闪存芯片,这两种类型的flash区别在于:
nor类型flash可以按照字节访问,所以存放在flash里的程序可以直接执行,而nand类型flash是串行访问的,需要先把程序读取到内存然后再从内存中运行。与nor型相比,nand型闪存的优点是容量大,但是nand型的速度比较慢,因为他的i/o端口只有8(或16)个,要完成地址和数据的传输就必需让这些信号轮流传送。nand型flash具有极高的单元密度,容量可以比较大,价格相对便宜。本文采用samsung公司的nand型flash存储设备k9f2808u0c。
2系统硬件结构及接口电路
2.1arm芯片介绍
arm公司自1990年正式成立以来,在32位risc(reducedinstructionsetcomputer)cpu开发领域不断取得突破,目前已经占有75%以上的32位risc嵌入式产品市场。在低功耗、低成本的嵌人式应用领域确立了市场领导地位。
philips公司的lpc2210是基于一个支持实时仿真和跟踪的32位arm7tdmi-stmcpu的微控制器,片内128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟频率下运行。lpc2210极低的功耗、多个32位定时器、8路10位adc以及9个外部中断使其特别适用于工业控制、医疗系统、访问控制和pos机。由于内置了宽范围的串行通信接口,他们也非常适合于通信网关、协议转换器、嵌入式软modem以及其他各种类型的应用。
2.2k9f2808u0c芯片的结构和特点
k9f2808u0c是samsung公司生产的nand型flash存储器。
k9f2808u0c存储容量为132mb,其中主数据区为128mb,辅助数据区为4mb,工作电压为2.7~3.6v,i/o端口宽度为8b。片内写控制自动实现编程和擦除所有功能,包括内部校验、脉冲的周期和数据冗余。
芯片的存储空间是按照块和页的概念来组织的,一个芯片分为1024个块,每个块有32页,每一页有528b。528b中分为512b的数据区和16个字节的空闲区,空闲区用于存放ecc代码、坏块信息和文件系统相关代码。一个528b的数据寄存器作为数据缓冲单元,用来实现i/0缓冲和存储器之间的数据传输。
使用nand型flash的关键技术之一是存储空间的管理。samsung公司的nandflash存储器有一些初始无效块(包含一个或多个坏位的存储块),制造商不保证这些块的可靠性。nandflash容许成品中有坏块存在,这是采用nand技术所特有的现象。坏块的存在并不影响有效块的性能。但是,系统级的设计必须能够用地址映射把这些坏块屏蔽掉。芯片在出厂时,除保存坏块信息的区域外,其他部分一律被擦除(值为0xff),对坏块的读操作是允许的,但不推荐进行写和擦除操作,以免由于结构方面的原因使邻近的块也失效。系统设计时必须根据初始的坏块信息识别出坏块,并建立坏块列表。进行写或擦除操作时将欲操作块的地址与坏块地址表的地址相比较,若是坏块则应跳过。为了提高存储空间的效率,单个位数据错误引起的读写失败都可以用ecc(校错和纠错)方法处理。
芯片在使用过程中,可能有新坏块的产生,为了系统的可靠性,必须对此情况加以考虑。在数据写入或块擦除操作后,如果读状态寄存器出现错误,则表示块内有坏页存在,也即表明此块已坏,因为块内坏页的存在并不影响其他页的读写,这时可采用块替换操作来把页内有用数据转移到其他空闲块内,并把坏块信息存入坏块表中。
2.3k9f2808u0c与lpc2210的连接
k9f2808u0c与lpc2210的连接如图3所示,使用8位数据总线d0~d7与k9f2808u0c的i/o0~i/o7引脚相连,使用数据总线来发送地址、数据和命令。k9f2808u0c的片选信号由cs3控制,即使用lpc2210的外部存储器接口的bank3地址空间,而cle,ale信号分别由a0,a1控制。
3读写操作流程
首先向i/o写人编程指令80h,然后使用3个时钟周期写入目的地址(a0~a23),接着向i/o写入数据。数据发送完成后,写入指令10h启动页编程,此时芯片内部的逻辑电路将进行页擦除和数据编程操作。微控制器可以读状态指令70h来读取状态寄存器的值,若d6位为1,则表明写操作完成。
写操作完成后,通过读取状态寄存器的d0位判断编程是否成功,若d0位为0,则表示编程成功;否则表示编程失败。
k9f2808u0c的块擦除和读数据操作如图5所示:对于k9f2808u0c的擦除是以块为单位,擦除时首先写入块擦除命令60h,然后输入要擦除块的地址,再写入指令doh启动