采用FAT16文件系统的嵌入式温度记录器

发布者:Yaqi最新更新时间:2023-08-22 来源: elecfans关键字:FAT16  文件系统  温度记录器 手机看文章 扫描二维码
随时随地手机看文章

  采用FAT16文件系统的嵌入式温度记录器

   以ARM7TDMIS为内核的32/16位微控制器LPC2148与SD卡相结合,实现在SD卡上建立FAT16文件系统。采集的温度数据以FAT16文件格式存入SD卡,可方便用户对温度数据进行读取与分析。本文描述了温度传感器ADT75的工作原理。



  闪存技术的不断发展,使得闪存卡(如SD卡、MMC卡等)因其体积小、容量大、可靠性高等优点而在嵌入式存储领域得到越来越广泛的应用。FAT16文件系统具有出色的文件管理性能,能被大多数操作系统识别,因此将闪存卡与FAT16文件系统相结合是嵌入式存储、记录系统中一个理想的方案。温度采集与控制技术是现代测量、控制系统的一个重要组成部分。由于传统的模拟传感测量温度系统存在测量精度低、易受干扰、硬件复杂、调试繁琐等不利因素,而新型单片数字式温度传感器具有测量精度高、抗干扰能力强、操作方便、功耗低等优点,应用范围越来越广泛。本嵌入式数字温度记录器以ARM7微处理器LPC2148、数字温度传感器ADT75为基础,采用大容量SD卡作为存储介质,实现了FAT16文件系统,为温度采集与记录、嵌入式系统的数据存储提供了一个理想的解决方案。


1  硬件设计

  本温度记录器的硬件电路实现简单,主要包含2个部分:SD卡读/写单元电路、ADT75测温单元电路。如图1所示,LPC2148通过SPI总线读/写SD卡,通过I2C总线读/写ADT75实现温度的采集。

按此在新窗口浏览图片
图1  温度采集器硬件电路

1.1  SD卡与LPC2148的硬件接口设计

  SD卡是一种基于NAND Flash的存储卡。由于它具有安全性高、容量大、体积小、功耗低、非易失性等优点,目前在嵌入式系统中已取得越来越广泛的应用。

  SD卡支持2种接口模式:SD卡模式、SPI模式[1] 。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应外接10 kΩ左右的上拉电阻

1.2  ADT75测温工作原理

  ADT75ARZ是ADI公司推出的一款低功耗、高分辨率的温度传感器。它内含12位A/D转换器,具有SMBus/I2C兼容接口,有超温指示输出引脚,额定工作温度范围为-55~+125 ℃,分辨率可达0.062 5 ℃,功耗低,工作电压是3~5.5 V[2]。其典型应用电路如图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内核的微控制器,含有40 KB片内RAM和512 KB片内Flash存储器,支持ISP与IAP操作[3]。它接口资源丰富,含有2路32位定时器,1个USB 2.0 全速设备控制器,2个支持16C550的串行UART接口,2路支持高速总线的I2C接口,1路SPI接口及片上RTC实时时钟等。LPC2148内含PLL锁相环部件,可将主频提高到60 MHz下运行。LPC2148支持Thumb指令,在代码规模受到约束的场合,可在Thumb状态下运行。LPC2148采用超小LQFP64封装,工作电压为3.3 V,适用于工业控制、医疗系统、访问控制、 通信网关、嵌入式软modem等场合。

  本记录器主要利用了它的SPI总线接口、I2C接口、RTC实时时钟及丰富的RAM资源等功能单元。LPC2148的RTC实时时钟的时钟源可由独立的32.768 kHz晶振提供,并且RTC部件还有专门的电源引脚VBAT,它可由外部电池供电。本采集器采用了32.768 kHz外部晶振并使用电池供电,使得在采集器掉电后,RTC实时时钟可以继续运行。


2  SD卡FAT16文件系统分析

  FAT(File AllocaTIon Table,文件分配表)文件管理系统[4]是由微软发布的由MSDOS支持的一种文件管理系统。在FAT发展过程中,先后发布了FAT12、FAT16、FAT32三个版本。其中FAT16是指磁盘的一个分区最多含有2的16次方个簇,由于每个簇的最大存储空间只有32 KB,因此磁盘的一个分区的存储容量最大为2 GB。由于一般SD卡的容量大小不超过2 GB,所以SD卡通常只作为一个分区。

  SD卡支持FAT12与FAT16文件系统[5]。表1描述了本文中512 MB SD卡的文件系统结构。

表1  512 MB SD卡文件系统结构
按此在新窗口浏览图片

  SD卡中的保留扇区,一般不应向该扇区写入数据。若写入不正确的数据,则会破坏SD卡的文件系统结构,导致SD卡在PC机上无法识别。

  在FAT文件系统中,BPB(Bios Parameter Block,本分区参数记录表)是一个很重要的参数表。它表明了该分区的一系列重要基本参数,例如总扇区数、每个簇的空间大小、FAT表占用的扇区数等。在SD卡中,保留扇区的第一个扇区(即分区记录扇区)的第12~36字节即为BPB。表2给出了BPB各字段的内容及说明。

