聚亿科技完成过亿元B轮融资,加速医疗器械CDMO业务发展
06-17
介绍 随着信息技术的发展,当今社会的信息量不断增加。
过去,由单片机组成的系统只是简单地按地址、按地址、按地址来存储介质。
字节的读/写已经不能满足人们实际应用的需求,因此采用文件系统来管理存储介质已经成为未来微控制器系统的一个发展方向。
目前常用的文件系统主要有微软的FATl2、FATl6、FAT32、NTFS以及Linux系统下的EXT2、EXT3等。
由于微软Windows的广泛应用,FAT文件系统是当前消费电子产品中最常用的,例如如U盘、MP3、MP4、数码相机等。
因此,很难找到一个易于移植和使用且占用硬件资源相对较少的系统。
较小但功能强大的 FAT 开源文件系统对于微控制器系统设计人员来说非常重要。
FatFs Module是一个完全免费、开源的FAT文件系统模块,专为小型嵌入式系统设计。
它完全采用标准C语言编写,因此具有良好的硬件平台独立性,只需简单修改即可移植到PIC、AVR、SH、Z80、H8、ARM等系列单片机上。
支持FATl2、FATl6和FAT32,支持多种存储介质;具有独立的缓冲区,可以读/写多个文件,并且特别针对8位微控制器和16位微控制器进行了优化。
FatFs 模块有一个简化版本 Tiny-FatFs。
它与完整版FatFs的不同之处主要有两点: ①占用内存更少,仅1 KB RAM; ② 一次仅支持 1 个存储介质。
FatFs的用法和Tiny-FatFs一样,只是包含不同的头文件,非常方便。
本文主要介绍Tiny-FatFs。
1 Tiny-FatFs 1.1 移植前的准备 FatFs模块从一开始就被设计为可以在不同的微控制器上使用,因此具有良好的层次结构,如图图 1. 顶层是应用程序层。
用户无需关注FatFs Module的内部结构和复杂的FAT协议。
他们只需要调用FatFs Module为用户提供的一系列应用接口函数,如f_open、f_read、f_write、f_close等,就可以像在PC上一样轻松地读写文件。
中间层FatFs模块实现FAT文件读/写协议。
FatFs Module 的完整版本提供了 ff。
c,ff。
h,Tiny-FatFs的简化版提供了tff.h。
c.tff。
H。
除非必要,用户一般不需要修改。
使用时直接包含所需版本的头文件即可。
需要用户编写迁移代码的是FatFs Module提供的底层接口,包括存储介质读写接口DiskIO以及提供文件创建和修改时间的实时时钟。
本移植硬件平台采用AVR单片机型号ATmegal28和SD卡。
ATmegal28 是一款 8 位 RISC 微控制器,具有高达 4 KB 的 RAM、1 KB 的内部闪存和丰富的外设。
软件平台为WINAVR,具有代码优化能力强、完全免费等优点。
1.2移植步骤 1.2.1编写SPI与SD卡接口代码 本文使用SD卡的SPI通信模式。
SD卡的DI连接MOSI,DO连接MISO,CS连接SS。
这就需要ATmegal28提供SPI读/写接口代码,主要包括初始化、读取和写入。
SPI初始化包括SPI相关寄存器的初始化和相关I/O端口的初始化。
配置ATmega的SPI为主机模式,数据先传输高端,时钟速率为系统时钟的一半等,代码如下: SPCR=(O< MOSI 引脚和 Ss 引脚配置为输出,MISO 引脚配置为输入。 然后,您可以读/写。 读取1字节SPI接口代码: static BYTE rcvr_spi(void){ SPDR=OxFF; loop_until_bit_is_set(SPSR, SPIF); 返回SPDR; } 写入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 xmit—datablock(const BYTE * buff, BYTE token); ③从SD卡接收1个数据包: static BCK]L rcvr-datablock(BYTE*buff, UINT btr); 1.2.2 写入DiskIO 写入存储介质的接口代码后,即可写入DiskIO。 DiskIO结构如图2所示。 Tiny-FatFs移植实际上需要编写6个接口函数,分别是: ①DSTATUS disk_initialize(BYTE drv); 存储介质初始化功能。 由于存储介质是SD卡,所以实际上是对SD卡进行初始化。 drv 是存储介质编号。 由于Tinv-FatFs只支持一种存储介质,所以drv应该始终为O。 如果执行正确,则返回0,如果发生错误,则返回非O。 ②DSTATUS disk_status(BYTE drV); 状态检测功能。 检查当前存储介质是否支持。 对于Tinv-FatFs来说,只要drv为0,就认为支持,然后返回O。 ③DRESULT disk_read(BYTE drv, BYTE*buff, DWORD 扇区, BYTE.count); 读取扇区功能。 基于SD卡读取接口函数编写,*buff存储已读取的数据,sector为开始读取的起始扇区,count为需要读取的扇区数。 1 个扇区字节。 如果执行正确则返回 O,如果发生错误则返回非 0。 ④DRESULT disk_write(BYTE drv, const BYTE*buff, DWORD 扇区, BYTE count); 写入扇区函数。 基于SD卡写入接口函数编写,*buff存储要写入的数据,sector是开始写入的起始扇区,count是需要写入的扇区数。 1 个扇区字节。 如果执行正确则返回 O,如果发生错误则返回非 0。 ⑤DRESULT disk_ioctl(BYTE drv, BYTE ctrl, VoiI*buff); 存储介质控制功能。 ctrl是控制代码,*buff存储或接收控制数据。 你可以在这个函数中编写你需要的功能代码,比如获取存储介质的大小、检测存储介质是否上电、存储介质的扇区数等。 如果是简单的应用程序,不用写,直接return O即可。 ⑥DWORD get_fattime(Void); 实时时钟功能。 返回 32 位无符号整数。 时钟信息包含在这 32 位中,如下: bit31:25 年 (O...) 从今年到现在的年数 bit24:21 个月 (1...12 ) bit20:16 天 (1..31) bitl5.1] 小时 (O..23) bitl0:5 分钟 (O..59) bit4:0 秒/2 (0. .29) 如果不使用实时时钟,您可以简单地返回一个数字。 正确编写DiskIO后,移植工作就基本完成了。 接下来的工作是配置 Tiny-FatFs。 2 Tiny—FatFs 配置 Tiny—FatFs 是一个可配置、可修剪的文件系统,用户可以选择自己需要的功能。 Tiny-FatFs共有5个文件,分别是tff. c.tff. h、磁盘。 c.diskio。 h 和整数. H。 tff_c 和整数. h一般不需要改变。 之前的移植工作主要是改diskio。 c、配置Tiny-FatFs主要修改tff。 h 和 diskio. H。 在磁盘上。 h、用户可以根据需要启用disk_write或disk_ioetl。 以下代码启用 disk_write 和 disk_ioctl:tff 中的 #define—R'EADONLY 0 #define—USE_IOCTL 1 。 h、用户可以根据需要对整个文件系统进行全面配置: ①#define_MCU_ENDIAN。 可以设置两个值1和2。 默认设置为1以获得更好的系统性能。 如果单片机处于big-endian模式或者设置为1时系统无法正常运行,则必须设置为2。 ② #define_FS_READONLY。 当设置为 1 时,启用只读操作。 当程序编译时,所有涉及写入文件系统的操作都将被删除以节省空间。 ③#define_FS_MINIMIZE。 有 0、1、2、3 四个选项。 设置 0 表示可以使用 Tiny-FatFs 提供的所有用户功能;设置 1 禁用 f_stat、f_getfree、f_unlink、f_mkdir、f_chmod 和 f_rename;在1的基础上设置2来禁用f_opendir和f_readdir;在1和2的基础上设置3来禁用f_opendir和f_readdir。 然后禁用f_lseek。 用户可以根据需要将其剪裁以节省空间。 3 TINY-FatFs读写测试 Tiny-FatFs功能非常强大,提供了丰富且易于使用的用户界面功能,如图3所示。 Tiny—FatFs功能齐全。 本文仅测试五个函数:f_mount、f_open、f_read、f_write 和 f_close 来读取 3.4 MB 文件和写入 1MB 文件。 文件名是 testl.数据和测试2。 数据。 主要代码如下: 经实际测试,单片机系统时钟为11.2 MHz时,读取3.4 MB文件大约需要20 s,平均约为KB/s;写入1MB文件大约需要6秒。 平均约为 KB/s。 这个读/写速度在资源有限的微控制器系统中是相当令人满意的。 综上所述,FatFs Module具有易于移植、功能强大且易于使用的优点,适合小型嵌入式系统;它完全免费、开源,也可用于教育、科研和商业目的。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-08
06-18
06-18
06-18
06-08
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现