DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

TMS320F206对基于FAT32文件系统IDE硬盘的文件操作

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 20:18:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    摘 要:介绍了TI公司出品的DSP芯片TMS320F206对基于FAT32文件系统的文件读写和管理技术以及其对IDE硬盘的读写技术,着重介绍了文件的读写部分并且给出了该系统的软件流程图,简要介绍了硬件接口部分和对IDE硬盘的直接读写技术
关键词:FAT32;TMS320F206;IDE;DSP
1 引 言
  随着大数据量嵌入式系统的发展(如:视频采集系统、视频监控系统等),传统的数据存储器件已经远远不能满足当前的数据量要求。硬盘以其成熟的技术,通用的接口,尤其是巨大的数据存储空间,越来越多地吸引了设计人员的注意。所以如何用微控制芯片来实现对硬盘的读写,如何运用硬盘接口的通用性来实现硬盘数据管理的可移植性,是非常实际的问题。
  FAT32文件系统是现在PC机上普遍应用的文件系统,经过PC机高级格式化后的硬盘本身就包含了FAT32文件系统的系统参数。将该硬盘直接连接到嵌入式系统的IDE接口,可以由DSP芯片读写和管理硬盘上的文件并且也可以将该硬盘作为第二硬盘接到PC机上进行数据处理。这一思想切实可行,下面将介绍具体实现方法。

2 FAT32文件系统简介
2.1 硬盘主引导记录(MBR)
  严格地说,MBR并非在建立FAT32系统时建立,他是由分区命令在将硬盘分区时写入到硬盘的0柱面、0磁头、1扇区的。他包括了主引导程序和分区信息表,并且以十六进制数55AA为扇区结束标志。
2.2 FAT32分区的数据结构
     FAT32分区的数据结构如表1[1]所示。


500)this.style.width=500;" border=0>

  引导扇区在分区的第一个扇区,其中包含了非常重要的BIOS参数块(BPB)[1],根据这些参数可以找到FAT和根目录的入口地址。本文用到的参数列于表2中以供参考。


500)this.style.width=500;" border=0>

  FAT(文件分配表)是文件管理系统用来记录每个文件的存储位置的表格,他以链表的方式存放簇号。磁盘上有2个FAT,一个是基本表(FAT1,如不加说明下面提到的FAT均指FAT1),另一个是备份(FAT2)。FAT是一个由许多32 b整数(登记项)组成的数组,每个登记项的位置对应一个簇号,该登记项的值代表该文件的下一簇的簇FAT找到整个文件的存储位置。当FAT中的登记项为0FFFFFF8H~0FFFFFFFH时表示对应的簇是文件分配的最后一簇,00000000H表示未用的簇,FFFFFFF7H表示已损坏的簇。
  FAT32系统采用动态的文件目录表(FDT)[1],FDT是由32 B的文件目录项组成的,当根目录上存储的文件超过当前FDT所能记录的数量后,操作系统将为根目录增加一个或多个簇的存储空间(这部分存储空间可以是硬盘上任意未用空间),同时在FAT中登记。另外,在FDT中一个目录项的第一个字节如果是00H或E5H,则表示该目录项空闲,可以建立新的文件目录项。

3 TMS320F206对基于FAT32文件系统的文件操作
3.1 初始化步骤
  (1)TMS320F206的数据空间分配:TMS320F206片内的数据存储器包括256 B的B0(0100H~01FFH)、256 B的B1(0300H~03FFH)、32 B的B2(0060H~007FH)以及4 kB字的SDRAM(0800H~17FFH)[2]。将B0作为IDE硬盘的输入输出缓冲区(1扇区),B1作为引导扇区的保存位置。
  (2)利用PC机上装载的操作系统(Windows 98/Me/2000/XP)在硬盘上建立FAT32文件系统,将硬盘作为第二硬盘做不分区格式化,该指令为:
    FORMAT第二硬盘驱动器名\FS:FAT32
  这样Windows系统会把第二硬盘作为一个分区,向其中写入引导扇区、FAT表,并定义文件和目录存放的位置。
  (3)将MBR读入来获取硬盘上的逻辑分区入口地址,MBR中的前446 B中装载了主引导程序,由DSP芯片控制硬盘的情况不需要处理这一部分内容。从偏移量为446的字节开始时64 B的分区表,每个分区信息占用16 B,这16 B的9~12四个字节表示分区的入口逻辑扇区地址(LBA)。
  (4)将引导记录扇区(逻辑0扇区)读入来获取所需参数:读入BPB参数,存储到DSP对应空间,根据获得的参数,可以计算出读写文件所必需的其他参数:
    FAT起始LBA=分区入口LBA+保留扇区数
  首簇LBA=分区入口LBA+保留扇区数+(FAT个数×每个FAT所占扇区数)
    任意簇的LBA=首簇LBA+(簇号-2)×每簇扇区数  
    数据存储总簇数=每个FAT所占扇区数×512/4;由于FAT中每4个字节对应一簇的数据存储空间
  这些参数连同BPB参数一起存储在TMS320F206的片内数据分配中定义的相应位置。
3.2 文件操作部分
  当要读取已知文件名的文件时,可以直接调用读取文件子程序,入口参数为已知文件名。所需变量除了已经获知的参数外,还定义了:当前簇号(4 B),用于存储读取过程中当前簇的簇号。需要说明的是:为了简化程序结构,这里只考虑了短文件名(8.3格式)的形式。图1为读取文件子程序的程序流程图。


