當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于FAT16文件系統(tǒng)的嵌入式溫度記錄器

 

閃存技術(shù)的不斷發(fā)展,使得閃存卡(如SD卡、MMC卡等)因其體積小、容量大、可靠性高等優(yōu)點(diǎn)而在嵌入式存儲(chǔ)領(lǐng)域得到越來越廣泛的應(yīng)用。FAT16文件系統(tǒng)具有出色的文件管理性能,能被大多數(shù)操作系統(tǒng)識(shí)別,因此將閃存卡與FAT16文件系統(tǒng)相結(jié)合是嵌入式存儲(chǔ)、記錄系統(tǒng)中一個(gè)理想的方案。溫度采集與控制技術(shù)是現(xiàn)代測(cè)量、控制系統(tǒng)的一個(gè)重要組成部分。由于傳統(tǒng)的模擬傳感測(cè)量溫度系統(tǒng)存在測(cè)量精度低、易受干擾、硬件復(fù)雜、調(diào)試繁瑣等不利因素,而新型單片數(shù)字式溫度傳感器具有測(cè)量精度高、抗干擾能力強(qiáng)、操作方便、功耗低等優(yōu)點(diǎn),應(yīng)用范圍越來越廣泛。本嵌入式數(shù)字溫度記錄器以ARM7微處理器LPC2148、數(shù)字溫度傳感器ADT75為基礎(chǔ),采用大容量SD卡作為存儲(chǔ)介質(zhì),實(shí)現(xiàn)了FAT16文件系統(tǒng),為溫度采集與記錄、嵌入式系統(tǒng)的數(shù)據(jù)存儲(chǔ)提供了一個(gè)理想的解決方案。

1 硬件設(shè)計(jì)

本溫度記錄器的硬件電路實(shí)現(xiàn)簡(jiǎn)單,主要包含2個(gè)部分:SD卡讀/寫單元電路、ADT75測(cè)溫單元電路。如圖1所示,LPC2148通過SPI總線讀/寫SD卡,通過I2C總線讀/寫ADT75實(shí)現(xiàn)溫度的采集。

1.1 SD卡與LPC2148的硬件接口設(shè)計(jì)

SD卡是一種基于NAND Flash的存儲(chǔ)卡。由于它具有安全性高、容量大、體積小、功耗低、非易失性等優(yōu)點(diǎn),目前在嵌入式系統(tǒng)中已取得越來越廣泛的應(yīng)用。

SD卡支持2種接口模式:SD卡模式、SPI模式。SD卡模式采用4根數(shù)據(jù)線并行傳輸,速度快,但協(xié)議實(shí)現(xiàn)復(fù)雜;SPI模式雖然速度性能與SD模式相比有所欠缺,但協(xié)議實(shí)現(xiàn)簡(jiǎn)單,操作方便。

SD卡共有9個(gè)引腳,在SD模式下與SPI模式下各引腳的定義不相同。在SPI模式下,SD卡1~7引腳依次為片選引腳CS、數(shù)據(jù)輸入DI、電源地、電源VDD、時(shí)鐘信號(hào)CLK、電源地、數(shù)據(jù)輸出DO,8腳與9腳在SPI模式下保留未用。由于SPI總線通信協(xié)議要求在空閑時(shí)SPI總線應(yīng)保持高電平,因此CS、DI、DO、CLK應(yīng)外接10 kΩ左右的上拉電阻。

1.2 ADT75測(cè)溫工作原理

ADT75ARZ是ADI公司推出的一款低功耗、高分辨率的溫度傳感器。它內(nèi)含12位A/D轉(zhuǎn)換器,具有SM-Bus/I2C兼容接口,有超溫指示輸出引腳,額定工作溫度范圍為-55~+125℃,分辨率可達(dá)0.062 5℃,功耗低,工作電壓是3~5.5 V。其典型應(yīng)用電路如圖1所示。

ADT75的工作過程如下:ADT75通過內(nèi)部的溫度傳感器將采集的溫度轉(zhuǎn)化為電壓信號(hào)。此電壓信號(hào)經(jīng)過內(nèi)部的∑-△調(diào)節(jié)器后輸人至12位A/D轉(zhuǎn)換器,A/D轉(zhuǎn)換后的12位溫度數(shù)據(jù)存儲(chǔ)于溫度數(shù)據(jù)寄存器中,并將該溫度數(shù)據(jù)與溫度限定寄存器的值相比較,如果超過設(shè)定值,則引腳OS輸出有效電平。OS引腳輸出的有效電平可在配置寄存器中設(shè)定。

ADT75內(nèi)部有5個(gè)寄存器:4個(gè)數(shù)據(jù)寄存器,1個(gè)地址指針寄存器。4個(gè)數(shù)據(jù)寄存器分別為配置寄存器、溫度數(shù)據(jù)寄存器、THYST定值寄存器、Tos定值寄存器。配置寄存器是8位可讀/寫寄存器,可將ADT75設(shè)為各種模式,如關(guān)斷、超溫中斷、單步、SMBus報(bào)警使能、OS/ALERT引腳極性等;16位溫度數(shù)據(jù)寄存器是只讀寄存器,溫度值在其中以二進(jìn)制補(bǔ)碼形式存儲(chǔ),讀取時(shí)先讀取高8位,再讀取低8位;THYST定值寄存器與TOS定值寄存器均為16位可讀/寫寄存器,16位數(shù)據(jù)均以二進(jìn)制補(bǔ)碼形式存儲(chǔ),它們的默認(rèn)極限溫度分別為+75℃、+80℃(TOS存放了超溫限定值,THYST耵存放了滯后溫度限定值,當(dāng)測(cè)量溫度≥TOS設(shè)定的溫度值時(shí),OS引腳輸出有效電平,直到溫度降至THYST以下時(shí),OS引腳輸出電平才變?yōu)闊o效電平)。地址寄存器是一個(gè)8位的寄存器,在讀/寫ADT75內(nèi)部各寄存器時(shí),需將該寄存器的地址寫入地址寄存器中。例如,若要讀取ADT75的溫度數(shù)據(jù)值,則需將溫度數(shù)據(jù)寄存器的地址0x00寫入地址寄存器中。

LPC2148具有兩路標(biāo)準(zhǔn)I2C接口:P0.2與P0.3構(gòu)成第一路I2C接口,與其他I2C器件通信時(shí),需接上拉電阻;另一路I2C接口由于內(nèi)部已配置上拉電阻,因此可不外接上拉電阻。

1.3 32位微控制器LPC2148

LPC2148是Philips公司推出的一款支持實(shí)時(shí)仿真的32位/16位的具有ARM7TDMI-S內(nèi)核的微控制器,含有40 KB片內(nèi)RAM和512 KB片內(nèi)Flash存儲(chǔ)器,支持ISP與IAP操作。它接口資源豐富,含有2路32位定時(shí)器,1個(gè)USB 2.0全速設(shè)備控制器,2個(gè)支持16C550的串行UART接口,2路支持高速總線的I2C接口,1路SPI接口及片上RTC實(shí)時(shí)時(shí)鐘等。LPC2148內(nèi)含PLL鎖相環(huán)部件,可將主頻提高到60 MHz下運(yùn)行。LPC2148支持Thumb指令,在代碼規(guī)模受到約束的場(chǎng)合,可在Thumb狀態(tài)下運(yùn)行。LPC2148采用超小LQFP64封裝,工作電壓為3.3 V,適用于工業(yè)控制、醫(yī)療系統(tǒng)、訪問控制、通信網(wǎng)關(guān)、嵌入式軟modem等場(chǎng)合。

本記錄器主要利用了它的SPI總線接口、I2C接口、RTC實(shí)時(shí)時(shí)鐘及豐富的RAM資源等功能單元。LPC2148的RTC實(shí)時(shí)時(shí)鐘的時(shí)鐘源可由獨(dú)立的32.768 kHz晶振提供,并且RTC部件還有專門的電源引腳VBAT,它可由外部電池供電。本采集器采用了32.768 kHz外部晶振并使用電池供電,使得在采集器掉電后,RTC實(shí)時(shí)時(shí)鐘可以繼續(xù)運(yùn)行。

2 SD卡FAT16文件系統(tǒng)分析

FAT(File Allocation Table,文件分配表)文件管理系統(tǒng)是由微軟發(fā)布的由MS-DOS支持的一種文件管理系統(tǒng)。在FAT發(fā)展過程中,先后發(fā)布了FAT12、FAT16、FAT32三個(gè)版本。其中FAT16是指磁盤的一個(gè)分區(qū)最多含有2的16次方個(gè)簇,由于每個(gè)簇的最大存儲(chǔ)空間只有32 KB,因此磁盤的一個(gè)分區(qū)的存儲(chǔ)容量最大為2 GB。由于一般SD卡的容量大小不超過2 GB,所以SD卡通常只作為一個(gè)分區(qū)。

SD卡支持FAT12與FAT16文件系統(tǒng)。表1描述了本文中512 MB SD卡的文件系統(tǒng)結(jié)構(gòu)。

SD卡中的保留扇區(qū),一般不應(yīng)向該扇區(qū)寫入數(shù)據(jù)。若寫入不正確的數(shù)據(jù),則會(huì)破壞SD卡的文件系統(tǒng)結(jié)構(gòu),導(dǎo)致SD卡在PC機(jī)上無法識(shí)別。