表2  512 MB SD卡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字节的文件目录。最后在数据区对应该文件的扇区上写入文件数据。


3  软件设计

3.1  SD卡与LPC2148的底层软件接口设计

  SD卡在上电复位后,自动进入SD模式,因此本设计中SD卡与LPC2148的底层软件接口设计主要是指如何使得SD卡进入SPI模式,并在SPI模式下对SD卡的内存单元实现读/写操作。

按此在新窗口浏览图片
图2  SD卡初始化流程

  图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各寄存器的内容时,都需要经过先写入再读取的步骤。在写ADT75时,需由地址指针寄存器指出将读取的寄存器地址。图3描述了读取ADT75温度数据的时序。

按此在新窗口浏览图片
图3  读取ADT75温度数据的时序

  由于温度数据寄存器的地址值为0x0,因此写入地址寄存器的内容为0。在ADT75给出应答信号后,LPC2148给出读信号,即在第9个时钟周期将数据线SDA置为高电平,表明是读取数据。之后LPC2148读取温度数据的高8位,再读取数据的低8位,且LPC2148应在每个字节数据读取结束后,给出低电平的应答信号。当温度数据完成后,LPC2148传送结束时序,结束数据读操作。在12位温度数据格式下,读取的16位温度数据低4位为0,将其取补码后,再除上16(浮点除法),就是实测的温度。


3.3  软件主流程

  在本温度记录器的设计中,利用LPC2148片上RTC实时时钟提供的秒中断、分中断、天中断功能实现ADT75温度数据的定时采集、存储和文件的建立。

  当RTC的秒中断时,LPC2148通过I2C总线在400 kHz的速率下读取ADT75的温度数据,并将温度数据存于LPC2148内部RAM中。为了便于用户使用读卡器在PC机上读取存入的温度数据,每秒钟存入RAM中的数据为22字节,且均为ASCII字符,数据格式如表3所列。

表3  存储数据格式
按此在新窗口浏览图片

  其中前4个字节为温度的实时采集时间,存储的时间内容为时、分、秒。第1个温度数据采用十六进制表示;第2个8字节的温度数据为转换后的实际温度值,每条记录均以回车(ASCII码为0x0D)、换行(ASCII码为0x0A)结束。例如,在12时0分59秒采集的温度数据为0x1910,则存入RAM中的数据为“120059 1910+025.625”。

  当RTC的分中断时,LPC2148将临时存于RAM中的数据存入SD卡中。这样可减少对SD卡的写操作次数,延长SD卡的使用寿命。

  当RTC的天中断时,LPC2148将在SD卡上新建一个新的记事本文件(.txt文件),文件名即为当天的日期,例如2007年10月6日建立的文件名为“071006.txt”。由于每分钟写入SD卡的数据为22×60=1 320字节,因此每个文件的最大容量是1 856 KB。对于一张512 MB的SD卡,可保存约1年的温度数据。

  图4描述了本设计的软件主流程。在实现温度数据的采集与存储之前,需正确配置LPC2148的SPI总线控制寄存器、I2C控制寄存器及RTC实时时钟寄存器。

结语

  ADT75是一款完善的数字温度传感器,具有I2C总线接口;LPC2148功能强大,外设接口资源丰富。将LPC2148与ADT75通过I2C总线相结合,即可实现分布式多点温度采集。SD卡FAT16文件系统的实现方便了用户读取与分析采集的温度数据。本文为嵌入式系统数据的存储、温度数据的分布采集与记录提供了一个切实可行的解决方案。

按此在新窗口浏览图片
图4  软件主流程


关键字:FAT16  文件系统  温度记录器 引用地址:采用FAT16文件系统的嵌入式温度记录器

上一篇:基于LPC2138的超市收银机系统设计策略
下一篇:基于LPC2210和AD7656芯片实现6通道数据采集系统的设计

推荐阅读最新更新时间:2024-11-17 00:01

