一种易于移植和使用的文件系统FatFs Moule

上传人:我** 文档编号:111658575 上传时间:2019-11-03 格式:DOC 页数:5 大小:32KB
返回 下载 相关 举报
一种易于移植和使用的文件系统FatFs Moule_第1页
第1页 / 共5页
一种易于移植和使用的文件系统FatFs Moule_第2页
第2页 / 共5页
一种易于移植和使用的文件系统FatFs Moule_第3页
第3页 / 共5页
一种易于移植和使用的文件系统FatFs Moule_第4页
第4页 / 共5页
一种易于移植和使用的文件系统FatFs Moule_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《一种易于移植和使用的文件系统FatFs Moule》由会员分享,可在线阅读,更多相关《一种易于移植和使用的文件系统FatFs Moule(5页珍藏版)》请在金锄头文库上搜索。

1、一种易于移植和使用的文件系统FatFs Moule摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTAC)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为126 MHz,阻带抑制率大于35 dB,带内波纹小于05 dB,采用18 V电源,TSMC 018m CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte引 言 随着信息技术的发展,当今社会的信息量越来越大,以往由单片机构成的系统简单地对存储媒介按地址、按字节的读写已

2、经不满足人们实际应用的需要,于是利用文件系统对存储媒介进行管理成了今后单片机系统的一个发展方向。目前常用的文件系统主要有微软的FATl2、FATl6、FAT32、NTFS,以及Linux系统下的EXT2、EXT3等。由于微软Windows的广泛应用,在当前的消费类电子产品中,用得最多的还是FAT文件系统,如U盘、MP3、MP4、数码相机等,所以找到一款容易移植和使用、占用硬件资源相对较小而功能又强大的FAT开源文件系统,对于单片机系统设计者来说是很重要的。 FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平

3、台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。它支持FATl2、FATl6和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读写,并特别对8位单片机和16位单片机做了优化。FatFs Module有个简化版本TinyFatFs,它跟完全版FatFs的不同之处主要有两点: 占用内存更少,只要1 KB RAM; 1次仅支持1个存储介。 FatFs和TinyFatFs的用法一样,仅仅是包含不同的头文件即可,非常方便,本文主要介绍Tiny-FatFs.1 Tiny-FatFs1.1 移植前的准备FatFs Module一开始就

4、是为了能在不同的单片机上使用而设计的,所以具有良好的层次结构,如图1所示。最顶层是应用层,使用者无需理会FatFs Module的内部结构和复杂的FAT协议,只需要调用FatFs Module提供给用户的一系列应用接口函数,如f_open,f_read,f_write、f_close等,就可以像在PC上读写文件那样简单。 中间层FatFs Module实现了FAT文件读写协议。FatFs Module的完全版提供的是ffc、ffh,简化版TinyFatFs提供的是tffc、tffh。除非有必要,使用者一般不用修改,使用时将需要版本的头文件直接包含进去即可。 需要使用者编写移植代码的是FatFs

5、 Module提供的底层接口,它包括存储媒介读写接口DiskIO和供给文件创建修改时间的实时时钟。 本移植硬件平台使用型号为ATmegal28的AVR单片机和SD卡。ATmegal28是一种8位RISC单片机,具有多达4 KB的RAM、128 KB的内部Flash和丰富的外设。软件平台是WINAVR,具有代码优化能力强和完全免费的优点。12 移植步骤 121 编写SPI和SD卡接口代码 本文使用SD卡的SPI通信模式。SD卡的DI接MOSI,DO接MISO,CS接SS。这就需要ATmegal28提供SPI读写接口代码,主要包括初始化、读和写。SPI初始化包括SPI相关寄存器的初始化和相关IO口

6、的初始化。将ATmega 128的SPI配置成主机模式、数据高位先传、时钟速率为二分之一系统时钟等。代码如下:SPCR=(OSPIE)| (1SPE)| (ODORD) | (1MSTR)| (OCPOL) | (OCPHA)| (OSPR1) | (OSPRO);SPSR|=(1SPI2X); 接着配置IO口的输入输出。MOSI脚和Ss脚配置成输出,MISO脚配置成输入。然后,就可以进行读写了。 读1个字节的SPI接口代码: static BYTE rcvr_spi(void) SPDR=OxFF; loop_until_bit_is_set(SPSR,SPIF); return SPDR;

