• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      大容量SD卡在WiFi環(huán)境要素記錄儀中的應(yīng)用

      2016-03-22 13:50孫曉林
      電腦知識(shí)與技術(shù) 2016年2期

      孫曉林

      摘要:研究并設(shè)計(jì)了一種新型環(huán)境要素(溫度、濕度)數(shù)據(jù)采集系統(tǒng)的SD卡存儲(chǔ)方案,能夠識(shí)別MMC卡、SD卡,并且也可以細(xì)分SD1.0和SD2.0以及SD2.0是否是SDHC卡還是普通SD卡,幾乎兼容了市面上已知的所有SD存儲(chǔ)卡類型。該方案選用基于51內(nèi)核的C8051F320高性能單片機(jī)作為主控器,采用SPI總線與SD卡通信,使用FAT32文件系統(tǒng),解決了長時(shí)間對環(huán)境溫度進(jìn)行采集所必須面臨的數(shù)據(jù)量龐大的問題,并且本方案將溫度數(shù)據(jù)結(jié)合時(shí)標(biāo)信息存儲(chǔ)在Excel表格中,可以供計(jì)算機(jī)直接進(jìn)行處理。

      關(guān)鍵詞:C8051F320;SD卡;FAT32;大容量存儲(chǔ)

      中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)02-0037-02

      Abstract: A new scheme of SD memory card applied to the WiFi environment elements recording instrument is designed,and the method of distinguishing SD card type is given. High performance MCU C8051F320 based on 51 core is used as main controller and communicates with SD card through SPI bus.System uses FAT32 file system to solve the problems of large data storage, and the scheme stores time information in the excel sheet,which computer could process directly.

      Key words: C8051F320; SD card; FAT32; large capacity storage

      WIFI環(huán)境要素記錄儀需要通過WIFI將多點(diǎn)采集的數(shù)據(jù)傳輸?shù)娇倷C(jī),由于環(huán)境要素變化趨勢緩慢,所以只有通過長時(shí)間大量采集到的數(shù)據(jù)才有科研價(jià)值,因此總機(jī)采用大容量存儲(chǔ)設(shè)備作為存儲(chǔ)介質(zhì)是一個(gè)很好的選擇。在市面上最常見的可插拔式存儲(chǔ)設(shè)備有SD卡,U盤和CF卡。CF卡不能與計(jì)算機(jī)直接通信,而U盤的硬件電路較復(fù)雜,所以綜合考慮SD卡是最為可靠的選擇。SD卡耐用,安全,存儲(chǔ)容量大,滿足采集系統(tǒng)需要存儲(chǔ)大量數(shù)據(jù)的需求。

      為了方便卡上數(shù)據(jù)在操作系統(tǒng)上的處理,將Windows操作系統(tǒng)上的FAT32文件系統(tǒng)移植到了單片機(jī)系統(tǒng)中,單片機(jī)對SD卡的數(shù)據(jù)寫入完全符合FAT32文件系統(tǒng)規(guī)范,計(jì)算機(jī)可直接處理SD卡中的數(shù)據(jù)。

      1 SD卡接口硬件電路設(shè)計(jì)

      C8051F320系列器件使用Silicon Labs的專利CIP-51微控制器內(nèi)核。

      CIP-51和MCS-51指令集完全兼容。CIP-51采用流水線結(jié)構(gòu),70%的指令的執(zhí)行時(shí)間為1或2個(gè)系統(tǒng)時(shí)鐘周期。CIP-51內(nèi)核具有標(biāo)準(zhǔn)8052的所有外設(shè)部件,包括四個(gè)16位計(jì)數(shù)器/定時(shí)器、一個(gè)具有增強(qiáng)波特率配置的全雙工UART、一個(gè)增強(qiáng)型SPI端口、2304字節(jié)內(nèi)部RAM、128字節(jié)SFR地址空間及25/21個(gè)I/O引腳。C8051F320單片機(jī)工作電壓3.3V,與SD卡工作電壓兼容。

      SD卡支持SD模式和SPI模式兩種通信方式。采用SPI模式雖然不如SD模式效率高,但是他只占用4個(gè)GPIO口。為了提高可移植性,在這里采用GPIO模擬SPI總線時(shí)序的方法與SD卡進(jìn)行通信。SPI通信方式只需要4條信號(hào)線即可完成數(shù)據(jù)的傳輸,分別是時(shí)鐘SCLK,主入從出MISO,主出從入MOSI,片選CS。

      SD卡的最高數(shù)據(jù)讀寫速度為10MB/s,接口電壓為2.7—3.6V,具有9個(gè)引腳。SD卡使用卡座代替?zhèn)鬏旊娎|,減少了環(huán)境干擾,降低了出錯(cuò)率,而且一對一傳輸沒有共享信道的問題。

      2 SD卡接口的軟件設(shè)計(jì)

      本設(shè)計(jì)采用GPIO口模擬SPI總線時(shí)序的方法與SD卡通信,這里簡單介紹

      SPI總線時(shí)序和SD卡通信方式。

      2.1 SPI總線時(shí)序

      分配四個(gè)GPIO口分別作為SCLK、MISO、MOSI和CS,全部設(shè)置為推挽輸出。寫數(shù)據(jù)時(shí),先將SCLK置為低電平,在MOSI引腳上準(zhǔn)備好傳輸?shù)奈?,延時(shí)一段時(shí)間后將SCLK置為高電平,再延時(shí)一段時(shí)間等待SD卡讀走數(shù)據(jù)。讀數(shù)據(jù)過程與寫數(shù)據(jù)相反,需要注意的是SD卡在時(shí)鐘下降沿發(fā)送數(shù)據(jù),SCLK復(fù)位后需要延時(shí)一段時(shí)間之后再檢測MISO引腳上的數(shù)據(jù)。以上過程無論發(fā)送者是誰都是以字節(jié)為單位傳輸,先發(fā)高位。

      2.2 SD卡的初始化與識(shí)別

      要讀寫SD卡,首先要對其初始化。初始化成功后,即可發(fā)送命令甄別SD卡種類以及獲取其他關(guān)鍵信息。普通SD卡和SDHC卡最大的不同在于它們扇區(qū)尋址方式,SDHC卡尋址方式為扇區(qū)地址尋址,普通SD卡尋址方式為字節(jié)地址尋址。因此在讀寫操作時(shí)應(yīng)該根據(jù)不同的卡對地址進(jìn)行不同的處理。

      3 FAT32文件系統(tǒng)

      文件管理系統(tǒng)就是要實(shí)現(xiàn)一種文件名與文件數(shù)據(jù)的映射,也就是給定一文件名后就可以找到它所對應(yīng)的數(shù)據(jù)。這看似簡單的要求,事實(shí)上要考慮很多問題,比如數(shù)據(jù)的不連續(xù)存儲(chǔ)、存儲(chǔ)空間的有效利用等。FAT32文件系統(tǒng)解決這個(gè)問題的具體方式是用文件索引的辦法,F(xiàn)AT32專門開辟了一塊存儲(chǔ)空間用來存儲(chǔ)文件數(shù)據(jù)區(qū)地址的索引,這個(gè)地址也就是文件數(shù)據(jù)區(qū)所占用的簇的地址,之所以用簇作為最小存儲(chǔ)單位是FAT32在空間與效率的矛盾中做出的權(quán)衡。這塊專門的空間就是FAT32的核心--文件分配表(FAT)。

      FAT表的表項(xiàng)與數(shù)據(jù)區(qū)中的簇是一一對應(yīng)的,每一個(gè)表項(xiàng)是32位無符號(hào)整數(shù)值,這些值就是表項(xiàng)的屬性,如果一個(gè)文件不止占用一個(gè)簇,那么它對應(yīng)的起始簇的表項(xiàng)值就是下一個(gè)簇的地址,其他表項(xiàng)以此類推就形成了一個(gè)鏈表結(jié)構(gòu),通過這種鏈表結(jié)構(gòu)便可以方便地查詢整個(gè)文件數(shù)據(jù)。

      3.1 FAT32文件系統(tǒng)結(jié)構(gòu)

      FAT32文件系統(tǒng)可以分為以下幾個(gè)部分:MBR:主引導(dǎo)記錄。主要功能是記錄各個(gè)分區(qū)的信息(分區(qū)信息由MBR中的DPT記錄)。

      DBR:DOS引導(dǎo)記錄。DBR中的BPB(BIOS參數(shù)塊)記錄了很多非常關(guān)鍵的參數(shù),如扇區(qū)和簇的大小、FAT表的大小、根目錄的位置等。

      FAT:FAT32的核心,上文中已有講解,這里不再贅述。

      首目錄:即第一個(gè)目錄,是進(jìn)入磁盤的第一個(gè)入口。首目錄扇區(qū)存儲(chǔ)的是文件索引還有子目錄索引。

      文件/目錄項(xiàng):通常是一個(gè)32字節(jié)的數(shù)據(jù)段,用來記錄文件和目錄的相關(guān)信息,如名稱、大小、時(shí)間、數(shù)據(jù)開始位置等。

      數(shù)據(jù)區(qū)(DA):是FAT32文件系統(tǒng)的數(shù)據(jù)存儲(chǔ)的主體部分。數(shù)據(jù)區(qū)中存儲(chǔ)的是文件和目錄的數(shù)據(jù),本身是由最小存儲(chǔ)單元(簇)構(gòu)成的。

      DBR包含了與文件系統(tǒng)相關(guān)的很多極為重要的參數(shù)信息,DBR扇區(qū)有一個(gè)非常明顯的標(biāo)志,那就是它的開頭是一個(gè)跳轉(zhuǎn)指令(EB 58 90)。我們真正關(guān)心的是中間的79個(gè)字節(jié)的數(shù)據(jù),這79個(gè)字節(jié)就是BPB。

      在保留扇區(qū)之后緊接著的就是FAT區(qū),存有文件分配表,文件分配表一般有兩個(gè)。接下來是首目錄簇,首目錄簇簇號(hào)是第2簇,第0和第1簇為保留簇。具體各個(gè)區(qū)域地址的計(jì)算可從BPB表中解析出的相關(guān)數(shù)據(jù)計(jì)算獲得。

      3.2 FAT32文件系統(tǒng)的實(shí)現(xiàn)

      本文設(shè)計(jì)的文件系統(tǒng)采用模塊化結(jié)構(gòu),所有功能封裝在相應(yīng)的功能函數(shù)中,總體框架如圖1所示。

      本系統(tǒng)屬于自動(dòng)化控制,所以沒有提供用戶使用的應(yīng)用程序,設(shè)備上電后自動(dòng)工作?;诖?,文件系統(tǒng)的操作也是基于一套流程自動(dòng)工作,文件系統(tǒng)具體工作流程如圖2所示。

      圖2中文件系統(tǒng)的工作全部借助功能函數(shù)來完成。尋找文件夾功能通過unsigned long FindDir()函數(shù)完成,這個(gè)函數(shù)依次將首目錄中的文件目錄項(xiàng)讀出來,文件夾在FAT32中也被看成一個(gè)文件,然后通過判斷每個(gè)文件名稱是否是CSV尋找文件夾。

      如果文件夾已經(jīng)存在則調(diào)用ClearFile(unsigned long)函數(shù)刪除原先的.CSV文件,參數(shù)傳入的是文件夾的起始簇地址,地址由FindDir()函數(shù)返回,刪除操作是將文件目錄項(xiàng)的前十一個(gè)字節(jié)也就是文件名和擴(kuò)展名字段寫為0xE5,0x20,…,0x20即為刪除,之后還需要對FAT表進(jìn)行復(fù)位操作,將文件夾所占用的簇的簇項(xiàng)還原成空簇。

      如果文件夾不存在,則創(chuàng)建CSV文件夾,創(chuàng)建文件夾首先需要構(gòu)造文件目錄項(xiàng),文件目錄項(xiàng)最重要的三項(xiàng)就是文件名、擴(kuò)展名和起始簇,文件夾不需要擴(kuò)展名,文件名定義為CSV,起始簇通過調(diào)用unsigned long FindNextCLus(unsigned long)函數(shù)完成,傳入的參數(shù)是上一次剛剛分配的簇地址,這樣函數(shù)就從這個(gè)簇項(xiàng)開始向下搜索空簇,而不用每次都從0簇開始,需要注意的是,每次分配了一個(gè)空簇需要將這個(gè)簇對應(yīng)的數(shù)據(jù)區(qū)內(nèi)容全部復(fù)位為0,以免上次刪除的文件內(nèi)容還留在數(shù)據(jù)區(qū)中。

      文件目錄項(xiàng)構(gòu)造完畢后,函數(shù)尋找首目錄中空閑空間以安插構(gòu)造好的文件目錄項(xiàng),這個(gè)過程需要注意極限情況,即首目錄簇空間剛剛好用盡,這樣需要先構(gòu)造新簇后再安插。文件夾和文件不同之處在于,文件數(shù)據(jù)區(qū)就是文件內(nèi)容,而文件夾的數(shù)據(jù)區(qū)中依然是類似首目錄簇中的一個(gè)個(gè)文件目錄項(xiàng),文件夾數(shù)據(jù)區(qū)最開始的兩個(gè)目錄項(xiàng)是規(guī)定好的,第一個(gè)目錄項(xiàng)把該文件夾在首目錄中的目錄項(xiàng)前十一個(gè)字節(jié)更換成0x2E,0x20,…,0x20,第二個(gè)改為0x2E,0x2E,…,0x20并且把起始簇地址寫為0,其實(shí)這兩個(gè)目錄項(xiàng)就是在文件結(jié)構(gòu)中經(jīng)常見到的”.”和”..”。創(chuàng)建文件與創(chuàng)建文件夾過程大同小異,構(gòu)造好文件目錄項(xiàng)之后安插到文件夾目錄簇中即可,也需要注意極限情況。

      以上創(chuàng)建的文件是.CSV格式,之所以創(chuàng)建這樣格式的文件是因?yàn)樵撐募袷街С职褦?shù)據(jù)以ASCII碼寫入,并且以逗號(hào)分隔之后,在EXCEL表格里每一個(gè)以逗號(hào)分隔的數(shù)據(jù)就單獨(dú)顯示在一個(gè)單元格中,不需要再做任何處理。所以當(dāng)總機(jī)獲得了一個(gè)數(shù)據(jù)采集端傳來的數(shù)據(jù)后就把它轉(zhuǎn)化成ASCII碼并且以逗號(hào)分隔寫入到文件數(shù)據(jù)區(qū)中。數(shù)據(jù)寫入操作由unsigned int WriteDataToSD(unsigned char*,unsigned char)完成,指針參數(shù)指向25個(gè)字節(jié)的數(shù)據(jù)包,函數(shù)內(nèi)部主要是完成向緩沖區(qū)復(fù)制數(shù)據(jù)包的工作,512字節(jié)緩沖區(qū)裝滿后寫入文件中,并且更新文件長度,對扇區(qū)計(jì)數(shù),8個(gè)扇區(qū)裝滿后給文件分配新簇。另一個(gè)參數(shù)是準(zhǔn)備復(fù)制進(jìn)緩沖區(qū)的數(shù)據(jù)包長度,因?yàn)榫彌_區(qū)大小不是數(shù)據(jù)包長度整數(shù)倍,所以最后肯定不能一次性將25個(gè)字節(jié)寫入,具體能寫入多少就需要程序進(jìn)行判斷,實(shí)現(xiàn)方法是讓函數(shù)返回緩沖區(qū)已寫入字節(jié)長度給一個(gè)變量WriteByte,然后進(jìn)行計(jì)算: (512-WriteByte)>25? 25:512- WriteByte,結(jié)果值在下一次調(diào)用函數(shù)時(shí)作為參數(shù)傳入。

      最后在采集完數(shù)據(jù)需要系統(tǒng)停止工作時(shí)極有可能緩沖區(qū)并沒有被裝滿,也就不會(huì)觸發(fā)寫SD卡的操作,如果不進(jìn)行處理的話這些數(shù)據(jù)就會(huì)被丟棄,雖然丟棄的數(shù)據(jù)量對整體采集的數(shù)據(jù)來說非常小,但是為了提高系統(tǒng)的可靠性,在這里還是用一個(gè)函數(shù)WriteWhenOff()來處理,強(qiáng)制將緩沖區(qū)里數(shù)據(jù)寫入到SD卡,這就需要WriteDataToSD()函數(shù)在內(nèi)部往SD卡寫數(shù)據(jù)同時(shí)更新一些全局變量以記錄文件數(shù)據(jù)區(qū)待寫入空間的地址,以便于調(diào)用WriteWhenOff()函數(shù)時(shí)可以接著往下寫。

      4 結(jié)語

      本文介紹了SD卡在WiFi環(huán)境要素記錄儀中的應(yīng)用,使用C8051F320單片機(jī)處理與SD卡的通信,極大地提高了通信速率。本系統(tǒng)很好地解決了市面上各種SD卡的識(shí)別問題,提高了可靠性,并給出了適用于嵌入式系統(tǒng)的FAT32文件系統(tǒng)的實(shí)現(xiàn),直接將數(shù)據(jù)存入EXCEL表格中供PC處理。

      參考文獻(xiàn):

      [1] 唐磊,洪傳榮,朱廣信.基于FPGA的SD卡控制器設(shè)計(jì)[J].電聲技術(shù),2011,3(3):29-31.

      [2] 魏來,周穗華,劉旭東.基于SD卡的水聲信號(hào)采集系統(tǒng)設(shè)計(jì)[J].海洋技術(shù)學(xué)報(bào),2010,2(2):51-55.

      [3] 李文華,徐國洪,胡華文.基于FAT32文件系統(tǒng)的SD卡數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)研究[J].長江大學(xué)學(xué)報(bào),2012,9(6):102-104.

      郓城县| 象山县| 航空| 玉环县| 黄大仙区| 务川| 正镶白旗| 博兴县| 会东县| 天镇县| 永城市| 呈贡县| 手机| 无为县| 来宾市| 黄平县| 安康市| 壶关县| 巴塘县| 聂拉木县| 新源县| 北京市| 武清区| 垣曲县| 文化| 金塔县| 自贡市| 孝感市| 仙居县| 榆树市| 开化县| 望谟县| 林州市| 高淳县| 霍山县| 金沙县| 随州市| 建昌县| 阿图什市| 揭东县| 大连市|