500)this.style.width=500;" border=0>

  向硬盘中写入一个文件首先要做的就是在根目录下建立文件的文件目录项,无论文件目录项的存储位置还是文件本身的存储位置,都需要由系统在硬盘上查找空闲簇。找到这些空闲簇之后需要在FAT1中建立一个链表,并且在FAT2中备份。
  因为FAT32文件系统管理的硬盘空间一般都比较大,所以如果从头至尾逐个查询每一簇是否空闲将浪费很多时间。这里对FAT32特有的“文件系统信息”扇区加以利用:从BPB参数中可以找到该扇区在保留扇区中的位置,通常为第1扇区。该扇区中有一个重要的参数:起始空闲簇号,在该扇区的偏移量为1ECH,共占用4 B。其中的内容为硬盘中被占用的簇的最大簇号,如果该值是FFFFFFFFH,则表示系统对最大簇号不知情,那么寻找空闲簇只好从头找起。当然写完文件后,要将这个参数的内容变为当前值,并且在BPB参数的备份区中也要更新此参数。
  写文件子程序所需变量除了已经获知的参数外,还定义了:当前簇号(4 B),用于存储写入过程中当前簇的簇号;空闲簇号(4 B),用于存储查找到的空闲簇号;m(4 B),n(4 B),分别用来计数。由于程序结构比较复杂,所以这里将这个子程序分为两部分加以说明,分别是:利用起始空闲簇号和FAT查找空闲簇、在根目录中建立目录项和文件写入。
  利用起始空闲簇号和FAT查找空闲簇,将空闲簇号和当前簇号作为参数传递给子程序的后续部分,具体程序流程为图2所示。在根目录中建立目录项和文件写入的程序流程图如图3所示。


500)this.style.width=500;" border=0>


500)this.style.width=500;" border=0>

3.3 删除文件
  删除文件比较简单,只需要找到文件目录项所在位置将第一个字节变为5EH,然后将FAT中对应的链表中各项清零即可。

4 TMS320F206对IDE硬盘的读写
4.1 电气接口
  硬盘IDE接口用一条40线的电缆来转接信号,包括16根数据线(D0~D15),3根地址线(DA0~DA2)以及接口控制线(CS0,CS1,DIOW,DIOR,IORDY,INtrQ,IOCS16,DMARQ,DMACK,RESET)[3]。将16根数据线同TMS320F206芯片的数据线相连;CS0,CS1与地址线分别同DSP芯片的低5位相连;控制信号可以由时序电路产生。
4.2 直接读写IDE硬盘
  前文中讲到了许多读取硬盘的操作,对于怎样具体直接读写IDE硬盘,这里只做一个简单的介绍。
  IDE硬盘寻址 IDE硬盘是通过磁头、柱面和扇区组织起来的,可以通过这3个参数来惟一的确定一个扇区,这种寻址方式叫作物理寻址(CHS方式)。另外,为了寻址简便,每一个扇区都有其对应的逻辑地址(LBA),FAT32文件系统中的扇区地址都是采用的逻辑地址。
  PIO方式读写硬盘 对硬盘的操作是通过向硬盘的命令寄存器组中的寄存器写入命令来实现的。硬盘控制器命令长度为7 B。其中前6 B为参数,最后1 B为命令码[3]。  
    读命令的执行 在硬盘驱动器空闲的情况下,TMS320F206把操作码发送到命令寄存器中,然后等待硬盘驱动器发出的DRQ数据请求信号,检测到DRQ后,将DIOR和IOCS16信号置低,检测IORDY信号是否有效,如09有效,则从数据线上读取当前数据,然后继续检测IORDY信号,再读数据,直到请求扇区的所有数据读取完毕。
  写命令同读命令类似,只是在检测到IORDY命令后将要写入的数据送到数据线上。

5 本设计中的几点技术细节
  (1)由于FAT中的所有数据的组织都是低位在前、高位在后,而DSP系统中处理数据恰好相反,所以在向硬盘读取数据之后和写入数据之前要进行高低位的转换。
  (2)虽然在FAT32的FAT中每个簇号都是由4 B共32位来表示,但是真正有效的只是低28位,所以在进行簇号判断之前最好先屏蔽高4位。
  (3)由于读取硬盘数据的最小单位是扇区,所以文中提到的提取某字节的内容时,要先将该字节所在扇区读入,再取其内容。
  以上几点技术细节是笔者在实验中的体会,在程序设计中这几点不容忽视,否则会造成判断错误或程序繁琐。

6 结语
  本设计实现了DSP芯片基于FAT32对IDE硬盘的文件操作,使得硬盘作为大数据量的存储器件运用到嵌入式系统并且实现了同PC机之间的数据兼容。由于建立文件系统的工作由Windows系统完成,所以大大减少了DSP芯片的工作量,主程序采用子程序调用的模式,使得程序结构简单且易于维护。


  参考文献
[1]FAT:GeneraloverviewofOn-disk format[M].Microsoft Corporation,1999:8-25.
[2]李刚.TMS320F206 DSP结构、原理及应用[M].北京:北京航空航天大学出版社,2002.
[3][德]Friedhelm Schmidt.SCSI总线和IDE接口:协议、应用和编程[M].北京:中国电力出版社,2001. [1]
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-19 21:09 , 耗时 0.087915 秒, 18 个查询请求 , Gzip 开启.

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

桂公网安备 45031202000115号

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

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

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

QQ:28000622;Email:libyoufer@sina.com

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

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