DS3231在嵌入式环境文件系统中的应用

嵌入式设计应用

129人已加入

描述

嵌入式文件系统介绍

嵌入式文件系统是指嵌入式系统中实现文件存取、管理等功能的模块,提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。在嵌入式系统中,应用程序通常需要对信息进行存取操作,当任务运行的时候,任务可以在其任务堆栈中存放少量信息,但是存储量要受到内存空间的严格限制,而且在内存空间中的信息随着任务的退出而消失,不适于存放要长期保存的信息。另一方面,一些公共信息为多个任务所共享,需要这些信息独立于具体的任务而存在。

嵌入式系统和桌面系统一样,为用户提供文件系统以方便信息的处理。嵌。入式文件系统以普通桌面操作系统的文件系统为基础发展而来,但两种文件系统的应用环境和自身的要求又有很大的不同:在普通桌面操作系统中,文件系统不仅要管理文件,提供文件系统调用API,还要管理各种设备,支持对设备和文件操作的一致性。而在嵌入式文件系统中,由于大部分嵌入式系统都是针对特殊目的定制的,因而对嵌入式操作系统的系统功能的模块化和可裁减性提出了更高的要求。

嵌入式系统的应用条件往往比桌面计算机恶劣的多,在恶劣使用环境下系统的稳定性、安全性还要得到足够的保障,通用的文件系统对于可靠性和文件系统自身的安全性并没有特殊的保障机制,因此无法保证这些性能。所以,虽然有许多已经较为成熟的桌面操作系统下的文件系统,如DOS下的FAT文件系统、WINDOWS NT下的NTFS文件系统以及UNⅨ下的inocde文件系统等,但这些文件系统都不能直接适用于嵌入式系统。要想适用于嵌入式系统,必须进行重新设计。嵌入式文件系统应该借鉴成熟的桌面文件系统,并且进一步根据具体的硬件环境以及应用需求来设计文件系统的体系结构和实现方法。嵌入式文件系统作为嵌入式操作系统的重要组成部分,对于实现嵌入式系统中大量数据的存储和各种操作的管理,有着不可替代的作用。

嵌入式文件系统虽然继承了通用文件系统的组织结构,但由于功能和作用与普通桌面操作系统的文件系统不同,同时又有自己的特点:

在嵌入式系统中,文件系统是嵌入式系统的一个组成模块。它是作为系统的一个可加载选项提供给用户,由用户决定是否需要加载它。

需要满足结构紧凑、代码量小的特点,合理地对文件存储器进行管理。嵌入式系统中的文件存储器空间相对不会太大,必须对其进行高效的管理,以避免对资源的浪费。

使用简单便捷。用户只要知道文件名、文件路径等简单信息特征,就可以方便地对文件进行操作,不必知道文件在具体物理存储空间的运作过程。

安全可靠。对文件、数据的保护是文件系统的基本功能。嵌入式系统的应用通常要求系统必须有较高的可靠性。

支持多种存储设备、可伸缩、可剪裁、可移植等特点。嵌入式应用的领域相当广泛,其采用的硬件环境和操作系统也各不相同。为了适应这种差异性,文件系统应降低对具体硬件环境和操作系统的依赖,具备良好的可移植性。

DS3231

为满足嵌入式环境中文件系统精准的提供时间功能,使存储在外部介质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文件系统。

DS3231

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所示。

DS3231

顶层是应用层,调用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所示。

DS3231

DS3231实时时钟芯片

DS3231器件

DS3231是Maxim公司生产的一款低成本、超高精度的I2C总线实时时钟芯片,该器件不仅能够在一定温度范围内提供优于2min/年的计时精度,而且省去了制造过程中晶振安装和布线校准的工作。

DS3231实时时钟(RTC),具有集成的温补晶体振荡器(TCX0)和1个32.768kHz的晶振,该晶振包含电池输入端,断开主电源仍然可以保持精确计时。集成晶体振荡器可提供器件的长期精确度,并减少生产的元件数。DS3231提供商级和工业级温度范围,采用16引脚、300mil的SO封装。RTC保持秒、分、时、星期、日期、月和年信息。当遇到少于31天的月份,将自动调整月末日期,包括闰年补偿。时钟可以工作于24小时模式或带AM/PM指示的12小时。提供2个可编程日历闹钟和1路可编程方波输出。地址与数据通过I2C双向串行传输。通过精密的、经过温度补偿的电压基准和比较器来监视VCC状态,检测电源故障,提供复位输出,并在必要时自动切换到备用电源。另外,RST监视引脚可作为手动按钮输入,以产生外部复位信号。