ARM7系统中实现CF卡存储的文件系统设计
摘要:介绍针对ARM7架构的嵌入式系统中,以CF卡作为存储介抽的文件系统的设计,并通过GPS车辆导航系统中地图信息读写的具体应用介绍了其软硬件电路的实现方法。 关键词:嵌入式文件系统 CF卡 ARM7 随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。 目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。 另一方
[嵌入式]
STM32+SDIO+FATFS文件系统 直读SD卡 (含程序)
网上关于小型嵌入式的文件系统有好多~当然要数 FATFS 很是出名 一来小巧,二来免费。当然了国产的振南的znFAT 一样开源好用而且极其的省资源~!非常适合51单片。更重要的是国语的支持,呵呵!这次在STM32上为SD卡移植文件系统还是非常简单顺利的,这多亏了ST 官方提供的驱动,而我自己不用动手编写SD卡的命令省了很多时间而且官方做的驱动虽然效率一般但是极其严谨我很是佩服。 FATFS的官方网站是 http://elm-chan.org/fsw/ff/00index_e.html znFAT的官方网站是 http://www.znmcu.cn/softshow.asp?id=47 SD卡以用SPI驱动 也可
[单片机]
内核移植和文件系统制作(3)Ramdisk简介和常见问题
一,Ramdisk简介: Ramdisk是一种基于内存的虚拟文件系统(并非一个实际的文件系统),它将一部分固定大小(这个大小在编译内核的make menuconfig时配置)的内存当作硬盘一个分区来使用。ramdisk是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统,通常我们会使用ext2或ext3文件系统来格式化它。由于ramdisk是在内存中进行操作的,所以我们可以对里面的文件进行添加,修改,删除等等操作,但是一掉电,就什么也没有了。由于这个特性,我们可以将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,这样可以明显地提高系统的性能。 在Linux的启动阶段,内核和ramdisk
[单片机]
ARM7系统中实现CF卡存储的文件系统设计
  随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。   目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。 另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得
[嵌入式]
05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁
一、移植YFFS2文件系统 yffs文件系统更加支持nand设备 上节移植了jffs2文件系统(点击查看)到移植的内核中,这节我们将yffs2文件系统移植到刚移植好的内核中。 (1)获取源码并解压 git clone git://www.aleph1.co.uk/yaffs2 tar xjf yaffs2.tar.bz2 (2)给内核打上yffs2补丁 ./patch-ker.sh c m /home/book/linux-3.4.2 ++ (3) 配置内核支持YAFFS 1. ls fs/yaffs2 (4)编译、生成uImage 出错,制作yffs2 source工程.
[单片机]
05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2<font color='red'>文件系统</font>移植+内核裁剪+内核制作补丁

推荐帖子

跪求一本电子书
谁有《2008TIDSP大奖赛获奖成果汇编》?求大神分享跪求一本电子书如果论坛有@功能你可以直接@论坛大佬他们或许能给你提供帮助估计这本书很难找到电子档的!maylove发表于2014-4-215:10估计这本书很难找到电子档的! 谢谢!我已找到chris900808发表于2014-8-2211:51谢谢!我已找到 是否愿意发帖跟大家分享一下呢
chris900808 DSP 与 ARM 处理器
我要在WinCE下用VS.net开发PocketPC上的游戏,请问需要什么?
我要用WinCE和VS.net开发PocketPC上的游戏,这叫作嵌入式开发吧。请问需要什么?我对这个完全陌生,也不知道具体是怎样的一种东西和流程,只是听上面的人说了一下。需要用什么语言?我已经会C#。然后就是推荐一些教程吧。谢谢。我要在WinCE下用VS.net开发PocketPC上的游戏,请问需要什么?和在PC上开发WINDOWS应用程序有区别吗?还需要其他的一些什么工具?
businiao0002007 WindowsCE
EVC pocket pc 2003程序和VS2005 pocket pc SE2003程序区别及问题!
EVC下pocketpc2003和VS2005pocketpcse2003模拟器有什么区别????是这样的,我在EVC下pocketpc2003下编译成功并能运行的一个.exe文件直接共享在VS2005pocketpcse2003下,但是却点击运行不了.出现如下错误:connotfindmfctest(//我的程序名)oroneofitscomponents.makesurethepathandfilenamearecorrectand
ygwilliam 嵌入式系统
关于AD7705的问题
用MSP430控制AD7705,但是DRDY一直是高电平,是为什么呢?关于AD7705的问题帅哥解决了吗?我遇到同样的问题了我正在用,没转换
tanzhiying 微控制器 MCU
RISC-V MCU开发 (七):代码调试
MounRiverStudio(MRS)配合GD-Link、WCH-Link、JLink等在线调试下载器,可支持GDVFx系列、CH56x、CH57x、CH58x、CH32Fx、CH32Vx等RISC-V/ARM内核MCU工程的代码调试功能。本文主要介绍MRS针对RISC-V内核MCU的代码调试操作。【启动调试】以CH32V103C8T6的芯片工程为例来说,首先保证工程可以编译通过,然后点击菜单栏按钮,开始进入调试模式,正常进入调试模式会停在如图所示的位置,此
Moiiiiilter 单片机
【Follow me第二季第1期】任务整合贴
#【Followme第二季第1期】任务整合贴##物料介绍1.AdafruitCircuitPlaygroundExpress采用的是本次Followme的主控板AdafruitCircuitPlaygroundExpress,这款主控板的特点是集成了红外、声、光电容等多种传感器2.FS90R##入门任务(必做):开发环境搭建,板载LED点亮(https://bbs.eeworld.com.cn/thread-1292225-1-1.html)###
eew_UqDS1M DigiKey得捷技术专区
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved