新闻中心

EEPW首页>嵌入式系统>设计应用> FatFS的水动力实验数据存储系统设计

FatFS的水动力实验数据存储系统设计

作者: 时间:2013-04-23 来源:网络 收藏

3 系统软件设计
系统采用的软件流程图如图4所示。

本文引用地址://m.amcfsurvey.com/article/148053.htm

d.JPG


3.1 MicroSD接口函数
接口函数依据通信协议V2.0编写,需要SDIO口函数以及底层接口函数的支持。ST公司提供的库函数中包括了SDIO单元的操作,能很快实现SD卡模式的读写操作。其中,最重要的是2个函数:一个是SD_WriteBlock函数,向SD卡写入数据;另外一个是SD_Read Bl ock函数,用于读取SD卡上面的数据。读/写扇区结构图如图5和图6所示。

e.JPG


3.2 USB接口函数
系统在工程中加入ST公司提供的USB函数,在主函数中调用即可完成USB的初始化过程。在中断映射单元中,将可能产生中断的USB事件映射到3个不同的NVIC请求线上:
◆USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等),固件在处理中断前应当首先确定中断源。
◆USB高优先级中断(通道19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最大的传输速率。
◆USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。
USB接口和SDIO接口都使用了STM32的嵌套向量中断控制器(NVIC),需要对使用抢占式中断优先级和响应式中断优先级进行配置。设置SDIO接口的中断优先级最高,即抢占式优先级为0,响应式优先级为0。而USB的抢占式中断优先级为1,响应式优先级依次降低。USB接入Host流程图如图7所示。

f.JPG


3.3 RTC模块函数
在本系统中,对的计数器寄存器(RTC_CNTH/RTC_CNTL)和备份数据寄存器(BKP_DRx)进行配置,前者的值表示了基于0时0分0秒数值的累加进位,通过时间处理函数,获得当前日历和时刻信息;后者在于系统上电后,判断是否需要重新进行时钟初始配置,如先写入0xA5A,通过看寄存器是否还是0xA5A,判断是否掉过电。如果掉过电,则需要对系统时间进行校正。

4文件系统的移植
4.1文件系统结构
本系统采用基于V0.09的文件系统。文件系统的作用是保证其读写的数据能够被大多数通用设备识别。例如使用FAT文件系统,通过USB设备可以对存储的文件进行操作,或者取下MicroSD卡后使用标准的读卡器在PC机上读出。当前应用广泛的嵌入式文件系统有μC/ FS、开源的EFSL(Embedded File System Library)与FatFS等。本设计中的FatFS使用ANSI C编写,具有很好的硬件平台独立性,同时层次结构非常清晰,如图8所示。最顶层是应用层,这一层为用户提供一系列API甬数,如f_open、f_close、f_read、f_write等,用户可以像C文件一样读/写FAT文件。中间层FatFS Module完整地实现了FAT协议,用户无需对此进行任何修改。最底层是在移植过程中需要处理的接口,包括存储媒介读/写接口Lowlevel disk I/O和文件创建/修改时间时所需的实时时钟。用户根据具体的硬件编写程序,填充相关函数,即可使FatFS文件系统应用在具体的嵌入式平台设备上。

g.JPG


4.2 FatFS移植
FatFS的最新版本是V0.09。FatFs的主程序包含5个文件,即fdiskio.h、fconf.h、ff.c、ff.h和integer.h。移植中,还需要添加diskio.c文件与diskio.h构成底层的硬件I/O。ff.c和ff.h是主要的应用函数,上层的API函数都在其中;ffconI.h主要涉及FatFS的配置和裁减;而integer.h中定义了FatFS软件所使用的各种数据类型。移植FatFS的过程中不需要对diskio.h和ff.c进行修改。移植工作首先核实integer.h中的数据类型,定义与数据类型是否相符。其次,实现diskio.c中6个主要函数,最后在ffconf.h中对文件系统的裁减配置。diskio.c包含的6个接口函数为:disk_initialize、disk_status、disk ioctl、disk read、disk write和disk_fat time。具体移植过程如下:
DSTATUS disk_initialize(BYTE drv)为存储介质初始化函数。drv是存储介质号码,本设计中是SD卡的初始化函数,只需支持一个存储介质,因此drv设为0。执行无误,返回0值。
DSTATUS disk_status(BYTE drv)为存储介质状态检测函数。检测是否支持当前的存储介质。事实上,只要drv为0,系统就默认为支持,执行无误返回0。
DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE count)为读扇区函数。drv设为0,*burf指向存储的数据,sector是读的起始扇区,count是需要读的扇区数目。将SD卡读数据接口函数根据参数填写、调用,函数执行无误返回0,错误则返回非0。

晶振相关文章:晶振原理


评论


相关推荐

技术专区

关闭