DS3231与单片机C8051F500的硬件连接

图4为高精度实时时钟芯片DS3231与主控制器C8051F500单片机的接口连接电路。

DS3231

DS3231的主要引脚功能说明:VCC用于主电源的DC引脚;INT/SQW为低电平有效中断或方波输出;RST是低电平有效复位引脚;GND为地;VBAT为备用电源输入;SDA为串行数据输入、输出;SCL为串行时钟输入。

C8051F500通过I2C总线与DS3231连接,DS3231的VCC接系统电源VCC,VBAT为备用电源输入,该引脚应该连接一个低泄漏电容去耦。INT/SQW为低电平有效中断或方波输出,该漏极开路输出要求外接上拉电阻,如果不使用,可保持开路。微控制器主要通过I2C总线向时钟芯片DS3231写时间信息,DS3231以写入的时间信息为基准精确走时。上电后,微控制器从时钟芯片读取时间信息并存入内存供系统使用,器件每隔64s测量一次温度,通过调节晶振的负载电容,使其在指定温度达到2ppm的精度,最终达到提高时钟精度的目的。即使系统断电一段时间后重新上电,时钟芯片内的实时数据仍能被正确读出。

与嵌入式文件系统有关的特性

DS3231电源供电方式

DS3231有两个电源引脚VCC和VBAT,分别连接电源VCC和备用电池,它们之间的切换由温度补偿电压基准(VPF)和监视VCC电平的比较器电路控制。当VCC高于VPF时,DS3231由VCC供电,当VCC低于VPF但高于VBAT时,DS3231由VCC供电;当VCC低于VPF和VBAT时,DS3231由VBAT供电;如果用一节容量为38mAh的电子表用纽扣锂电池作备用电池,在系统掉电时电流损耗最大为3.5μA,则至少供电时间为:

t=38×10-3/3.5×10-6=10857h

按照这个理论,可以粗略估计备用电池供电时间,能够满足实际需要。

DS3231采用I2C总线通信方式

单片机C8051F500通过读取时钟芯片DS3231的值来给文件系统提供日期时间,也可以写入DS3231一个任意的时间初始值,让其依据设定值开始计时,这就要求研究这两者之间的通信模式。DS3231工作于读和写两种模式。

(1)DS3231写模式

通过SDA线和SCL线来接收串行数据和时钟,收到每个字节后,发送应答位,START和STOP条件作为串行数据传输的开始和结束。软件设计流程如图5所示。首先调用START_IIC()函数使单片机产生开始条件,再通过SendByte()函数,发送DS3231写地址,然后发出应答信号,接下来单片机向DS3231发送一个字地址(秒、分、时、日、月、年地址),产生应答信号后,再发送一个字节数据(秒、分、时、日、月、年数据)至DS3231设定初始化时间。产生应答信号后,调用STOP_IIC函数来使单片机产生终止数据写入条件。

DS3231

(2)DS3231读模式

接收和处理字节的方式与写模式相同,但是在这种模式下,方向位指示的传输方向是相反的。DS3231向SDA发送串行数据,并由SCL输入串行时钟。软件设计流程如图6所示。单片机产生START条件后,通过SendByte()函数发送DS3231写地址,产生应答信号后,发送一个字地址(秒、分、时、日、月、年地址);产生应答信号后再通过SendByte()函数发送DS3231读地址;产生应答信号后,通过函数RcvByte()从DS3231读取一个字节数据(秒、分、时、日、月、年数据)来获取时间;产生应答信号后,最后调用STOP_IIC函数来使单片机产生终止数据读取条件。

DS3231

系统测试及结果

在系统测试中,C8051F500选用了22.118400MHz的外部晶振,存储介质选用了金士顿8GBSDHC卡,分别在主电源供电5V和LITHIUMCELLGR1220纽扣电池供电3V的情况下,对1980年之后的年、月、日、时、分、秒等时间信息进行设定任意初始值,并在PC机上查看了存储在SD卡中的数据文件的创建、修改、访问等具体时间信息。测试结果表明,不论在主电源供电还是备用纽扣电池供电情况下,存储在SDHC卡上的文件能够精确显示年、月、日、时、分、秒等时间信息。

本文提出的通过DS3231高精度时钟芯片给嵌入式文件系统提供实时时间的方案具有可行性,解决了存储在SD卡上的采集数据文件没有实时时间的问题,并且在系统掉电情况下,通过一个纽扣锂电池仍然能够长时间连续不断地提供精确的年、月、日、时、分、秒等时间信息,满足了舰舵参数采集设计中对存储在SD卡上的数据文件的创建、修改、访问等时间信息的实际要求。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分