无效块.docx
- 文档编号:6645680
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:10
- 大小:385.69KB
无效块.docx
《无效块.docx》由会员分享,可在线阅读,更多相关《无效块.docx(10页珍藏版)》请在冰豆网上搜索。
无效块
1引言
随着嵌入式系统广泛应用,嵌入式系统中的数据存储和数据管理则成为设计人员考虑的重点。
在许多现场不可达数据采集应用中采用分布式数据存储,必然带来数据管理的不便,因此,集中管理数据成为一种思路。
利用成熟的网络传输技术集中分布式嵌入式系统数据,采用C/S模式管理数据。
对于大容量数据存储,选择介质存储是需要重点考虑的问题。
目前大多采用IDE硬盘或SCSI硬盘存储,但都存在抗震和抗电磁干扰能力差、使用温度范围窄,无法长期在恶劣的环境中长期工作。
电子式Flash存储器具有速度快、容量大、成本低、体积小等优点,尤其能够在恶劣的环境下正常工作。
随着NANDFlash容量不断增大,选择NANDFlash作为嵌入式数据存储已成为一种趋势。
本文以三星公司的K9T1G08U0M为例,设计了基于大容量NANDFlash的网络存储系统,该系统具有速度快、安全可靠、易扩展、抗震和抗干扰能力强、使用温度范围宽等特点,可方便的用于安全监控、生产数据记录、航行数据记录等方面,具有广阔的应用前景。
2NANDFlashK9T1G08U0M
K9T1G08U0M是一块1056Mbit的NANDFlash存储器,262144行(page)×528列,其存储结构如图1所示,其中512列至527列间是备用区。
一个528字节的数据寄存器附在存储单元阵列用于页读取和页写入操作中I/O缓存和存储区之间数据传输,存储阵列由构成NAND架构的16个单元组成,16单元的每一单元都存放在不同的页中,一个块包含32页2个NAND架构。
一个NAND架构包含16个单元,一个块中总共有8448个NAND架构。
写入和读取操作都是基于页的,但擦除操作是基于块的,存储阵列包含8192个独立可擦除的16KB块。
这表明K9T1G08U0M中位擦除操作是禁止的。
K9T1G08U0M有8个复用I/O地址,减少了引脚数目并允许保持原系统板设计而使系统存储密度升级。
命令、地址、数据都是在WE和CE控制下通过I/O写入。
数据在WE上升沿锁存,命令和地址则是通过命令锁存允许(CLE)和地址锁存允许(ALE)区分,128MB物理空间需求27位地址,因此需要4个字节地址周期:
1个列周期,3个行周期。
页读取和页写入都是在输入命令后紧跟着4个相同的地址周期。
块擦除仅需要3个行周期。
3NANDFlash编程特点
Flash主要有3种操作。
Flash写操作可使存储单元由1变为0,存储单元为0后,不能再通过写操作置为1;Flash读操作不改变存储单元;Flash擦除操作可使存储单元由0变为1,但不能只对某个单元进行擦除操作。
Flash的擦除包括块擦除和芯片擦除。
块擦除是把某一擦除块的内容都变为1,而芯片擦除是把整个Flash的内容都变为1。
通常一个Flash存储器可分为若干个擦除块。
Flash存储时,是以擦除块为单位。
当在一个块中存储时,一旦对某一块中的某一位写0后,若再要改变成1,则必须先对整个块进行擦除,然后才能修改。
这点也是Flash最为麻烦的。
通常,容量小的块操作过程:
先将整个块存储到RAM中,在RAM中对其修改,再擦除整个块,最后写入修改值。
显然,这样频繁复杂的操作将影响Flash的使用寿命和系统性能,而且系统无大容量RAM空间资源。
4存储策略及实现
4.1存储策略
在嵌入式网络存储应用中,首先考虑使用文件系统。
文件系统必须保证数据完整性,也就是保证写入磁盘的数据与随后读取内容的一致性。
目前在NANDFlash中使用的较多是日志文件,但日志文件系统为保障文件安全增加了额外的系统开销一每次更新磁盘节点,大多数“日志”操作是写同步,这就需要更多的磁盘I/O操作,而且日志文件系统更易产生碎片。
为了尽可能减少文件存储造成碎片空间的浪费,考虑到文件内容实际是一种二进制数据流,且对于有限的网络节点,并不需要频繁地建立、删除文件。
设计人员只对近期的数据情况比较关心。
因此系统可采用循环存储,即为每个文件指定存储空间。
当存储空间即将耗尽的时候,最新的数据覆盖早先数据。
这样可有效的避免产生额外Flash碎片。
同时在磁盘可利用空间小于一定阈值时,可通过网络报警提醒用户处理Flash中的历史数据或采取相关措施。
由于NANDFlash具有一定的使用寿命,对于某一扇区的频繁读写将会严重影响Flash的使用寿命。
因此可将Flash按流文件大小分块,通过循环存储避免Flash某些存储区域频繁的读写操作。
当存储空间不足时,最新写入的数据覆盖早先的数据,这样既避免产生存储空间碎片也有效地延长Flash的使用寿命。
4.2数据安全性考虑
4.2.1无效块的管理
由于NANDFlash的工艺不能保证NAND的存储阵列在其生命周期中具有可靠的性能,因此,在NAND的生产及使用过程中会产生无效块。
无效块的特性:
当编程/擦除时,不能将某些位置高,以免造成页写入和块擦除操作错误,反映到状态寄存器相应位上,因此必须对无效块加以标识。
无效块总体上分为两大类:
一类为固有无效块。
该无效块是在生产过程中产生的,一般在出厂时,无效块第一页的备用区的第6个字节标记为非0xff的值。
二类是使用无效块。
在NANDFlash使用过程中,如果页写入或者块擦除错误。
就可以简单地将这个块作为无效块,需将无效块作以标记。
为了和固有无效块信息保持一致,需将该无效块的第一页的备用区第6个字节标记为非0xff。
NANDFlash出厂时在备用区已经反映了无效块信息,因此在擦除某一个块前,一定要先检查备用区的第6个字节是否为0xff,如果是0xff就证明为有效块,可擦除;否则该块就不能擦除。
为了对无效块管理。
NANDFlash首块一定是有效块,在第0页中建立一张无效块表。
对NANDFlash格式化时,需检测其原始无效块状态,将得到的原始无效块按块号大小顺序存入NANDFlash无效块表中。
如果在对一个块的某个页进行写入时产生错误,则将该块标记为无效块。
首先要把其他页里面的内容备份到另外一个空闲可用块中。
然后,标记此块为无效块,并将该块号以二分法算法插入无效块表中。
为防止误判,可以在块备份完成后,再将该无效块擦除一次,如果块擦除错误,证明该块是真正的无效块。
4.2.2ECC校验
Flash都存在位反现象,NANDFlash因注重于降低成本,位反现象比其他存储器更突出,而且数据存储应用对器件操作时可能由于电压不稳定等因素造成NAND操作错误。
为尽可能减少错误,引入了软件ECC校验。
此校验算法:
把K9T1G08U0M的每一页分成4个512字节的数据区,4个对应的16字节备用区,每512字节数据采用ECC算法生成3字节的ECC校验码,存入相应备用区。
数据读出后采用同样的算法生成新的3字节ECC校验码,对两次ECC校验码进行异或运算,根据结果做相应处理。
这样可以检测和纠错一位数据,对于多位错误也可在应用程序中处理,可有效提高数据的可靠性,同时也为无效块检测提供依据。
4.3实现
硬件系统采用带网络功能的Coldfire5307最小系统+多片K9W8G08U0M,其硬件接口设计如图2所示。
Coldfire5307的高8位数据线和A24、A25通过74AVC16245分别作为K9W8G08U0M的I/O总线和ALE、CLE信号,WE和OE经7432逻辑变换后控制K9W8G08U0M的读、写。
同时Coldfire的PP口用于扩展CS7的地址范围,片选K9W8G08U0M阵列。
软件方面,在该平台上移植了μClinux,考虑到系统的主要任务是数据存储,因此将NANDFlash驱动程序直接置于μClinux内核,使其成为新系统调用,并把新系统调用源代码添加到μClinux-dist/linux/kernel/sys.c文件中,然后修改μClinux-dist/lin-ux/include/asm-m68nommu/unistd.h,给新系统调用分配一个系统调用号,修改μClinux-dist/linux/arch/m68knommu/platform/5307/entry.S,添加新的系统调用函数指针longsymbol_name(sys_*),通知内核其他部分又增加了新系统调用函数。
然后编译新的Linux内核,在应用程序中使用预编译宏指令sgscall调用相应操作。
应用程序基于socket编程,采用并发服务器模式,使系统能同时处理多个客户请求。
服务器程序开始时调用socket()函数创建一个套接口,然后调用bind()函数将用户自定义端口捆绑到该套接口,并在程序中指定IP地址为INADDR_ANY,允许服务器接受任意IP地址客户的连接请求,通过调用listen()函数将此套接口转变成一个监听套接口,以监听连接到该端口上的客户连接请求。
客户请求到达后,建立连接accept(),服务器调用fork()创建一个子进程为这个到达的客户提供服务,而父进程关闭已连接套接口,等待另一个客户的连接请求。
在子进程中解析客户请求命令,根据命令进行存储、读取、擦除等操作。
连接软件流程图如图3所示。
5结束语
在嵌入式系统中实现NANDFlash的网络存储,可使分布式嵌入式系统的数据管理和用户管理集中在一个嵌入式服务器中,避免为了保存数据而必须采用的分散式用户管理,并有效降低整个系统成本。
本系统经过随机数和文件的完整性系统测试,证实采用这种存储方式能够有效地完成系统需要的存储功能。
目前该存储系统已应用到船载航行数据记录仪并运行良好。
高速数据采集系统目前已在雷达、声纳、图像处理、语音识别、通信、瞬态信号测试等领域得到广泛应用。
它的关键技术是高速ADC技术、数据存储与传输技术和抗干扰技术。
1引言
当大量的高速实时数据经过模数转换后,必须高速存储,多通道高采样率的数据采集系统会产生巨大的数据流。
这样就需要高速大容量的存储板将数据存储起来,然后再读回计算机进行处理。
基于以上原因,本文设计了可以同时存储两通道采样数据的大容量存储板,板中采用了64片Samsung公司的高速大容量存储器K9F2G08UOM,使整块板卡的存储容量达到128Gbit。
采用FPGA作为控制器,通过标准的CPCI工控机箱操作存储板,并通过CPCI总线将存储板上的数据高速读回计算机,提高了读取数据的速度。
2K9F2G08UOM简介
NORFlash和NANDFlash是目前市场上的两种主要的非易失性闪存技术,本设计的目的是为了高速存储大容量的数据,因此,选择NAND型K9F2G08U0M存储器。
它的存储容量是2Gbit,8位位宽,页大小为2048×8bit,每块由64页组成,共有2048块。
每页带有64×8bit的空闲存储区,共有8192K×8bit的空闲存储区。
页编程的典型时间为300μs,最大页编程时间为700μ8。
页内连续最小访问时间为30ns/Byte,即数据写入Flash数据寄存器的速度可达33MB/s。
但是单页数据的典型编程速度为2048/300μs=6.8MB/s,最慢的编程速度为2048/700μs=2.9MB/s。
块擦除的典型时间为2ms。
K9F2G08U0M具有硬件数据保护功能,即在电源上电、掉电期间关闭编程/擦除操作。
K9F2G08U0M内部写控制器使得所有的编程和擦除操作自动进行,片内包含一个页(2048+64字节)的数据寄存器,读写过程中始终是将存储单元数据或外部数据先缓存到数据寄存器,然后再读出数据或写入存储单元。
因此,它是基于页读写,基于块擦除的。
当然,它也支持随机读写。
但本设计目的是高速存储数据,因此对它的读写操作完全是基于页的。
K9F2G08U0M的主要引脚有CLE(命令锁存允许)、ALE(地址锁存允许)、CE(片选)、WE(写允许)、RE(读允许)、WP(写保护)、R/B(准备好/忙)、PRE(上电读使能)、I/O0~I/O7(输入,输出)。
其中I/O0~I/O7既可作为数据输入输出引脚,又可作为命令地址的输入引脚,命令、地址、数据分时复用,根据不同的命令区分地址和数据。
一般的操作流程为:
1)写入命令,通知器件所要完成的操作(读、写、擦除等);
2)写入地址,即写入要读写数据的起始地址,包括列地址和页地址;
3)如果是读或者擦除,写入一个确认命令。
如果是写操作,输人待编程的数据,完成后输入编程确认命令。
因为K9F2G08U0M共有128K页,每页的大小为(2048+64)×8bit,所以在写入地址时列地址需要12根地址线,页地址需要17根地址线。
这样就需要5个时钟周期来写入地址。
前两个时钟写入列地址,后三个时钟写人页地址。
3系统设计
3.1总体硬件设计
外部数据采集系统是2个40MHz采样的16位A/D通道,所以设计时分成两个通道独立设计。
虽然K9F2G08U0M的数据寄存器写入速度可达33MB/s,但在FPGA设计时,为了在时序上更加可靠,选择使用25MHz的时钟设计,则K9F2G08U0M的写入速度为50MB/s(把两个K9F2G08U0M并成16bit,写入速度即为25M×l6b/s)。
这样,在FPGA内部开辟3个页大小的双口RAM作为缓存区就能满足40M×16b/s的写入速度,即在写第2、3个RAM的时间(25ns×2048×2=102.4μs)内,启动第1个RAM把数据写入Flash的数据寄存器,所需时间为40ns×2048=81.92μs,小于102.4μs。
在读回数据时,如以20MHz读取Flash,以40MHz读出缓冲区中的数据,3个双口RAM就能刚好满足要求,如图1。
读取K9F2G08U0M一页数据能达到33MHz的速度,为了让读写Flash使用同一时钟,读Flash也采用25MHz的速度。
同时为了增加系统设计的冗余,采用4页的双口RAM作为缓冲区。
所以每片FPGA内部至少需要4×2048×16bit=131072bit的存储空间。
由于数据在写入Flash后还有较长的编程时间,一页的编程时间典型值为300μs,最大值为700μs。
数据在存储上不能有任何的停顿,否则就会丢失数据,所以不能使用R/B信号进行设计。
为了系统更加可靠,选择最大编程时间700μs。
两次对同一组Flash进行写操作的时间间隔为700μs+81.92μs=781.92μs,一页的数据写到双口RAM要用25ns×2048=51.2μs。
总时间除以写一页数据的时间:
781.92/51.2=15.3μs,说明一个循环内至少需要16组Flash才能满足要求。
所以在设计中,对于每路A/D采样通道都用一片FPGA作为缓冲和控制系统,在每片FPGA内部都采用4个缓冲区,每个缓冲区对应一条外部总线,每条总线上挂有4组K9F2G08U0M×2(将两片Flash并成16位操作,即把I/O并成16位,共用控制信号线)。
系统整体框图如图2所示。
图2中2个外部接口连接2个A/D通道,采用两片FPGA作为控制和缓冲区,每片控制16组Flash。
存储板通过PCI9054与CPCI总线相连,通过CPCI总线可以将存储板数据高速读回计算机。
3.2系统设计思想
为了解决高速的数据采集和低速的Flash访问速度之间的矛盾,采取将数据流串并转换,复制多个操作模块并行处理的设计方法。
通过利用FPGA内部的存储区实现4个双口RAM作为缓冲区。
每条外部Flash总线用一个双口RAM,采集到的数据分时加载到4个RAM中,然后再写入Flash。
写入Flash的操作以流水方式进行,具体方式如图3所示。
首先,外部A/D采样通道写数据到RAM1。
当RAM1写满时,加载数据到第一组Flash数据寄存器,加载完成后第一组Flash进入自动编程阶段;当RAM2写满时,第2组Flash加载开始,数据加载完成后,进入自动编程阶段。
依次加载RAM3,当RAM4写满,第4组Flash开始加载后,FPGA内部控制重新写RAM1,开始对第5组Flash操作,然后依此循环方式对第6~16组Flash进行操作;当第16组数据加载完成后,第1组Flash已经编程结束,接着从第1组Flash开始加载和编程。
可看出向16组Flash写入数据是并行的,通过并行写操作,可存储高速采集的数据。
FPGA内部设计大体可划分为PCI9054操控部分和数据录放部分。
PCI9054操控部分一方面跟PCI9054接口,一方面要完成对Flash的操作。
数据录放部分主要完成外部数据写入、读出以及擦除、建立无产块信息列表等功能。
由于对4组Flash的操作都是一样的,所以数据录放部分可以分为数据流控制部分和Flash操控部分。
数据流控制部分控制数据写入或读取哪组Flash;Flash操控部分用于对Flash的具体操作。
图4为数据录放部分FPGA功能结构。
为了节省内部存储单元的数量,写入和读取数据要使用同样的缓存区。
3.3无效块的建立和操作
当一个块中有一位或更多位不能正确操作时,就定义此块为无效块。
无效块并不影响其他块的正常工作,各个块之间是相互独立的。
所选的K9F2G08U0M在出厂时可能存在无效块,在使用中也可能产生新的无效块,但是器件的第一个块一定不是无效块。
NANDFlash在出厂时就标记本身的无效块,每个块的第一页或第二页的空闲区的第一个数据不是FFh,则表示此块为无效块。
为了保证Flash的正确操作,必须在操作之前建立无效块信息表。
在每片FPGA中设计了4个2048×1bit的RAM用于存储无效块的信息。
RAM的每一个存储单元存储相应总线上的4组Flash的无效块信息。
其中某一块的无效块信息是4组Flash的无效块信息相“与”后的结果(1表示正常,0表示无效块)。
在对Flash进行读、写或擦除操作之前,应先从RAM中读取无效块信息,然后根据无效块信息决定是否对当前块操作。
3.4读写Flash操作
对Flash的读写操作都是基于页的,读写操作的时序分别如图5和图6所示。
计算机通过CPCI总线发送出读或写命令后,FPGA内部根据接收到的命令执行相应操作。
写Flash时,外部采集的数据输入RAM1,RAM1满后,开始向RAM2写入数据,同时选通第一条总线上第一组Flash的写模块,在写模块中通过计数器产生ALE、CLE、WE、RE等控制写Flash的相应时序,将数据从RAM中编程到Flash内存,并令页地址加1,依次循环(循环流程见图3)。
当总线上的第4组Flash的页地址为64时,块地址加1,并读取无效块信息,如果为无效块,则屏蔽此块,重新读取下一块信息,直至读取到正常块为止。
如果是正常块,则向此块中写入数据,同时将页地址清零。
读操作与写操作类似,只不过是将Flash中的数据读出先送到RAM,然后依循环次序读取RAM即可。
3.5PCI9054操控部分的设计
通过编写PCI9054专用的驱动和应用软件,实现由计算机通过CPCI总线操控存储板卡。
在应用软件中,对Flash读写或者擦除等命令自定义为对CPCI总线发送特定的数据。
而在FPGA内部根据PCI9054发送的局部端数据线上的特定数据判断是何种操作,并执行相应操作。
FPGA和PCI9054通信的主要信号线有LHOLD、LHOLDA、READY、ADS、ADDR、DATA,利用这些信号线可以实现PCI9054局部端和FPGA握手。
将数据写到计算机中。
在PCI9054专用的驱动和应用软件中,利用DMA方式读取Flash,读取速度可提高至1.3MHz×16bit。
4结束语
本设计采用流水、并行处理技术,利用FPGA内部嵌入的存储块设计一组高速数据缓冲区,使得多个慢速的存储器件并行工作,令系统内外部数据的速率匹配,避免了外置高速缓存,简化了硬件电路,且极大地提高了存储数据的速率。
大容量高密度闪存器件可使单片存储板容量高达128Gbit。
在FP-GA内部设计中,建立Flash无效块信息列表,并在此基础上对Flash进行读、写、擦除及重建无效块信息等操作。
使系统具有集成度高、灵活性好、可移植性强、速度快等特点。
通过CPCI总线采取DMA方式读取,极大地提高了读取速度。
当接收到的数据带宽很大,速度很高时,可将存储板并联起来,多个存储板级联可满足更大的存储容量需求,也可将级联并联二者结合起来以满足不同系统的要求。
整个系统基于CPCI工控机箱,更适合于野外的工作环境,并能及时保存、分析数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无效
![提示](https://static.bdocx.com/images/bang_tan.gif)