基于FAT16文件系統的嵌入式溫度記錄器
摘要 以ARM7TDMIS為內核的32/16位微控制器LPC2148與SD卡相結合,實(shí)現在SD卡上建立FAT16文件系統。采集的溫度數據以FAT16文件格式存入SD卡,可方便用戶(hù)對溫度數據進(jìn)行讀取與分析。本文描述了溫度傳感器ADT75的工作原理。
本文引用地址:http://dyxdggzs.com/article/87952.htm關(guān)鍵詞 FAT16 LPC2148 SD卡 數字溫度傳感器 ADT75
閃存技術(shù)的不斷發(fā)展,使得閃存卡(如SD卡、MMC卡等)因其體積小、容量大、可靠性高等優(yōu)點(diǎn)而在嵌入式存儲領(lǐng)域得到越來(lái)越廣泛的應用。 FAT16文件系統具有出色的文件管理性能,能被大多數操作系統識別,因此將閃存卡與FAT16文件系統相結合是嵌入式存儲、記錄系統中一個(gè)理想的方案。溫度采集與控制技術(shù)是現代測量、控制系統的一個(gè)重要組成部分。由于傳統的模擬傳感測量溫度系統存在測量精度低、易受干擾、硬件復雜、調試繁瑣等不利因素,而新型單片數字式溫度傳感器具有測量精度高、抗干擾能力強、操作方便、功耗低等優(yōu)點(diǎn),應用范圍越來(lái)越廣泛。本嵌入式數字溫度記錄器以ARM7微處理器 LPC2148、數字溫度傳感器ADT75為基礎,采用大容量SD卡作為存儲介質(zhì),實(shí)現了FAT16文件系統,為溫度采集與記錄、嵌入式系統的數據存儲提供了一個(gè)理想的解決方案。
1 硬件設計
本溫度記錄器的硬件電路實(shí)現簡(jiǎn)單,主要包含2個(gè)部分:SD卡讀/寫(xiě)單元電路、ADT75測溫單元電路。如圖1所示,LPC2148通過(guò)SPI總線(xiàn)讀/寫(xiě)SD卡,通過(guò)I2C總線(xiàn)讀/寫(xiě)ADT75實(shí)現溫度的采集。
圖1 溫度采集器硬件電路
1.1 SD卡與LPC2148的硬件接口設計
SD卡是一種基于NAND Flash的存儲卡。由于它具有安全性高、容量大、體積小、功耗低、非易失性等優(yōu)點(diǎn),目前在嵌入式系統中已取得越來(lái)越廣泛的應用。
SD卡支持2種接口模式:SD卡模式、SPI模式[1] 。SD卡模式采用4根數據線(xiàn)并行傳輸,速度快,但協(xié)議實(shí)現復雜;SPI模式雖然速度性能與SD模式相比有所欠缺,但協(xié)議實(shí)現簡(jiǎn)單,操作方便。
SD卡共有9個(gè)引腳,在SD模式下與SPI模式下各引腳的定義不相同。在SPI模式下,SD卡1~7引腳依次為片選引腳CS、數據輸入DI、電源地、電源VDD、時(shí)鐘信號CLK、電源地、數據輸出DO,8腳與9腳在SPI模式下保留未用。由于SPI總線(xiàn)通信協(xié)議要求在空閑時(shí)SPI總線(xiàn)應保持高電平,因此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的工作過(guò)程如下:ADT75通過(guò)內部的溫度傳感器將采集的溫度轉化為電壓信號。此電壓信號經(jīng)過(guò)內部的∑Δ調節器后輸入至12位A/D 轉換器,A/D轉換后的12位溫度數據存儲于溫度數據寄存器中,并將該溫度數據與溫度限定寄存器的值相比較,如果超過(guò)設定值,則引腳OS輸出有效電平。 OS引腳輸出的有效電平可在配置寄存器中設定。
ADT75內部有5個(gè)寄存器: 4個(gè)數據寄存器,1個(gè)地址指針寄存器。4個(gè)數據寄存器分別為配置寄存器、溫度數據寄存器、THYST定值寄存器、TOS定值寄存器。配置寄存器是8位可讀 /寫(xiě)寄存器,可將ADT75設為各種模式,如關(guān)斷、超溫中斷、單步、SMBus報警使能、OS/ALERT引腳極性等;16位溫度數據寄存器是只讀寄存器,溫度值在其中以二進(jìn)制補碼形式存儲,讀取時(shí)先讀取高8位,再讀取低8位;THYST定值寄存器與TOS定值寄存器均為16位可讀/寫(xiě)寄存器,16位數據均以二進(jìn)制補碼形式存儲,它們的默認極限溫度分別為+75 ℃、+80 ℃(TOS存放了超溫限定值,THYST存放了滯后溫度限定值,當測量溫度≥TOS設定的溫度值時(shí),OS引腳輸出有效電平,直到溫度降至THYST以下時(shí),OS引腳輸出電平才變?yōu)闊o(wú)效電平)。地址寄存器是一個(gè)8位的寄存器,在讀/寫(xiě)ADT75內部各寄存器時(shí),需將該寄存器的地址寫(xiě)入地址寄存器中。例如,若要讀取ADT75的溫度數據值,則需將溫度數據寄存器的地址0x00寫(xiě)入地址寄存器中。
LPC2148具有兩路標準I2C接口: P0.2與P0.3構成第一路I2C接口,與其他I2C器件通信時(shí),需接上拉電阻;另一路I2C接口由于內部已配置上拉電阻,因此可不外接上拉電阻。
1.3 32位微控制器LPC2148
LPC2148是Philips公司推出的一款支持實(shí)時(shí)仿真的32位/16位的具有ARM7TDMIS內核的微控制器,含有40 KB片內RAM和512 KB片內Flash存儲器,支持ISP與IAP操作[3]。它接口資源豐富,含有2路32位定時(shí)器,1個(gè)USB 2.0 全速設備控制器,2個(gè)支持16C550的串行UART接口,2路支持高速總線(xiàn)的I2C接口,1路SPI接口及片上RTC實(shí)時(shí)時(shí)鐘等。LPC2148內含 PLL鎖相環(huán)部件,可將主頻提高到60 MHz下運行。LPC2148支持Thumb指令,在代碼規模受到約束的場(chǎng)合,可在Thumb狀態(tài)下運行。LPC2148采用超小LQFP64封裝,工作電壓為3.3 V,適用于工業(yè)控制、醫療系統、訪(fǎng)問(wèn)控制、 通信網(wǎng)關(guān)、嵌入式軟modem等場(chǎng)合。
本記錄器主要利用了它的SPI總線(xiàn)接口、I2C接口、RTC實(shí)時(shí)時(shí)鐘及豐富的RAM資源等功能單元。LPC2148的RTC實(shí)時(shí)時(shí)鐘的時(shí)鐘源可由獨立的32.768 kHz晶振提供,并且RTC部件還有專(zhuān)門(mén)的電源引腳VBAT,它可由外部電池供電。本采集器采用了32.768 kHz外部晶振并使用電池供電,使得在采集器掉電后,RTC實(shí)時(shí)時(shí)鐘可以繼續運行。
2 SD卡FAT16文件系統分析
FAT(File Allocation Table,文件分配表)文件管理系統[4]是由微軟發(fā)布的由MSDOS支持的一種文件管理系統。在FAT發(fā)展過(guò)程中,先后發(fā)布了FAT12、 FAT16、FAT32三個(gè)版本。其中FAT16是指磁盤(pán)的一個(gè)分區最多含有2的16次方個(gè)簇,由于每個(gè)簇的最大存儲空間只有32 KB,因此磁盤(pán)的一個(gè)分區的存儲容量最大為2 GB。由于一般SD卡的容量大小不超過(guò)2 GB,所以SD卡通常只作為一個(gè)分區。
SD卡支持FAT12與FAT16文件系統[5]。表1描述了本文中512 MB SD卡的文件系統結構。
表1 512 MB SD卡文件系統結構
SD卡中的保留扇區,一般不應向該扇區寫(xiě)入數據。若寫(xiě)入不正確的數據,則會(huì )破壞SD卡的文件系統結構,導致SD卡在PC機上無(wú)法識別。
在FAT文件系統中,BPB(Bios Parameter Block,本分區參數記錄表)是一個(gè)很重要的參數表。它表明了該分區的一系列重要基本參數,例如總扇區數、每個(gè)簇的空間大小、FAT表占用的扇區數等。在SD卡中,保留扇區的第一個(gè)扇區(即分區記錄扇區)的第12~36字節即為BPB。表2給出了BPB各字段的內容及說(shuō)明。
表2 512 MB SD卡BPB各字段內容
由于FAT文件系統采用鏈式存儲原理,因此FAT表格中記錄了每個(gè)文件的起始簇號、后繼簇號、終止簇號。本文中,用FAT[i]表明在FAT表中簇號為i的字段的內容,且每個(gè)FAT[i]占用2個(gè)字節。在FAT16文件系統中,由于FAT[0]與FAT[1]默認值為0xFFFF,因此FAT表從FAT[2]開(kāi)始存儲文件的起始簇號與終止簇號,所以文件的起始簇號為0x0002。在FAT表中,用0x0000表明該簇號對應的存儲空間沒(méi)有被文件占用,用0x0002~0xFFFE的值表明起始簇號與存儲后繼內容的下一個(gè)簇的簇號,若一個(gè)文件在簇號為i的存儲空間終止,則應在FAT[i]中寫(xiě)入 0xFFFF。在第2個(gè)FAT表格之后是DIR區,每個(gè)FAT16文件都對應一個(gè)目錄,每個(gè)目錄的大小為32字節。由于DIR占用了32個(gè)扇區,所以在 DIR中總共可有512個(gè)登記項,這也可通過(guò)讀取BPB表中的字段BPB_RootEntCnt得到。
如在SD卡上新建FAT文件,應首先在FAT表中查找尚未被使用的簇號,確定文件的起始簇號,并根據文件的大小,確定文件在FAT表格中的終止簇號,在相應的FAT[i]中寫(xiě)入起始與終止簇號。之后應在DIR區申請一個(gè)登記項,實(shí)際上就是在DIR區中建立一個(gè)32字節的文件目錄。最后在數據區對應該文件的扇區上寫(xiě)入文件數據。
3 軟件設計
3.1 SD卡與LPC2148的底層軟件接口設計
SD卡在上電復位后,自動(dòng)進(jìn)入SD模式,因此本設計中SD卡與LPC2148的底層軟件接口設計主要是指如何使得SD卡進(jìn)入SPI模式,并在SPI模式下對SD卡的內存單元實(shí)現讀/寫(xiě)操作。
圖2 SD卡初始化流程
圖2描述了SD卡在上電復位后的初始化流程。在SD卡上電復位后,SD卡控制器在向SD卡發(fā)送任何命令之前,應向SD卡發(fā)送至少74個(gè)時(shí)鐘周期,以等待SD卡完成上電復位過(guò)程,而且此時(shí)控制器應將片選信號線(xiàn)置高。在上電復位完成后,將片選信號線(xiàn)CS置低,即選中SD卡,且發(fā)送軟件復位指令(CMD0),SD卡即可進(jìn)入SPI模式,并且處于空閑狀態(tài)。之后若要對SD卡實(shí)現讀寫(xiě)操作,主機端LPC2148應持續發(fā)送激活指令(CMD1),直到收到SD卡正確的響應數據0x00,表明SD卡已經(jīng)退出空閑狀態(tài),可以對SD卡寄存器進(jìn)行讀/寫(xiě)以及實(shí)現數據的傳輸操作。
在完成上述操作后,應設置一次性寫(xiě)入或者讀取SD卡的數據的長(cháng)度,這可通過(guò)發(fā)送設置塊長(cháng)度指令(CMD16)來(lái)實(shí)現。本設計中設定一次讀/寫(xiě)的數據塊長(cháng)度為512字節。當要讀取、寫(xiě)入SD卡某一數據塊的內容時(shí),可通過(guò)發(fā)送讀取數據指令(CMD17)、寫(xiě)數據塊指令(CMD24)來(lái)完成。
3.2 讀取溫度值
當LPC2148要讀取ADT75各寄存器的內容時(shí),都需要經(jīng)過(guò)先寫(xiě)入再讀取的步驟。在寫(xiě)ADT75時(shí),需由地址指針寄存器指出將讀取的寄存器地址。圖3描述了讀取ADT75溫度數據的時(shí)序。
圖3 讀取ADT75溫度數據的時(shí)序
由于溫度數據寄存器的地址值為0x0,因此寫(xiě)入地址寄存器的內容為0。在A(yíng)DT75給出應答信號后,LPC2148給出讀信號,即在第9個(gè)時(shí)鐘周期將數據線(xiàn)SDA置為高電平,表明是讀取數據。之后LPC2148讀取溫度數據的高8位,再讀取數據的低8位,且LPC2148應在每個(gè)字節數據讀取結束后,給出低電平的應答信號。當溫度數據完成后,LPC2148傳送結束時(shí)序,結束數據讀操作。在12位溫度數據格式下,讀取的16位溫度數據低4位為 0,將其取補碼后,再除上16(浮點(diǎn)除法),就是實(shí)測的溫度。
3.3 軟件主流程
在本溫度記錄器的設計中,利用LPC2148片上RTC實(shí)時(shí)時(shí)鐘提供的秒中斷、分中斷、天中斷功能實(shí)現ADT75溫度數據的定時(shí)采集、存儲和文件的建立。
當RTC的秒中斷時(shí),LPC2148通過(guò)I2C總線(xiàn)在400 kHz的速率下讀取ADT75的溫度數據,并將溫度數據存于LPC2148內部RAM中。為了便于用戶(hù)使用讀卡器在PC機上讀取存入的溫度數據,每秒鐘存入RAM中的數據為22字節,且均為ASCII字符,數據格式如表3所列。
表3 存儲數據格式
其中前4個(gè)字節為溫度的實(shí)時(shí)采集時(shí)間,存儲的時(shí)間內容為時(shí)、分、秒。第1個(gè)溫度數據采用十六進(jìn)制表示;第2個(gè)8字節的溫度數據為轉換后的實(shí)際溫度值,每條記錄均以回車(chē)(ASCII碼為0x0D)、換行(ASCII碼為0x0A)結束。例如,在12時(shí)0分59秒采集的溫度數據為0x1910,則存入RAM中的數據為“120059 1910+025.625<CR><LF>”。
當RTC的分中斷時(shí),LPC2148將臨時(shí)存于RAM中的數據存入SD卡中。這樣可減少對SD卡的寫(xiě)操作次數,延長(cháng)SD卡的使用壽命。
當RTC的天中斷時(shí),LPC2148將在SD卡上新建一個(gè)新的記事本文件(.txt文件),文件名即為當天的日期,例如2007年10月6日建立的文件名為“071006.txt”。由于每分鐘寫(xiě)入SD卡的數據為22×60=1 320字節,因此每個(gè)文件的最大容量是1 856 KB。對于一張512 MB的SD卡,可保存約1年的溫度數據。
圖4描述了本設計的軟件主流程。在實(shí)現溫度數據的采集與存儲之前,需正確配置LPC2148的SPI總線(xiàn)控制寄存器、I2C控制寄存器及RTC實(shí)時(shí)時(shí)鐘寄存器。
結語(yǔ)
ADT75是一款完善的數字溫度傳感器,具有I2C總線(xiàn)接口;LPC2148功能強大,外設接口資源豐富。將LPC2148與ADT75通過(guò) I2C總線(xiàn)相結合,即可實(shí)現分布式多點(diǎn)溫度采集。SD卡FAT16文件系統的實(shí)現方便了用戶(hù)讀取與分析采集的溫度數據。本文為嵌入式系統數據的存儲、溫度數據的分布采集與記錄提供了一個(gè)切實(shí)可行的解決方案。
圖4 軟件主流程
參考文獻
[1] 2000 SD Group.SD Memory Card Specifications Physical Layer Specification.Part 1. Version 1.0,March 2000.
[2] Analog Devices. ±1°C Accurate, 12Bit Digital,Temperature Sensor.Rev.0.2005.
[3] 周立功, 張華. 深入淺出ARM7——LPC213x/LPC214x(下冊)[M]. 北京: 北京航空航天大學(xué)出版社,2006.
[4] Microsoft Corporation. FAT: General Overview of OnDisk Format. Version 1.02. May 5, 1999.
[5] 2000 SD Group. SD Memory Card Specifications Physical Layer Specification. Part 2. Version 1.0. Februay 2000.
檀永(碩士),主要研究方向為信號檢測與控制。
評論