在FAT文件系統(tǒng)中,BPB(Bios Parameter Block,本分區(qū)參數(shù)記錄表)是一個(gè)很重要的參數(shù)表。它表明了該分區(qū)的一系列重要基本參數(shù),例如總扇區(qū)數(shù)、每個(gè)簇的空間大小、FAT表占用的扇區(qū)數(shù)等。在SD卡中,保留扇區(qū)的第一個(gè)扇區(qū)(即分區(qū)記錄扇區(qū))的第12~36字節(jié)即為BPB。表2給出了BPB各字段的內(nèi)容及說明。

由于FAT文件系統(tǒng)采用鏈?zhǔn)酱鎯?chǔ)原理,因此FAT表格中記錄了每個(gè)文件的起始簇號(hào)、后繼簇號(hào)、終止簇號(hào)。本文中,用FAT[i]表明在FAT表中簇號(hào)為i的字段的內(nèi)容,且每個(gè)FAT[i]占用2個(gè)字節(jié)。在FAT16文件系統(tǒng)中,由于FAT[0]與FAT[1]默認(rèn)值為0xFFFF,因此FAT表從FAT[2]開始存儲(chǔ)文件的起始簇號(hào)與終止簇號(hào),所以文件的起始簇號(hào)為0x0002。在FAT表中,用0x0000表明該簇號(hào)對(duì)應(yīng)的存儲(chǔ)空間沒有被文件占用,用0x0002~0xFFFE的值表明起始簇號(hào)與存儲(chǔ)后繼內(nèi)容的下一個(gè)簇的簇號(hào),若一個(gè)文件在簇號(hào)為i的存儲(chǔ)空間終止,則應(yīng)在FAT[i]中寫入0xFFFF。在第2個(gè)FAT表格之后是DIR區(qū),每個(gè)FAT16文件都對(duì)應(yīng)一個(gè)目錄,每個(gè)目錄的大小為32字節(jié)。由于DIR占用了32個(gè)扇區(qū),所以在DIR中總共可有512個(gè)登記項(xiàng),這也可通過讀取BPB表中的字段BPB_RootEntCnt得到。

如在SD卡上新建FAT文件,應(yīng)首先在FAT表中查找尚未被使用的簇號(hào),確定文件的起始簇號(hào),并根據(jù)文件的大小,確定文件在FAT表格中的終止簇號(hào),在相應(yīng)的FAT[i]中寫入起始與終止簇號(hào)。之后應(yīng)在DIR區(qū)申請(qǐng)一個(gè)登記項(xiàng),實(shí)際上就是在DIR區(qū)中建立一個(gè)32字節(jié)的文件目錄。最后在數(shù)據(jù)區(qū)對(duì)應(yīng)該文件的扇區(qū)上寫入文件數(shù)據(jù)。

3 軟件設(shè)計(jì)

3.1 SD卡與LPC2148的底層軟件接口設(shè)計(jì)

SD卡在上電復(fù)位后,自動(dòng)進(jìn)入SD模式,因此本設(shè)計(jì)中SD卡與LPC2148的底層軟件接口設(shè)計(jì)主要是指如何使得SD卡進(jìn)入SPI模式,并在SPI模式下對(duì)SD卡的內(nèi)存單元實(shí)現(xiàn)讀/寫操作。

圖2描述了SD卡在上電復(fù)位后的初始化流程。在SD卡上電復(fù)位后,SD卡控制器在向SD卡發(fā)送任何命令之前,應(yīng)向SD卡發(fā)送至少74個(gè)時(shí)鐘周期,以等待SD卡完成上電復(fù)位過程,而且此時(shí)控制器應(yīng)將片選信號(hào)線置高。在上電復(fù)位完成后,將片選信號(hào)線CS置低,即選中SD卡,且發(fā)送軟件復(fù)位指令(CMD0),SD卡即可進(jìn)入SPI模式,并且處于空閑狀態(tài)。之后若要對(duì)SD卡實(shí)現(xiàn)讀寫操作,主機(jī)端LPC2148應(yīng)持續(xù)發(fā)送激活指令(CMD1),直到收到SD卡正確的響應(yīng)數(shù)據(jù)0x00,表明SD卡已經(jīng)退出空閑狀態(tài),可以對(duì)SD卡寄存器進(jìn)行讀/寫以及實(shí)現(xiàn)數(shù)據(jù)的傳輸操作。

在完成上述操作后,應(yīng)設(shè)置一次性寫入或者讀取SD卡的數(shù)據(jù)的長(zhǎng)度,這可通過發(fā)送設(shè)置塊長(zhǎng)度指令(CMD16)來實(shí)現(xiàn)。本設(shè)計(jì)中設(shè)定一次讀/寫的數(shù)據(jù)塊長(zhǎng)度為512字節(jié)。當(dāng)要讀取、寫入SD卡某一數(shù)據(jù)塊的內(nèi)容時(shí),可通過發(fā)送讀取數(shù)據(jù)指令(CMD17)、寫數(shù)據(jù)塊指令(CMD24)來完成。

