基于CC/CCS的Flash文件系统设计(通用3篇)
在开发DSP的应用程序过程中,经常需要处理一些数据文件。这些数据文件可以是实际采集到的数据集合,也可以是用模拟仿真软件产生的数据集合,一般是以文件的形式存放在主机磁盘上的。一般的开发环境(如TI的CCS和CC)都提供了ANSI C标准操作文件格式,如打开一个文件fopen(“盘符:路径文件名”,“打开模式”)。嵌入式系统一般都外挂Flash。我们希望能够和读写主机磁盘文件一样操作Flash读写时序等问题,使应用编程人员可以把精力用在解决实际应用问题上,从而提供一个良好的编程接口。同时,在需要键盘、串口等设备的系统中,也希望提供一个简易的API接口,如从键盘得到一个键,只需作如下操作,在执行fopen(“keyboard”,“读”)后,就可以用fread函数读入一个字符。
结合TI公司提供的DSP开发环境CC/CCS(CC针对3X系列,CCS针对5X和6X系列)和实际开发经验,提供上述问题的解决方案,并成功应用到我们的产品中。
2 CC/CCS文件操作机制
TI公司为其TMS320C3X系列DSP提供了一个开发环境Code Composer,配套的C语言编译器提供了文件的标准操作。在调试(debug)环境下,对主机(host)硬盘文件的操作是通过标准的ANSI文件操作格式与主机的通信来完成的。ANSI C I/O操作分为三个等级―high level、low level和Device level。在High level中,标准接口是Fopen和Fwrite等函数;而Low level中是Open和Write等函数。这三个等级功能用三个表来实现―文件表、流表(实质就是内存缓冲区索引)和设备表。文件的打开和关闭等基本属性在文件表中反应。当打开一个文件时,文件表中便相应增加一个描述该文件的信息单元;同样,关闭一个文件时,该文件的信息单元从文件表中被删除。流表提供了对文件的缓冲操作处理,缓冲区位置和大小等均在流表中记录。一个文件对应一个流,即缓冲区。对文件的读写就是对缓冲区的读写。当缓冲区填满时,再一次性写入Flash等设备中,避免了对Flash的频繁操作,延长了Flash的使用寿命。设备包括Flash、硬盘、键盘等在设备表中体现。多个流可以对应一个设备,例如在Flash中可以打开多个文件,但是一个设备不能对应多个流。流操作和设备操作是紧密联系在一起的。当打开一个文件时,同时给出了该文件在什么设备上操作,再分配一个流。以后对该文件的操作通过流对应的具体设备的驱动函数来完成。主机的target任何外设都可被加入进去成为设备表的成员之一。
1 硬件系统介绍
系统硬件框图如图1所示。其中,D/C表示数据总线与控制总线,USB Cable为普通USB下载线。通过该接口实现存储系统与计算机的连接。
Airtex-7是Xilinx公司推出的FPGA芯片。其高性价比、低功耗,硬件可编程的优点,使它成为在电池供电,可扩展系统中的首选。方案使用的具体型号为XC7A100T。该芯片具体参数如下:(1)101 440个逻辑单元,能够实现复杂的数字逻辑。(2)4 860 k B的RAM资源可以作为双端口RAM实现大容量缓存、FIFO。(3)6个时钟管理模块,可以实现片上高精度多时钟域系统。(4)300个可配置IO,可实现多通道数据采集。K9NCG08U5M是三星公司推出的Nand Flash存储芯片,其容量达到8 GB,能够满足大多数数据采集系统的需求。Flash芯片中的数据寻址分为片地址,块地址和页地址。方案使用的Flash芯片内部分为4个片,每一片通过芯片的片选信号使能,片地址需要2 bit实现;每一片中有8 192个块,所以块地址需要13 bit来实现;每一块中有64页,所以页地址需要6 bit来实现;所以需要21位地址来确定页的物理位置。每一页中可以存储4 096 Byte数据,所以整片K9NCG08U5M的容量为8 GB。
CY7C68013A为Cypress公司推出的高速USB外设控制器,其内部集成了USB 2.0收发器、智能串行接口引擎和增强型8051微处理器。在本方案中CY7C68013A作为USB桥芯片,被配置为一个异步FIFO来作为存储系统与计算机之间的通信接口,其使用简易方便,大幅简化了设计难度。本系统有两种供电方式:系统供电方式与USB供电方式。在系统进行数据采集任务时使用系统供电方式;在使用计算机访问文件系统时使用USB供电方式。
2 文件管理
系统的文件管理通过在Flash芯片的最后一个片选信号中的最后一个存储块中的第一页建立一个文件列表来实现。文件列表格式如表1所示。
其中文件个数信息存放在文件列表页中的前2 Byte中,页里的其余位置均用于存放文件信息;每一个文件的文件信息占用11 Byte的空间;由于页大小的限制,本方案支持的文件数量最大为372个。
其中,D表示该文件是否被删除。计算机读取文件列表时通过该位判断该文件是否已被删除。FileNum:为文件序号,范围为1~512。SCS/ECS:存放文件存储起始/结束地址的片地址,范围为0~3。SBA/EBA:存放文件存储起始/结束地址的块地址,范围为0~8 191。SPA/EPA:存放文件存储起始/结束地址的页地址,范围为0~63。FileSize:存放文件大小,单位为64 k B。
3 USB指令协议
通过向FPGA发送指令的方式来实现计算机对文件的访问。CY7C68013A芯片将这一操作简化为对异步FIFO的读写。当计算机需要发送指令至FPGA时,FPGA直接从CY7C68013A的异步FIFO中读取指令;当FPGA向计算机回传数据时,直接将数据发送至CY7C68013A中的异步FIFO中即可。
USB指令由5 Byte:1 Byte的帧头,1 Byte的指令,2 Byte的数据,1 Byte帧尾组成。USB指令包括:请求文件列表指令,下载文件指令,删除文件指令,格式化指令等。
3.1 请求文件列表指令
请求文件列表指令格式如图3所示。
当FPGA接收到来自计算机的指令码0x01时,将文件列表回传至计算机,回传数据格式如图4所示。
其中文件个数为文件列表中的文件个数,数值等于文件列表中的前2 Byte;每个文件信息由5 Byte组成,其中文件序号2 Byte,文件大小3 Byte,所以文件信息字段的大小为文件个数乘以5。
3.2 下载文件指令
下载文件指令格式如图5所示。
当FPGA接收到来自计算机的指令码0x02时,将缓存文件序号字段,并且将字段与对应文件的数据回传至计算机;回传数据格式如图6所示。
删除文件指令的指令码为0x03,格式化指令的指令码为0x04,其余字段与上述类似。
4 FPGA逻辑设计
系统FPGA逻辑包括5个模块:数据缓存模块,控制器模块,坏块列表管理模块,USB管理模块,Flash管理模块。如图7所示,控制器模块为系统中的控制中心与其他几个模块交互。
4.1 数据缓存模块
当系统工作在采集模式时,前端采集的数据缓存于本模块。本模块中例化了128 kB的双口RAM作为数据缓存,以64 kB为单位做乒乓操作。当低地址空间64 kB存时,向控制器模块发送存储请求信号,并等待数据存储,当低64 kB成功存入Flash后,等待高地址空间64 kB存满,存满后再次向控制器模块发送存储请求信号,并等待数据存储;依次重复工作。
4.2 USB管理模块
USB管理模块主要功能是与外部USB芯片通信,并且确定当前系统工作模式。当使用USB供电方式时为USB模式,否则为采集存储模式。外部USB芯片配置为异步FIFO,计算机发送的指令将写入此FIFO中,USB管理模块从此FIFO中读取该指令并将其发送至控制器模块,控制器译码该指令后做出相应响应。
4.3 Flash管理模块
闪存管理模块主要实现了与外部闪存芯片接口的交互,以及接收并执行来自控制器模块的读写指令。控制器模块发送来的指令格式如图8所示。
其中,CMD:读写指令,00表示读指令,01表示写指令。STCS:起始片地址,8 GB容量Flash片地址范围为00~11,对应片地址译码为1110~0111。STBLK:起始块地址,每个片地址下有8 192个块,对应13位块地址。STPG:起始页地址,每个Flash块中有64页,对应6位页地址。EDCS,EDBLK,EDPG:分别对应结束片地址,块地址,页地址。
4.4 坏块管理模块
Flash芯片在出厂时,内部就会有一些无法正常读写的坏块,在对Flash进行读写操作时,需要跳过这些坏块。坏块管理模块的主要功能,就是给控制器模块和Flash管理模块提供了查询板上Flash芯片的坏块地址的接口,其中包含了一个16 bit×32的ROM,支持的最大坏块数为32个。
4.5 控制器模块
控制器模块主要实现了存储数据的文件管理,接收并译码来自USB模块的指令,并作出响应。发送指令至Flash管理模块,读写外部Flash芯片,以及接收来自数据缓存模块的数据。
控制器模块实现了简易文件列表系统,能够实现文件的写入、删除、下载和格式化等功能,并在模块内部建立映射文件列表的RAM。每次上电初始化时,先将Flash中存入的文件列表加载到内部RAM中,以便后续对文件列表操作。对文件列表进行操作时,先修改模块内部RAM数据,再在需要时发送Flash写指令至Flash管理模块,将文件列表写入Flash中文件列表所分配的固定位置。控制器模块中的状态转移图如图9所示。
其中LoadFileList、LoadInfo、ModeSelect、UpdataFileLis的4个状态为初始化状态。系统上电后,首先将文件列表读入内部RAM中,并且将文件列表中携带的一些关键信息加载到系统内部寄存器中;然后根据USB管理模块反馈的信息来确定目前的工作模式。若工作在USB模式则直接跳转至Parsing状态;相反则跳转至UpdataFileList状态,建立新文件的文件信息,随后进入Parsing状态等待数据缓存模块的数据。
在数据采集模式下,当数据缓存模块的数据已准备好时进入BadBlockSkip状态,跳过坏块管理模块中的坏块,保证写入数据的存储块为好的存储块;并将新文件列表信息写入RAM中,然后将更新的文件列表回写至Flash,最后将数据缓存模块中的数据写入Flash中的对应位置并完成一次写入操作。数据写完成后回到Parsing状态等待下一次数据写入。
在USB工作模式下,控制器将依次完成指令译码与指令执行,等待下一个指令到来。
5 结束语
本文介绍的这种文件存储系统适用于大多数情况。基于FPGA多端口的特点,本方案可以用于多通道的数据采集任务,避免了使用额外芯片管理文件的问题。
摘要:介绍了以Xilinx公司Airtex-7系列FPGA为主控芯片的文件存储系统的实现。系统实现了即插即用、工作模式自动识别的文件存储系统。可进行文件存储、下载、删除,以及格式化操作;本系统可以作为任何数据采集系统的后端文件存储/下载实现方案,具有广泛的通用性。
关键词:文件存储,USB,Flash,FPGA
参考文献
[1]Xilinx.7 Series FPGAs configuration user guide[M].USA:Xilinx,2013.
[2]Xilinx.7 Series FPGAs clocking resources user guide[M].USA:Xilinx,2014.
[3]潘松.EDA技术使用教程[M].北京:科学出版社,2007.
[4]Bhasker J.Static timing analysis for nanometer designs[M].USA:Springer,2009
[5]Xilinx.PLBV46 Slave Single[M].USA:Xilinx,2008.
[6]李志敏.USB虚拟串口通信实现[J].电子科技,2014,27(3):120-122.
[7]张文强.基于CY7C68013单片机USB接口[J].制作天地,2010(2):19-24.
[8]张胜勇.基于FPGA的NAND Flash坏块处理方法[J].计算机工程,2010(6):239-243.
[9]李庆诚.基于NAND型闪存的嵌入式文件系统设计[J].计算机应用研究,2006(4):231-239.
关键词:嵌入式Linux;根文件系统;MTD;NAND Flash
中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2010) 13-0000-01
The Construction of Root File System for the Embedded Linux&NAND flash
Cheng Jian
(School of Computer Science&Technology,Anhui University of Science and Technology,Huainan232001,China)
Abstract:The embedded Linux selecting a Nand Flash to save root file system generally,this paper explains some common file systemes and the feature of the NAND Flash firstly.Secondly it deatily states the principle of the MTD layer and the configurations procedure of a root file system through the example of constucting the YAFFS and Cramfs file systemes in the platform of Sumsang’s ARM9 2410s .
Keywords:The emdedded Linux;Root file system;MTD;NAND flash
近些年嵌入式系统的发展非常快。随着硬件技术的进步,越来越多的嵌入式设备使用Linux作为操作系统,可以实现功能更强的应用。Linux的内核在启动过程中会安装文件系统,是不可或缺的重要组成部分。本文以三星的ARM9 2410S为例,采用了Linux 2.6.24版本说明了如何在NAND flash 存储器上构建文件系统。
一、嵌入式Linux及文件系统
文件系统有两个含义。一个是磁盘和磁盘机制的文件系统即物理文件系统,另一个含义是用户能操作的逻辑文件系统。Linux的一个特点是它支持很多不同的文件系统如JFS、ext、ext2、NTFS、Cramfs等等。
文件系统都会被烧录在某一个存储设备上。嵌入式设备往往选用ROM、闪存(flash memory)等作为主要的存储设备。在嵌入式设备上选用哪种文件系统格式与闪存的特点是相关的。
目前在嵌入式设备上应用最广泛的flash是NOR和NAND flash。NOR的特點是可在芯片内执行,应用程序可直接在flash内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,但写入和擦除的速度较低。而NAND结构能提供极高的单元密度,并且写入和擦除的速度也快,是高数据存储密度的最佳选择,但应用较复杂。不过很多操作系统包括Linux都支持NAND flash。在实际应用中,很多嵌入式设备厂家选用低容量但价格昂股的NOR flash存储启动引导程序和内核,而把文件系统放在NAND flash中。
二、MTD驱动层
要使用Cramfs或YAFFS文件系统,离不开MTD驱动层的支持。MTD(Memory Technology Device)是Liunx中的一个存储设备统一接口层,是专为基于Flash的设备而设计的。MTD包含很多特定类型Flash芯片的驱动程序。在使用MTD时首先要选择合适的Flash芯片驱动。Flash芯片驱动向上层提供读、写、擦除等基本的Flash操作方法。MTD对这些进行封装后向用户提供MTD char和MTD block类型的设备。MTD char类型的设备包括/dev/mtd0,/dev/ted1。它们提供对Flash的原始字符访问。MTD block类型的设备包括/dev/mtdblock0,/dev/mtdblock1等。MTD block将Flash模拟成快设备,这样就可以在Flash上创建Cramfs等格式的文件系统了。
另外,MTD支持CFI(Common Flash Ingerface)接口。利用它可以在一块Flash上创建多个Flash分区。每一个分区作为一个MTD block设备,这样可以把系统软件和数据等分配到不同的分区上,也可以在不同的分区上采用不同的文件系统。
在源代码arch/arm/mach-s3c2410/common-smdk.c文件下的函数“mtd_partition smdk_default_nand_part[]={}”中,可以看到默认的MTD分区,也可以根据需要进行个、修改。
三、MTD及文件系统的配置
(一)配置MTD 要使用Cramfs和YAFFS文件系统,首先要配置MTD。在Memory Technology Devices(MTD)-选项选中如下选项:
<*> Memory Technoloy Device (MTD)support /*MTD支持
[*] MTD Technology suppory/*MTD分区支持
<*>Direct char device access to MTD devices/*字符设备的支持
<*>Caching block device access to MTD devices/*块设备支持
NAND Flash Device Drivers -对NAND Flash的支持
<*>SMC Device support /*
<*>Simple Block Device for Nand Flash(BON FS)
<*>SMC device on S3C2410 SMDK
[*] Use MTD From SMC
(二)配置文件系统
<*> Kernel automounter version 4 support (also supports v3)/*文件系统自动挂载支持
<*>DOS FAT fs support/*对DOS/FAT文件系统的支持
<*>Yaffs filesystem on NAND /*对YAFFS文件系统的支持
<*>Compressed ROM file system support /*对Cramfs文件系统的支持
[*] Virtual memory file system support(former shm fs) /*对temfs 文件系统的支持
<*> Simple RAM-based file system support
[*] /proc file system support/*對/proc 和/dev设备文件系统的支持
[*]/dev file system support (EXPERIMENTAL)/*对/dev设备文件系统支持
[*] Automatiocally mount at boot/*启动时自动挂载的支持
[*] /dev/pts file system for Unix98 PTYs
Network File Systems-/*对NFS网络文件系统的支持
<*>NFS files system support
[*] Provid NFSv3 client support
四、总结
一个使用Linux内核的嵌入式系统中root文件系统必修包含支持完整Linux系统的全部东西,因此至少包含:基本文件系统结构如目录/dev、/proc、/bin、/etc、/lib、/usr;最基本的应用程序如sh 、ls、 cp、 mv等;最低限度的配置文件如inittab、fstab等;设备如/dev/null、/dev/console、/dev/tty*、/dev/ttys*、对应flash分区的设备节点等;基本程序运行所需的函数库等。但由于嵌入式系统资源相对紧缺,在构建时候要根据系统进行定制。
参考文献:
[1]Linux. http://www.linux-mtd.infradead.org
[2]北京博创.UP-CUP S2410 经典 Linux 指导书[M].北京:北京博创兴业科技有限公司,2009
[3]胡勇其,侯学锋.嵌入式Linux下NAND存储器系统的设计与实现[J].计算机工程,2006,32(4)
[4]查启鹏,姚国良.嵌入式Linux下大容量Flash的YAFFS文件系统构建[J].现代电子技术,2007,257(18)
[5]冯翔,李仁发.嵌入式Linux中闪存设备驱动程序开发[J].计算机科学与工程,2005,27(3)
作者简介:程建(1975.6-)男,安徽桐城人,硕士,讲师,主要从事嵌入式系统的研究与教学。
【基于CC/CCS的Flash文件系统设计】推荐阅读:
浅谈基于.NET的高校教材管理系统的分析与设计论文09-23
文件管理系统架构设计07-03
基于Matpower的电力系统潮流计算06-28
基于数据库的自动测试系统(ATS)软件10-09
基于zigbee的课程设计06-15