您好,欢迎访问一九零五行业门户网

基于FAT16文件系统的嵌入式温度记录器

闪存技术的不断发展,使得闪存卡(如sd卡、mmc卡等)因其体积小、容量大、可靠性高等优点而在嵌入式存储领域得到越来越广泛的应用。fat16文件系统具有出色的文件管理性能,能被大多数操作系统识别,因此将闪存卡与fat16文件系统相结合是嵌入式存储、记录系统中一个理想的方案。温度采集与控制技术是现代测量、控制系统的一个重要组成部分。由于传统的模拟传感测量温度系统存在测量精度低、易受干扰、硬件复杂、调试繁琐等不利因素,而新型单片数字式温度传感器具有测量精度高、抗*力强、操作方便、功耗低等优点,应用范围越来越广泛。本嵌入式数字温度记录器以arm7微处理器lpc2148、数字温度传感器adt75为基础,采用大容量sd卡作为存储介质,实现了fat16文件系统,为温度采集与记录、嵌入式系统的数据存储提供了一个理想的解决方案。
1、硬件设计
本温度记录器的硬件电路实现简单,主要包含2个部分:sd卡读/写单元电路、adt75测温单元电路。如图1所示,lpc2148通过spi总线读/写sd卡,通过i2c总线读/写adt75实现温度的采集。
图1温度采集器硬件电路
1.1sd卡与lpc2148的硬件接口设计
sd卡是一种基于nandflash的存储卡。由于它具有安全性高、容量大、体积小、功耗低、非易失性等优点,目前在嵌入式系统中已取得越来越广泛的应用。
sd卡支持2种接口模式:sd卡模式、spi模式。sd卡模式采用4根数据线并行传输,速度快,但协议实现复杂;spi模式虽然速度性能与sd模式相比有所欠缺,但协议实现简单,操作方便。
sd卡共有9个引脚,在sd模式下与spi模式下各引脚的定义不相同。在spi模式下,sd卡1~7引脚依次为片选引脚cs、数据输入di、电源地、电源vdd、时钟信号clk、电源地、数据输出do,8脚与9脚在spi模式下保留未用。由于spi总线通信协议要求在空闲时spi总线应保持高电平,因此cs、di、do、clk应外接10kω左右的上拉电阻。
1.2adt75测温工作原理
adt7rz是adi公司推出的一款低功耗、高分辨率的温度传感器。它内含12位a/d转换器,具有smbus/i2c兼容接口,有超温指示输出引脚,额定工作温度范围为-55~+125℃,分辨率可达0.0625℃,功耗低,工作电压是3~5.5v。其典型应用电路如图1所示。
adt75的工作过程如下:adt75通过内部的温度传感器将采集的温度转化为电压信号。此电压信号经过内部的∑δ调节器后输入至12位a/d转换器,a/d转换后的12位温度数据存储于温度数据寄存器中,并将该温度数据与温度限定寄存器的值相比较,如果超过设定值,则引脚os输出有效电平。os引脚输出的有效电平可在配置寄存器中设定。
adt75内部有5个寄存器:4个数据寄存器,1个地址指针寄存器。4个数据寄存器分别为配置寄存器、温度数据寄存器、thyst定值寄存器、tos定值寄存器。配置寄存器是8位可读/写寄存器,可将adt75设为各种模式,如关断、超温中断、单步、smbus报警使能、os/alert引脚极性等;16位温度数据寄存器是只读寄存器,温度值在其中以二进制补码形式存储,读取时先读取高8位,再读取低8位;thyst定值寄存器与tos定值寄存器均为16位可读/写寄存器,16位数据均以二进制补码形式存储,它们的默认极限温度分别为+75℃、+80℃(tos存放了超温限定值,thyst存放了滞后温度限定值,当测量温度≥tos设定的温度值时,os引脚输出有效电平,直到温度降至thyst以下时,os引脚输出电平才变为无效电平)。地址寄存器是一个8位的寄存器,在读/写adt75内部各寄存器时,需将该寄存器的地址写入地址寄存器中。例如,若要读取adt75的温度数据值,则需将温度数据寄存器的地址0x00写入地址寄存器中。
lpc2148具有两路标准i2c接口:p0.2与p0.3构成*路i2c接口,与其他i2c器件通信时,需接上拉电阻;另一路i2c接口由于内部已配置上拉电阻,因此可不外接上拉电阻。
1.3 32位微控制器lpc2148
lpc2148是philips公司推出的一款支持实时仿真的32位/16位的具有arm7tdmis内核的微控制器,含有40kb片内ram和512kb片内flash存储器,支持isp与iap操作[3]。它接口资源丰富,含有2路32位定时器,1个usb2.0全速设备控制器,2个支持16c550的串行uart接口,2路支持高速总线的i2c接口,1路spi接口及片上rtc实时时钟等。lpc2148内含pll锁相环部件,可将主频提高到60mhz下运行。lpc2148支持thumb指令,在代码规模受到约束的场合,可在thumb状态下运行。lpc2148采用超小lqfp64封装,工作电压为3.3v,适用于工业控制、医疗系统、访问控制、通信网关、嵌入式软modem等场合。
本记录器主要利用了它的spi总线接口、i2c接口、rtc实时时钟及丰富的ram资源等功能单元。lpc2148的rtc实时时钟的时钟源可由独立的32.768khz晶振提供,并且rtc部件还有专门的电源引脚vbat,它可由外部电池供电。本采集器采用了32.768khz外部晶振并使用电池供电,使得在采集器掉电后,rtc实时时钟可以继续运行。
2、sd卡fat16文件系统分析
fat(fileallocationtable,文件分配表)文件管理系统[4]是由微软发布的由msdos支持的一种文件管理系统。在fat发展过程中,先后发布了fat12、fat16、fat32三个版本。其中fat16是指磁盘的一个分区zui多含有2的16次方个簇,由于每个簇的zui大存储空间只有32kb,因此磁盘的一个分区的存储容量zui大为2gb。由于一般sd卡的容量大小不超过2gb,所以sd卡通常只作为一个分区。
sd卡支持fat12与fat16文件系统。表1描述了本文中512mbsd卡的文件系统结构。
表1 512mbsd卡文件系统结构
sd卡中的保留扇区,一般不应向该扇区写入数据。若写入不正确的数据,则会破坏sd卡的文件系统结构,导致sd卡在pc机上无法识别。
在fat文件系统中,bpb(biosparameterblock,本分区参数记录表)是一个很重要的参数表。它表明了该分区的一系列重要基本参数,例如总扇区数、每个簇的空间大小、fat表占用的扇区数等。在sd卡中,保留扇区的*个扇区(即分区记录扇区)的第12~36字节即为bpb。表2给出了bpb各字段的内容及说明。
表2 512mbsd卡bpb各字段内容
由于fat文件系统采用链式存储原理,因此fat表格中记录了每个文件的起始簇号、后继簇号、终止簇号。本文中,用fat[i]表明在fat表中簇号为i的字段的内容,且每个fat[i]占用2个字节。在fat16文件系统中,由于fat[0]与fat[1]默认值为0xffff,因此fat表从fat[2]开始存储文件的起始簇号与终止簇号,所以文件的起始簇号为0x0002。在fat表中,用0x0000表明该簇号对应的存储空间没有被文件占用,用0x0002~0xfffe的值表明起始簇号与存储后继内容的下一个簇的簇号,若一个文件在簇号为i的存储空间终止,则应在fat[i]中写入0xffff。在第2个fat表格之后是dir区,每个fat16文件都对应一个目录,每个目录的大小为32字节。由于dir占用了32个扇区,所以在dir中总共可有512个登记项,这也可通过读取bpb表中的字段bpb_rootentcnt得到。
如在sd卡上新建fat文件,应首先在fat表中查找尚未被使用的簇号,确定文件的起始簇号,并根据文件的大小,确定文件在fat表格中的终止簇号,在相应的fat[i]中写入起始与终止簇号。之后应在dir区申请一个登记项,实际上就是在dir区中建立一个32字节的文件目录。zui后在数据区对应该文件的扇区上写入文件数据。
3、软件设计
3.1 sd卡与lpc2148的底层软件接口设计
sd卡在上电复位后,自动进入sd模式,因此本设计中sd卡与lpc2148的底层软件接口设计主要是指如何使得sd卡进入spi模式,并在spi模式下对sd卡的内存单元实现读/写操作。
图2sd卡初始化流程
图2描述了sd卡在上电复位后的初始化流程。在sd卡上电复位后,sd卡控制器在向sd卡发送任何命令之前,应向sd卡发送至少74个时钟周期,以等待sd卡完成上电复位过程,而且此时控制器应将片选信号线置高。在上电复位完成后,将片选信号线cs置低,即选中sd卡,且发送软件复位指令(cmd0),sd卡即可进入spi模式,并且处于空闲状态。之后若要对sd卡实现读写操作,主机端lpc2148应持续发送激活指令(cmd1),直到收到sd卡正确的响应数据0x00,表明sd卡已经退出空闲状态,可以对sd卡寄存器进行读/写以及实现数据的传输操作。
在完成上述操作后,应设置一次性写入或者读取sd卡的数据的长度,这可通过发送设置块长度指令(cmd16)来实现。本设计中设定一次读/写的数据块长度为512字节。当要读取、写入sd卡某一数据块的内容时,可通过发送读取数据指令(cmd17)、写数据块指令(cmd24)来完成。
3.2 读取温度值
当lpc2148要读取adt75各寄存器的内容时,都需要经过先写入再读取的步骤。在写adt7
其它类似信息

推荐信息