微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于Blackfin处理器实现对硬盘FAT32文件系统的操作

基于Blackfin处理器实现对硬盘FAT32文件系统的操作

时间:07-29 来源:电子技术应用 点击:

3 IDE硬盘接口设计

  3.1 ADSP-BF533 EZKIT Lite评估板简介[5]

Blackfin533是美国Analog Devices公司开发的具有MISC体系的微处理器。这种体系是同时具有RISC指令集和DSP内核的一个集合,所以Blackfin533既可以作为通用嵌入式微处理器进行开发应用,又具有强大的DSP数据处理能力。

ADSP-BF533 EZKIT Lite是Analog Devices公司为方便Blackfin533的开发应用而提供的评估板。它可以与PC机通过USB或者PCI接口的仿真器进行调试,操作使用简单方便。评估板的核心是一片Blackfin533处理器,输入频率是27MHz,可以通过内部PLL控制工作在所需的工作频率上,最高可达750MHz。

ADSP-BF533 EZKIT Lite评估板的片上资源非常丰富。有32M SDRAM(16M×16bit)、2M Flash(512K×16bit×2);通过AD1836音频处理芯片提供了四路音频输入和六路音频输出端口;通过ADV7183视频解码芯片和ADV7171视频编码芯片分别提供了三路视频输入和视频输出端口;此外,评估板还提供了UART、JTAG、按钮电路和LED指示等设备,尤其是提供了一组功能齐全的扩展接口便于其它设备的接入。IDE接口电路就是在这组扩展接口的基础上设计的。

  3.2 硬件设计

IDE接口扩展板的设计是基于Blackfin533芯片的EBIU(External Bus Interface Unit)设计的。

EBIU是Blackfin533与外部存储器之间的一个通用外部总线接口,通过对EBIU控制寄存器的设置,既可以连接SDRAM等同步存储器,也可以连接ROM、FIFOs、Flash等异步存储器。EBIU内部结构如图6所示。

按照ATAPI协议[3]在EBIU的基础上设计了IDE接口方案,使Blackfin533可以通过这一接口实现对硬盘的操作,如图7所示。

4 FAT32文件系统软件设计

FAT32文件系统接口程序是在VisualDSP++ 3.5集成编译环境下编写和调试的。程序用标准C语言编写,调用关系分为五个层次,如表2所示。

  4.1 Visual DSP++3.5集成编译环境[6]

Visual DSP++ 3.5是Analog Devices公司为其DSP而开发的一套方便的管理系统,完整的系统包括集成了Visual DSP++内核的集成编译和调试环境、带实时运行库的C/C++优化编译器、汇编和链接器和仿真软件以及大量的程序例程。VisualDSP++还有很多有用的功能,可以使开发人员更准确地把握程序占用内部资源的情况,更直观地了解程序内部各函数的效率等等,这样在Visual DSP++这个软件平台上就可以方便地进行DSP程序的开发和优化。

  4.2 文件读写策略优化

FAT32文件系统底层驱动函数决定文件读写的策略,是提高程序读写文件速度的关键。理论上FAT32文件系统可以按照如图8所示的方式对文件的任意内容进行操作。但是这个操作是要针对IDE硬盘进行的,所以必须考虑IDE硬盘的数据传输特性。

  IDE硬盘的数据传输速率可分为外部传输率(External Transfer Rate)和内部传输率(Internal Transfer Rate)。外部传输率指的是通过IDE接口缓存与控制器之间进行数据传输的速率。内部传输率也称硬盘持续传输率,是磁盘与缓存之间的数据传输速率。后者比前者要慢很多,所以要提高传输速度,就要尽量连续读写,减少内部刷写缓存的次数。

通过研究理论上文件操作的过程发现,对FAT表的操作大大地影响了对文件的连续读写。在实际程序设计中,为了解决这个问题,一方面在描述文件的数据结构中指定一个成员来记录当前文件操作指针所在的簇,另一方面把部分FAT表提前读入SDRAM中。这两方面的处理大大减少了硬盘连续读写被打断的次数。实验证明这种方案大大提高了程序的效率,使速度大约提高了三个数量级。

  4.3 功能设计

一组完善的文件系统库函数是最基本的对文件操作的功能实现函数,应包括文件的打开、关闭、读、写、定位等函数。本人设计十个函数供外部调用,即文件的打开、关闭、读、写、定位、查找、目录列表、重命名、创建目录、删除等。通过最上层的库函数调用第二层的具体功能函数来实现这些函数的操作,其中最主要的三个功能函数是fnFindFile、fnReadFile、fnWriteFile。

fnFindFile的功能是在指定目录下查找和目标文件名相匹配的文件目录项,生成这个文件的指针,流程图如图9所示。

fnReadFile函数是读文件函数。它的参数包括要读入的地址、要读入数据的单位尺寸、要读入数据的长度和目标文件的文件指针,流程图如图10所示。



fnWriteFile函数是写文件函数。它的参数和基本流程和读文件函数类似,但是由于写文件可能会超过原文件大小,所以必须考虑在硬盘上开辟新的空间和修改文件信息等问题,流程图如图11所示。

本文介绍了一种基于Blackfin533处理器实现IDE硬盘的FAT32文

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top