DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 373|回复: 0
打印 上一主题 下一主题

基于System ACE的DSP文件系统设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-17 23:18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
引  言
  目前,对图像处理系统的速度和精度要求越来越高,采样的数据量也越来越大。而嵌入式系统中的硬件资源环境一般比较苛刻,嵌入式微处理器和微控制器的内存一般都不大。为了能够实现DSP(Digital Signal Processing)系统的独立运行,需要大容量的存储介质用于保存采样结果。但是板载的Flash等容量通常不大,SDRAM掉电后数据会丢失,并且它们无法方便地把数据转移到计算机主机上。闪存技术的不断发展,使得闪存卡(如CF卡、SD卡等)因其体积小、容量大、可靠性高等优点而在嵌入式存储领域得到越来越广泛的应用。因此,本文介绍一种使用CF卡作为数据存储介质存储大量数据的方法。FAT16文件系统具有出色的文件管理性能,能被大多数操作系统识别,因此将CF卡与FAT16文件系统相结合是嵌入式存储、记录系统的一个理想方案。
  1  System ACE原理
  1.1  System ACE简介
  System ACE(System Advanced Configuration Environment)是Xilinx公司开发的系统高级配置系列,用以满足面向多个FPGA的系统对高效空间、预置、高密度配置需求的解决方案。System ACE技术是一种突破性的系统内可配置的解决方案,大幅节省了开发工作;与传统的PROM相比,每比特成本也大大降低。System ACE技术是高容量FPGA系统的嵌入式解决方案。
  System ACE系列把xilinx配置控制的专业技术和专注于存储的产业结合在一起,它的第1个成员是SystemACE CF(CompactFlash)。
  System ACE CF是1个芯片集,由2部分组成:一个是ACE控制器,另一个就是用于存储的CF卡。
  1.2 ACE控制器
  如图1所示,ACE控制器有4个接口,分别用来连接CF(CompactFlash)、MPU(Microprocessor)、用于连接FPGA的CFGJTAG(Configration JTAG)、允许高度灵活配置的TSTJTAG(Test JTAG)。下面着重介绍CF卡接口和MPU接口。




  1.3 CF卡接口
  CF卡接口可以连接的CF卡类型有Xilinx ACEFlash卡、任意标准的CF卡、高达8 Gb的IBM微型硬盘,以及所有有相同外形和电路板空间需求的存储卡。
  CF卡接口由2部分组成:一是CF卡控制器,二是CF卡仲裁器。CF卡控制器不仅用来检测和维护CF卡设备的状态,而且还处理所有的CF设备的访问总线周期及提炼和执行CF命令(如软复位、读/写段)等。CF卡仲裁器决定微处理器和配置JTAG控制器哪一个来访问CF卡的数据缓冲。
  1.4  MPU接口
  MPU接口功能:
  ◆MPU接口提供了监控System ACE控制器和ACE Flash读写数据的功能。
  ◆MPU接口能够识别CF卡并对CF卡进行读写。
  ◆MPU接口能够控制配置流,包括监控ACE控制器的配置状态和错误状态,还能延时配置、开始配置、决定CF卡或MPU的配置源,控制比特流版本以及复位设备等。
  本文就是利用ACE控制器的MPU接口,在该接口处连接DSP芯片,并通过CF卡为DSP加载文件系统。
                          
                       
                          
                               
  1.5  System ACE的文件和目录
  .ACE是在目录结构的最底层。Xilinx的SystemACE软件能够将比特流转换为.ACE文件。1个.ACE文件代表特定设备链的比特流。
  .collection是目录结构中紧挨着.ACE的上一层,由8个.ACE组成。在System ACE环境下,同一.collection下的所有.ACE文件都可以处理。
  在1个CF卡设备中有多个collection,但在任意一时问只能有1个被激活,至于哪一个被操作是通过xilinx.sys文件来决定的。xilinx.sys文件在ACE Flash设备的根目录下。ACE控制器能够解析xilinx.sys文件。若根目录下面没有xilinx.sys文件,则必须有1个.ACE文件来充当此角色。
  System ACE目录结构的分层设计使得它能够维护多个版本或者是不同设计的collection。每一个collection目录可以有1个或者多个不同的子目录。每一个子目录只能包含1个.ACE文件。
  Sysrem ACE目录结构的规则如下:
  ◆Sysrem ACE配置文件必须放在CF卡设备的第1分区。
  ◆Sysrem ACE分区必须被格式化为FAT12或者FAT16格式。
  ◆xilinx.sys必须在根目录下。当xilinx.sys不存在时,根目录下必须有1个.ACE来充当此角色。
  2 CF卡原理
  CF(Compact Flash)卡是以闪存为存储,具有容量大(512 MB)、功耗低和可靠性高等优点,得到广泛的应用。CF卡读写的最小单位为1个扇区(512字节),读写操作是通过卡内缓冲区进行的,不支持直接读写存储区域。
  CF卡可以工作在3种模式:PC Card Memory(Memory模式),PC Card I/O(I/O模式)和True IDE模式。PCCARD模式与PCMCIA标准兼容。TRUE IDE模式与ATA/ATAPI-4标准兼容。当上电时,如果OE接地,则进入True IDE模式,在此模式下只可以存取任务寄存器。另外2种模式需要通过设备结构寄存器来选择。
  CF卡的操作方式与硬盘的操作方式相似。CF卡读写必须以扇区为单位,每个扇区为512字节,每次可以读写1个扇区或连续多个扇区。扇区的寻址方式有2种:逻辑寻址(LBA)和物理寻址(CHS),它们之间的关系为:
  LBA=(柱面号×磁头数+磁头号)×扇区数+扇区数-1
  寻址方式采用LBA(Logic Block Address),该方式将全部扇区映射至1块连续的地址空间中,这样可以大大简化编程的工作,同时避免了柱面、磁头和扇区之间的换算,使寻址更方便。对CF卡的配置及各种操作,如读写、删除、格式化等,都通过写特殊功能寄存器完成。
  3  文件系统的建立
  3.1  文件系统的引入
  100个数在文件系统中是如何存放的呢?在计算机中是以0/1二进制的形式简单地存放在存储介质中。如果不同的数多,如何处理?这就引出了文件系统。文件系统实际上就是对存储的数据进行管理。本文在CF卡上建立的文件系统是FAT16。FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中。
  硬盘上的数据按照其不同的特点和作用大致可分为5部分:MBR(Main Boot Record,主引导扇)区,DBR(DosBoot Record,操作系统引导记录)区,FAT(File AllocationTable,文件分配表)区,DIR(Directory,根目录)区,DATA区。
  MBR区位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第1个扇区),bios在执行自己固有的程序以后就会跳转到mbr中的第1条指令,将系统的控制权交由mbr来执行。在总共512字节的主引导记录中,MBR的引导程序占了其中的前446字节(偏移0H~偏移1BDH),随后的64字节(偏移1BEH~偏移1FDH)为DPT(Disk Partition Table,硬盘分区表),最后的2字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。MBR不随操作系统的不同而不同,即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质,具有公共引导的特性。
  DBR(Dos Boot Record,操作系统引导记录)区通常占用分区的第0扇区,共512字节(特殊情况下也要占用其他保留扇区,这里先说第0扇)。在这512字节中,其实又是由跳转指令、厂商标志和操作系统版本号、BPB(BIOS Parameter Block)、扩展BPB、os引导程序、结束标志几部分组成。
  FAT表是用FAT16来记录磁盘数据区簇链结构的。如前面的例子,FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。通常情况下,每扇区512字节的原则是不变的。簇的大小一般是2n(n为整数)个扇区的大小,像512 B、1 KB、2 KB、4 KB、8 KB、16 KB、32 KB、64 KB。实际中通常不超过32 KB。之所以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512位的扇区管理会增加FAT表的项数,对大文件存取增加消耗,文件系统效率不高。
  DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元、文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
  数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。
  3.2 FAT16文件系统存储原理
  在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。格式化FAT16分区时,格式化程序根据分区的大小确定簇的大小,然后根据保留扇区的数目、根目录的扇区数目、数据区可分的簇数与FAT表本身所占空间来确定FAT表所需的扇区数目,之后将计算结果写入DBR的相关位置。FAT16 DBR参数的偏移0x11处记录了根目录所占扇区的数目。偏移0x16记录了FAT表所占扇区的数据。偏移0x10记录了FAT表的副本数目。系统在得到这几项参数以后,就可以确定数据区的开始扇区偏移了。FAT16文件系统从根目录所占的32个扇区之后的第1个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位。对于根目录之后的第1个簇,系统并不编号为第0簇或第1簇,而是编号为第2簇,也就是说数据区顺序上的第1个簇也是编号上的第2簇。FAT文件系统之所以有12、16、32不同的版本之分,其根本在于FAT表用来记录任意一簇链接的二进制位数。以FAT16为例,每一簇在FAT表中占据2字节(二进制16位)。所以,FAT16最大可以表示的簇号为0xFFFF(十进制的65535),以32 KB为簇的大小的话,FAT32可以管理的最大磁盘空间为:32 KB×65 535=2 048 MB,这就是为什么FAT16不支持超过2 GB分区的原因。FAT表实际上是1个数据表,以2字节为单位,我们暂将这个单位称为FAT记录项,通常情况其第1、2个记录项(前4个字节)用作介质描述。从第3个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。
                          
                       
                          
                               
  4  DSP对CF卡的读写操作
  4.1  DSP对CF卡读写的硬件电路
  通过在MPU端口处连接DSP来实现DSP对CF卡的读写,图2为DSP读写CF卡的示意图,图3为硬件连接图。







  4.2  DSP对CF卡读写的软件流程
  图4为DSP读写CF卡数据的软件流程。首先,DSP通过MPU端口访问CF卡前必须获得CF卡锁,否则进入等待直到CF卡处于空闲状态或者强制获得CF卡锁。其次,CF卡数据的读写是以扇区为单位的。1个扇区可以分为若干个sector,每个sector的大小固定为512字节,每个sector又可分为16个buffer。若已知CF卡的容量就可以通过计算来设置LBA、sector变量以及buffer变量。最后,对buffer进行读写,读写结束后释放CF卡锁。




  4.3  程序设计
  可以通过以下函数来实现DSP对CF卡的读写。
  ◆获得CF卡锁:Uint32 get_CF_lock(void);
  ◆检测CF卡当前状态:Uint32 check_CF_ready (void);
  ◆检测buffer是否准备就绪:Uint32 wait_buffer_ready(void);
  ◆读CF卡数据:Uint32 read_data_from_CF(Uint8*p_data,Uint32 LBA,Uint16 Sector Count);
  ◆向CF卡写数据:Uint32 write_data_to_CF(Uint8*p_data,Uint32 LBA,Uint16 Sector_Count);
  ◆复位:void reset(void)。
  结  语
  本文实现了DSP通过System ACE对CF卡进行数据存储管理,充分利用了SystemACE技术的系统内配置方案,突破了传统的多FPGA应用环境。
  CF卡作为存储介质具有容量大、接口简单、体积小、价格低廉和可靠性较高等特点,结合FAT16文件系统,可以很方便地存储和回放数据。


                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-6-7 15:37 , 耗时 0.092277 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表