3.2 讀取溫度值

當(dāng)LPC2148要讀取ADT75各寄存器的內(nèi)容時(shí),都需要經(jīng)過先寫入再讀取的步驟。在寫ADT75時(shí),需由地址指針寄存器指出將讀取的寄存器地址。圖3描述了讀取ADT75溫度數(shù)據(jù)的時(shí)序。

由于溫度數(shù)據(jù)寄存器的地址值為0x0,因此寫入地址寄存器的內(nèi)容為0。在ADT75給出應(yīng)答信號(hào)后,LPC2148給出讀信號(hào),即在第9個(gè)時(shí)鐘周期將數(shù)據(jù)線SDA置為高電平,表明是讀取數(shù)據(jù)。之后LPC2148讀取溫度數(shù)據(jù)的高8位,再讀取數(shù)據(jù)的低8位,且LPC2148應(yīng)在每個(gè)字節(jié)數(shù)據(jù)讀取結(jié)束后,給出低電平的應(yīng)答信號(hào)。當(dāng)溫度數(shù)據(jù)完成后,LPC2148傳送結(jié)束時(shí)序,結(jié)束數(shù)據(jù)讀操作。在12位溫度數(shù)據(jù)格式下,讀取的16位溫度數(shù)據(jù)低4位為0,將其取補(bǔ)碼后,再除上16(浮點(diǎn)除法),就是實(shí)測(cè)的溫度。

3.3 軟件主流程

在本溫度記錄器的設(shè)計(jì)中,利用LPC2148片上RTC實(shí)時(shí)時(shí)鐘提供的秒中斷、分中斷、天中斷功能實(shí)現(xiàn)ADT75溫度數(shù)據(jù)的定時(shí)采集、存儲(chǔ)和文件的建立。

當(dāng)RTC的秒中斷時(shí),LPC2148通過I2C總線在400 kHz的速率下讀取ADT75的溫度數(shù)據(jù),并將溫度數(shù)據(jù)存于LPC2148內(nèi)部RAM中。為了便于用戶使用讀卡器在PC機(jī)上讀取存入的溫度數(shù)據(jù),每秒鐘存入RAM中的數(shù)據(jù)為22字節(jié),且均為ASCII字符,數(shù)據(jù)格式如表3所列。

其中前4個(gè)字節(jié)為溫度的實(shí)時(shí)采集時(shí)間,存儲(chǔ)的時(shí)間內(nèi)容為時(shí)、分、秒。第1個(gè)溫度數(shù)據(jù)采用十六進(jìn)制表示;第2個(gè)8字節(jié)的溫度數(shù)據(jù)為轉(zhuǎn)換后的實(shí)際溫度值,每條記錄均以回車(ASCII碼為0x0D)、換行(ASCII碼為0x0A)結(jié)束。例如,在12時(shí)0分59秒采集的溫度數(shù)據(jù)為0x1910,則存入RAM中的數(shù)據(jù)為“120059 1910+025.625<CR><LF>”。

當(dāng)RTC的分中斷時(shí),LPC2148將臨時(shí)存于RAM中的數(shù)據(jù)存人SD卡中。這樣可減少對(duì)SD卡的寫操作次數(shù),延長(zhǎng)SD卡的使用壽命。

當(dāng)RTC的天中斷時(shí),LPC2148將在SD卡上新建一個(gè)新的記事本文件(.txt文件),文件名即為當(dāng)天的日期,例如2007年10月6日建立的文件名為“071006.txt'’。由于每分鐘寫入SD卡的數(shù)據(jù)為22×60=1 320字節(jié),因此每個(gè)文件的最大容量是1 856 KB。對(duì)于一張512 MB的SD卡,可保存約1年的溫度數(shù)據(jù)。

圖4描述了本設(shè)計(jì)的軟件主流程。在實(shí)現(xiàn)溫度數(shù)據(jù)的采集與存儲(chǔ)之前,需正確配置LPC2148的SPI總線控制寄存器、I2C控制寄存器及RTC實(shí)時(shí)時(shí)鐘寄存器。

結(jié) 語

ADT75是一款完善的數(shù)字溫度傳感器,具有I2C總線接口;LPC2148功能強(qiáng)大,外設(shè)接口資源豐富。將LPC2148與ADT75通過I2C總線相結(jié)合,即可實(shí)現(xiàn)分布式多點(diǎn)溫度采集。SD卡FAT16文件系統(tǒng)的實(shí)現(xiàn)方便了用戶讀取與分析采集的溫度數(shù)據(jù)。本文為嵌入式系統(tǒng)數(shù)據(jù)的存儲(chǔ)、溫度數(shù)據(jù)的分布采集與記錄提供了一個(gè)切實(shí)可行的解決方案。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