嵌入式文件系统是指嵌入式系统中实现文件存取、管理等功能的模块,提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。在嵌入式系统中,应用程序通常需要对信息进行存取 *** 作,当任务运行的时候,任务可以在其任务堆栈中存放少量信息,但是存储量要受到内存空间的严格限制,而且在内存空间中的信息随着任务的退出而消失,不适于存放要长期保存的信息。另一方面,一些公共信息为多个任务所共享,需要这些信息独立于具体的任务而存在。
嵌入式系统和桌面系统一样,为用户提供文件系统以方便信息的处理。嵌。入式文件系统以普通桌面 *** 作系统的文件系统为基础发展而来,但两种文件系统的应用环境和自身的要求又有很大的不同:在普通桌面 *** 作系统中,文件系统不仅要管理文件,提供文件系统调用API,还要管理各种设备,支持对设备和文件 *** 作的一致性。而在嵌入式文件系统中,由于大部分嵌入式系统都是针对特殊目的定制的,因而对嵌入式 *** 作系统的系统功能的模块化和可裁减性提出了更高的要求。
嵌入式系统的应用条件往往比桌面计算机恶劣的多,在恶劣使用环境下系统的稳定性、安全性还要得到足够的保障,通用的文件系统对于可靠性和文件系统自身的安全性并没有特殊的保障机制,因此无法保证这些性能。所以,虽然有许多已经较为成熟的桌面 *** 作系统下的文件系统,如DOS下的FAT文件系统、WINDOWS NT下的NTFS文件系统以及UNⅨ下的inocde文件系统等,但这些文件系统都不能直接适用于嵌入式系统。要想适用于嵌入式系统,必须进行重新设计。嵌入式文件系统应该借鉴成熟的桌面文件系统,并且进一步根据具体的硬件环境以及应用需求来设计文件系统的体系结构和实现方法。嵌入式文件系统作为嵌入式 *** 作系统的重要组成部分,对于实现嵌入式系统中大量数据的存储和各种 *** 作的管理,有着不可替代的作用。
嵌入式文件系统虽然继承了通用文件系统的组织结构,但由于功能和作用与普通桌面 *** 作系统的文件系统不同,同时又有自己的特点:
在嵌入式系统中,文件系统是嵌入式系统的一个组成模块。它是作为系统的一个可加载选项提供给用户,由用户决定是否需要加载它。
需要满足结构紧凑、代码量小的特点,合理地对文件存储器进行管理。嵌入式系统中的文件存储器空间相对不会太大,必须对其进行高效的管理,以避免对资源的浪费。
使用简单便捷。用户只要知道文件名、文件路径等简单信息特征,就可以方便地对文件进行 *** 作,不必知道文件在具体物理存储空间的运作过程。
安全可靠。对文件、数据的保护是文件系统的基本功能。嵌入式系统的应用通常要求系统必须有较高的可靠性。
支持多种存储设备、可伸缩、可剪裁、可移植等特点。嵌入式应用的领域相当广泛,其采用的硬件环境和 *** 作系统也各不相同。为了适应这种差异性,文件系统应降低对具体硬件环境和 *** 作系统的依赖,具备良好的可移植性。
为满足嵌入式环境中文件系统精准的提供时间功能,使存储在外部介质SD卡中的文件包含创建、修改、访问等详细时间信息,提出采用高精度实时时钟芯片 DS3231为文件系统提供连续精准的时间信息的解决方案。介绍了 SD 卡存储结构,详细探讨了 FAT32文件系统在嵌入式环境中的移植方法,设计了 DS3231与 C8051F500单片机进行通信时的硬件接口连接,通过I2C总线实现对 DS3231时间信息的读写。系统测试表明,DS3231能够连续不断地给嵌入式文件系统提供精准时间信息。
DS3231支持I2C总线协议DS3231支持双向I2C总线和数据传输协议。I2C总线控制系统中,控制信号发送与接受的设备称为主设备,由主设备控制的设备为从设备。主设备来控制产生串行时钟SCL,总线访问,以及来产生START和STOP的条件。[1]
DS3231在I2C总线上是作为从设备来工作的,同时DS3231还支持两种频率模式的工作,分别为标准模式(时钟频率100KHz)和快速模式(时钟频率400KHz)。
下面是总线条件:
开始条件:当SCL处于高电平时,SDA由高电平变成低电平时构成一个开始条件; 停止条件:当SCL处于高电平时,SDA由低电平变成高电平时构成一个停止条件; 数据传输:产生在开始条件之后,如果时钟信号为高电平期间数据保持稳定,则此时数据线状态代表有效数据,数据必须在时钟信号为低电平期间改变。
应答:数据传输以8位序列进行,DS3231在第九个时钟周期时将SDA置位为低电平,即送出一个确认信号,表明数据已经被收到。
DS3231在嵌入式环境文件系统中的应用舰船自动舵参数采集传输系统设计中,大量的自动舵参数数据都存储在外部介质SD卡中。为使存储的采集数据可直接在PC机上读取、处理,需要使用文件系统组织数据格式。文件系统是 *** 作系统用于明确磁盘或分区上文件的方法和数据结构,是对文件的管理规则,也是 *** 作系统的重要组成部分,而 *** 作系统对处理器要求比较高,且占用一定的存储空间,舰舵参数采集系统微处理器C8051F500没有 *** 作系统,这就需要在SD卡上建立文件系统。而建立文件系统就需要实时时钟来管理数据文件的创建、修改、访问等详细时间信息。
通常用的单片机没有实时时钟部件,如果需要此功能就得使用定时器来实现,而一旦系统掉电时钟就不能运行,嵌入式文件系统就没有了时钟,这与设计要求不相符。高精度实时时钟芯片DS3231不仅能够在一定温度范围内提供优于2min/年的计时精度,而且包含电池输入端,断开主电源仍然可以保持精确计时。因此,本文提出通过DS3231时钟芯片连续不断地给嵌入式文件系统提供实时时钟的方案。
存储系统结构SD卡存储系统结构如图1所示,C8051F500单片机是主控芯片,通过SPI接口与SD卡实现数据通信,采集的数据在FAT32文件系统管理下,以文件形式存储于SD卡中,如.txt、.doc、.dat等。
FAT32文件系统的实现
目前常用的文件系统有两类:基于微软Windows *** 作系统的FAT16、FAT32、NTFS、exFAT文件系统;Linux系统下的EXT2、EXT3、EXT4。Windows *** 作系统使用广泛,且SD卡容量比较大,因此这里选用FAT32文件系统。
FAT32文件系统的实现方法可以分为:直接法,分析FAT32文件系统的组织结构,遵循文件生成机制,编写程序代码实现功能;移植法,移植FAT文件系统模块,调用其提供的应用接口函数,同样可以实现功能。
目前比较流行使用的FAT文件系统模块主要有:周立功公司的zlg/FS、Micrium公司的μC/FS、Source-Forge.net网站上发布的开源项目efsl,以及日本电子爱好者设计并维护的FATFS文件系统模块。以上4个文件系统模块各有特点:zlg/FS因读写速率较慢,主要用于实验教学;Micrium公司的μC/FS一般在商业上使用;efsl及FATFS都是免费开源软件,FATFS相对成熟一些。
本文采用了移植FATFSModule方法,FATFSModule专门为小型嵌入式系统而设计,采用标准的C语言编程,具备良好的硬件平台独立性,移植到8051、AVR等单片机上,只需简单修改。它还支持FAT12、FAT16和FAT32,以及多个存储介质,可以对多个文件进行读/写。FATFS整体框架如图2所示。
顶层是应用层,调用FATFSModule提供的一系列API函数(如:f_open、f_read、f_write、f_close等),用户即使不理解FAT协议,也可以利用应用接口函数轻松地读/写文件;中间层完整地实现FAT文件读/写协议,用户无需对此进行任何修改;底层是用户在移植过程中需要处理的接口,需要用户编写代码,它包括存储介质的读/写接口DiskI/O和文件创建修改时间所需的实时时钟。
嵌入式文件系统的移植可以分为3步:编写SD卡的通信函数,编写RTC时钟函数和FATFS的移植。
编写RTC时钟函数实际上就是给文件系统时钟函数DWORDget_fattime(Void)赋值,连续提供给文件系统一个实时时钟。DWORDget_fattime(Void)需要RTC函数支持,返回一个32位无符号整数,时钟信息包含在这32位中,如图3所示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)