7、 写1个字节的SPI接口代码: static void xmit_spi(BYTE dat) SPDR=dat; loop_until_bit_is_set(SPSR,SPIF) 在具备SPI读写接口的基础上编写SD卡接口代码,需要编写3个基本接口函数: 向SD卡发送1条命令: Static BYTE send-cmd(BYTE cmd,DWORD arg); 向SD卡发送1个数据包: Static BOOL xmitdatablock(const BYTE *buff,BYTE token); 从SD卡接收1个数据包: static BCKL rcvr-datablock(BYTE*buff

8、,UINT btr);122 编写DiskIO 编写好存储媒介的接口代码后,就可以编写DiskIO了,DiskIO结构如图2所示。 TinyFatFs的移植实际上需要编写6个接口函数,分别是: DSTATUS disk_initialize(BYTE drv); 存储媒介初始化函数。由于存储媒介是SD卡,所以实际上是对SD卡的初始化。drv是存储媒介号码,由于TinvFatFs只支持一个存储媒介,所以drv应恒为O。执行无误返回0,错误返回非O。 DSTATUS disk_status(BYTE drV); 状态检测函数。检测是否支持当前的存储媒介,对TinvFatFs来说,只要drv为0,就

9、认为支持,然后返回O。 DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTEcount); 读扇区函数。在SD卡读接口函数的基础上编写,*buff存储已经读取的数据,sector是开始读的起始扇区,count是需要读的扇区数。1个扇区512个字节。执行无误返回O,错误返回非0。 DRESULT disk_write(BYTE drv,const BYTE*buff,DWORD sector,BYTE count); 写扇区函数。在SD卡写接口函数的基础上编写,*buff存储要写入的数据,sector是开始写的起始扇区count是需要写的扇

10、区数。1个扇区512个字节。执行无误返回O,错误返回非0。 DRESULT disk_ioctl(BYTE drv,BYTE ctrl,VoiI*buff); 存储媒介控制函数。ctrl是控制代码,*buff存储或接收控制数据。可以在此函数里编写自己需要的功能代码,比如获得存储媒介的大小、检测存储媒介的上电与否存储媒介的扇区数等。如果是简单的应用,也可以不用编写,返回O即可。 DWORD get_fattime(Void); 实时时钟函数。返回一个32位无符号整数,时钟信息包含在这32位中,如下所示: bit31:25 年(O127)从1980年到现在的年数 bit24:21 月(112) b

11、it20:16 日(131) bitl51 时(O23) bitl0:5 分(O59) bit4:0 秒2(029) 如果用不到实时时钟,也可以简单地返回一个数。正确编写完DiskIO,移植工作也就基本完成了,接下来的工作就是对TinyFatFs进行配置。2 TinyFatFs的配置 TinyFatFs是一款可配置可裁减的文件系统,使用者可以选择自己需要的功能。TinyFatFs总共有5个文件,分别是tffc、tffh、diskioc、diskioh和integerh。tff_c和integerh一般不用改动,前面的移植工作主要更改的是diskioc,而配置TinyFatFs则主要修改tffh

12、和diskioh。 在diskioh中,使用者可以根据需要使能diskwrite或disk_ioetl。以下代码使能disk_write和disk_ioctl: #defineREADONLY 0 #defineUSE_IOCTL 1 在tffh中,使用者可以根据需要对整个文件系统进行全面的配置: #define_MCU_ENDIAN。有1和2两个值可设,默认情况下设1,以获得较好的系统性能。如果单片机是大端模式或者设为1时系统运行不正常,则必须设为2。 #define_FS_READONLY。设为1时将使能只读操作,程序编译时将文件系统中涉及写的操作全部去掉,以节省空间。 #define_F

13、S_MINIMIZE。有0、1、2、3四个选项可设。设0表示可以使用全部Tiny-FatFs提供的用户函数;设1将禁用f_stat、f_getfree、f_unlink、f_mkdir、f_chmod和f_rename;设2将在1的基础上禁用f_opendir和f_readdir;设3将在1和2的基础上再禁用f_lseek。使用者可以根据需要进行裁减,以节省空间。3 TINY-FatFs 的读/写测试 Tiny-FatFs的功能很强大,提供了丰富而易于使用的用户接口函数,如图3所示。 TinyFatFs的功能很全,本文仅测试f_mount、f_open、f_read、f_write和f_close五个函数来读一个3.4 MB的文件和写一个1MB的文件,文件名分别为testldat和test2dat。主要代码如下: 经过实际测试,在单片机系统时钟为11059 2 MHz下读一个34 MB文件耗时约20 s,平均约170 KBs;写一个1 MB文件耗时约6s,平均约166 KBs,在资源有限的单片机系统下这个读写速度是相当令人满意的。综上所述,FatFs Module具有容易移植、功能强大和易于使用的优点,适用于小型嵌入式系统;又是完全的免费和开源,也可以用于教育科研及其商业用途。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号