《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > HCS12X單片機的SD卡FAT文件系統讀寫設計
HCS12X單片機的SD卡FAT文件系統讀寫設計
電子設計工程
時 堯 天津大學
摘要: 摘要:基于HCSl2X單片機SPI模塊讀取MicroSD卡與SD卡,并解析SD卡上FAT文件系統以實現文件的讀取與寫入。測試證明,系統對FAT文件系統的讀取穩定,誤差小,速度較快。使用HCSl2X類單片機對SD卡進行讀取,在汽車智能設
Abstract:
Key words :

摘要:基于HCSl2X單片機SPI模塊讀取Micro SD卡與SD卡,并解析SD卡上FAT文件系統以實現文件的讀取與寫入。測試證明,系統對FAT文件系統的讀取穩定,誤差小,速度較快。使用HCSl2X類單片機對SD卡進行讀取,在汽車智能設計和單片機調試方面有較高的應用價值。
關鍵詞:HCSl2X單片機;SPI模塊;SD卡;Micro SD卡;FAT文件系統

    隨著信息技術的飛速發展,高容量存儲芯片日益向大容量小體積發展,其中以SD卡、Micro SD卡為突出代表。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發研制。大小猶如一張郵票的SD卡,重量只有2 g,卻擁有高記憶容量、快速數據傳輸率、極大的移動靈
活性以及很好的安全性。通過單片機處理SD卡信息,可以將信息化嵌入式產業向更小體積發展。考慮到穩定性與讀取速度,研究中采用了Freescale公司的16位單片機MC9S12XSl28MAA。為了進一步滿足嵌入式研究的實時調試與應用需要,把SD卡的讀取以及FATl6文件系統的讀取寫入移植到此單片機中,使開發應用有更好的擴展性。本文首次把FATl6文件系統的讀取移植到HCSl2X單片機上,并通過HCSl2X單片機的SPI模塊進行SD卡的讀寫,取得了良好的效果。

1 研究平臺和設計思想
1.1 平臺介紹
    ①MCS9S12XSl28MAA:Freescale公司16位單片機HCSl2X家族中的一員,相比于其他HCSl2X單片機,去除了XGATE協處理器,大大降低了成本。此單片機內嵌了許多資源,包括128KB Flash、4 KB EEPROM、16 KBROM以及多種通信接口。
    ②Micro SD卡:采用SD架構設計而成,尺寸幾乎只有一片指甲蓋大小,由摩托羅拉公司與SanDisk公司共同研發,是一種超小型卡(11 mm×15 mm×1 ram),約為SD卡的1/4。它支持3種傳輸模式,SPI模式(獨立序列輸入和序列輸出),1位SD模式(獨立指令和數據通道,獨有的
傳輸格式),以及4位SD模式(使用額外的引腳以及某些重新設置的引腳,支持4位寬的并行傳輸)。
    ③CodeWarrior:Freescale公司開發的編程環境。本文使用的CodeWarrior Special 5.0 For S12(X)是專門針對HCSl2X單片機開發的,可以進行程序的編輯、編譯、鏈接和在線調試等多項功能,支持在C語言中嵌入匯編語言。
    ④移植條件:對于本文中的SD卡讀取與寫入,用戶的單片機推薦使用HCSl2X系列,也可使用HCSl2系列,但總線超頻會不穩定,從而影響SD卡讀寫速率以及穩定性。
1.2 設計思想
    圖1顯示了本文中所使用的SD卡FAT文件系統通過MC9S12XSl28MAA進行解析的軟硬件結構體系。編譯鏈接軟件使用CodeWarrior 5.O,硬件采用MC9S12XSl28MAA單片機與Kingston公司的Micro SD卡。代碼由4部分組成:用戶應用部分(由用戶編寫控制,本文使用MC9S12XS128MAA SCI串口模塊進行信息調試),FAT文件系統讀取解析部分,硬件控制部分(通過單片機SPI模塊與SD卡連接),以及單片機CPU的初始化部分。其中,SPI模塊與SD卡連接的硬件控制部分,以及FAT文件系統的讀取解析部分是本文的重點。

a.JPG
    其中,Sd_SPI.h是關于SD卡讀取寫入部分的一些宏定義、常量和函數的聲明;Sd_SPI.c包括了通過SPI模塊讀寫SD卡的代碼;Fat.h是關于Fat文件系統解析的全局變量、宏定義以及函數聲明;Fat.c包括了Fat文件系統解析的代碼;SimpleFat.c是簡易讀取Fat文件系統信息的代碼;SimpleFat.h是其全局變量以及函數的聲明。

2 硬件設計
    SD卡有2種操作模式:SD卡模式、SPI模式。SD卡模式允許通過4線高速總線傳輸,但由于大部分單片機無此接口模塊,故選擇SPI模式。HCSl2X系列單片機內部都帶有此同步串行外部設備接口(Serial Peripheral Interface,SPI)。單片機可以通過SPI系統組成一個通信速率比SCI高的同步網絡,故使用SPI模式可以把外設減少到最低。SPI模式相對于SD卡模式的缺點是損失了傳輸速度;但是目前的微處理器的處理速度越來越高,利用SPI模式大都能滿足工程需要。
    HCSl2X單片機的全雙工8位SPI模塊有4個引腳,分別為主入從出引腳MISO、主入從出引腳MOSI、串行時鐘引腳SCK以及從機片選引腳SS。當CS信號線為低電平時,主機開始所有的總線傳輸。數據從單片機的MOSI引腳同步輸入Micro SD卡的DA引腳,Micro SD卡返回數據由DO線同步輸入單片機的MISO引腳,數據在CLK信號的上升沿同步輸入和輸出。

3 軟件設計
3.1 HCSl2X總線時鐘超頻
    MC9S12XSl28MAA默認總線時鐘默認同外接晶振相關,但可以通過配置PLL鎖相環實現單片機總線超頻,從而加快SD卡讀取速率。實驗中可通過下列代碼將單片機總線頻率超頻到80MHz:

c.JPG
  
3.2 HCSl2XSPl模塊初始化
    MC9S12XSl28MAA單片機包含2個串行外設接口SPI,可以很方便地實現對Micro SD卡接口的數據傳輸。為了配置時鐘和數據長度,需要對SPI控制寄存器(SPCRl和SPICR2)、SPI波特率寄存器SPIBR和SPI數據寄存器SPIDR進行設置:使能SPI模塊,將SPICRl中的MSTR位置1使單片機工作在主機模式,產生串行時鐘來同步主從雙方的移位寄存器,配置SPI時鐘極性位與SPI時鐘相位控制位,使能從機輸出選擇;初始化SPI波特率寄存器。
3.3 SD卡初始化
    SD卡初始數據傳輸需工作在低于400 kb/s的頻率,因此配置SPI波特率寄存器,以工作在低速模式下。片選信號后應延時至少74個時鐘周期。SD卡默認缺省使用SD總線傳輸協議,主機需要發出命令CMDO(CMD_GO_IDLE_STATE)才能使SD卡工作在SPI傳輸模式下,當單片機返回0x 01時說明已經進入了IDLE狀態。此時應循環發送CMD55+ACMD41以確認是否為SD卡,如果回應超時則發送CMDl(CMD_SEND_OP_COND)以確認是否為MMC卡。經實驗發現,Kingston公司的Micro SD卡使用CMD55+ACMD41或者CMDl都可以進行激活。激活SD卡的SPI模式后SD卡進入準備狀態,此時發送CMDl6(CMD_SET_BLOCKLEN)設置SD卡的讀寫塊大小,然后重新配置SPI波特率寄存器SPIBR使單片機SPI工作在高速頻率下,延時8個時鐘周期后返回,完成SD卡初始化。圖2為SD卡SPI高速模式初始化流程。

b.JPG


3.4讀寫單塊數據
    SD卡單塊數據的讀取是先通過單片機發送CMDl7(CMD_READ_SINGLE_BLOCK)命令,以SD卡指定數據塊起始位地址作為參數,如果讀取成功SD卡會返回1個R1命令作為響應。然后發送1個起始數據命令,接著發送單塊字節數量的數據并接收SPI數據寄存器SPIDR中的數據,最后是2字節CRC校驗。

d.jpg
    SD卡單塊數據的寫入與讀取相似,通過單片機發送CMD24(CMD_WRITE_SINGLE_BLOCK)命令,以SD卡指定數據塊起始位地址作為參數,如果讀取成功SD卡會返回1個R1命令作為響應。然后發送1個起始數據命令,接著發送單塊字節數量的需寫入數據,最后是2字節CRC校驗。
3.5 FAT文件系統信息讀取
    為了SD卡文件數據管理方便并且與PC機之間兼容得更好,同時考慮到SD卡自身容量的限制,選擇FATl6文件系統對SD卡信息進行管理。
    為了方便管理和擴展性開發,對SD卡進行了分區。模擬硬盤模式創建出了MBR區(主引導扇區)與DBR區(操作系統引導記錄區),在向下兼容的同時實現了對分區過的SD卡FAT文件系統的讀寫。
    SD卡數據可分為5部分:MBR區、DBR區、FAT區、DIR區和DATA區。MBR區是主引導區,位于整個SD卡的第1單塊上。在總共512字節的主引導扇區中,MBR只占用了其中的446個字節,另外的64個字節是DPT(Disk Partition Table,分區表),最后2個字節“55 AA”是分區的結束標志。這整體構成了SD卡的主引導扇區。DBR是操作系統引導記錄區,是操作系統可以直接訪問的第1個扇區,它包括1個引導程序和1個被稱為BPB(Bios Parameter Block)的本分區參數記錄表。BPB參數塊記錄著本分區的起始扇區、結束扇區、文件存儲格式、硬盤介質描述符、根目錄大小、FAT、個數,分配單元的大小等重要參數。
    FAT文件系統的分區有如下幾個部分:保留區,存放FAT文件系統的重要參數和引導程序;FAT表,記錄簇使用情況;根目錄區,記錄根目錄信息。
    本文中單片機對FAT系統的讀寫利用的是MBR區上的DPT分區表信息,用于找到FAT分區。然后通過FAT分區的DBR區上的BPB分區參數記錄表信息找到根目錄,讀取根目錄信息并通過FAT表中的文件簇信息實現文件的管理。
    研究中為方便代碼的移植和優化,在FAT初始化的時候將讀寫扇區函數指針指向Micro SD卡的讀寫函數,并使用了2個結構體來存儲SD卡的MBR與DBR信息。但鑒于單片機自身的內存容量,又建立了1個SimpleFat.c程序文件,只存儲程序所需的幾個地址常量:StartMbrAddress(MBR起始地址)、StartDbrAddress(DBR起始地址)、StartFatlAddress(FATl表起始地址)以及SeePerClu(簇扇區數量),大大減小了單片機內存的開銷。

e.jpg

3.6 應用層函數接口
    FAT文件系統向應用層設計了如下幾個初級程序接口:Get Filelnfo(UINT8*F Info,FileInfo*TempFilelnfo)(獲取文件信息),OutPut _RootFileinfo(void)(輸出根目錄文件信息),DirOr(UINT8 FileAttrib)(判斷目錄),Get Next Cluster(UINTl6 TempCluster)(獲取下一文件簇信息),OutPutFileCluster(UINTl6 TempStart Cluster)(輸出文件簇地址),OutPutFile(UINTl6 Temp StartCluster)(輸出文件內容),ShowClusterContent(UINTl6 TempCluster)(輸出簇內容)。通過這些初級程序接口實現了OpenDir(UINTl6 TempStartCluster)(目錄打開),FileDelete(文件刪除),FileDataRead(文件數據讀取),FileCreate(UINTl6 TempStartCluster,UINT32TempFileLength)(文件創建)等功能。
3.6.1 目錄讀取及文件信息獲取
    FAT文件系統的具體文件和目錄項都是通過讀取ROOT目錄來進行查找的,所以FAT的文件排布是以樹形的結構排布。對于FAT來說,目錄項與文件項在同一目錄中是同樣占32個字節的屬性項。研究中使用了1個數據結構Filelnfo來存儲文件信息,并通過if(Temp_F_Info[0x0b]&0x l0)來分辨文件與目錄。
    在FAT文件系統中,文件是以簇的形式保存在SD卡中的,簇的排布是不連續的,1個文件如果大于1個簇的話,則要通過FAT表來查找該文件所有簇所在的位置,從而找到整個文件。目錄一般只占有1個簇的大小,在FAT表中等同于小于1個簇的小文件,值顯示為FF。
    目錄是以文件的形式存儲在父目錄中的,目錄中的文件信息記錄了該文件的起始簇以及文件的大小,知道了文件的起始簇,通過FAT表中的信息可以很方便地找到文件的下一個簇的位置,并由文件的大小判斷出文件的結束位置。

3.6.2 文件的讀寫
    在FAT文件系統中,讀取文件只需要知道該文件的起始簇以及大小便可以很方便地得到整個文件的信息。讀取步驟是:獲取根目錄信息,通過根目錄信息找到下一層目錄所在簇位置,通過下一層目錄信息遞歸找到文件所在目錄,讀取文件信息屬性,得到文件的起始簇位置和文件大小,通過FAT表遞歸查找到文件的全部簇地址,最終以FF結尾;根據文件大小判斷文件的結束位置,最后輸出整個文件。
    文件的創建和寫入則是通過FAT表查找未被使用的空簇(值為00),寫滿1簇之后再查找下一未被使用的空簇,并同時更新FAT1表和FAT2表。然后在文件所被創建的目錄信息中添加文件信息,最終實現文件的創建。
3.6.3 文件的刪除
    在FAT文件系統中,對文件的刪除不需要把整個文件信息全部清除,只需要清除FAT表中的文件簇信息以及目錄中的文件信息,避免了對SD卡的頻繁讀寫,同時也節省了時間。

結語
    本設計將SD卡的存儲方式應用到單片機系統中,簡化了復雜的文件數據的存儲設計,減小了系統的尺寸,提高了系統的可靠性,使得單片機對文件的讀出和存取簡單易行。對FAT裁減實現了嵌入式文件系統,提高了系統的存儲能力,同時也增強了單片機與PC級之間的通信能力,簡化了繁瑣的調試。采用Freescale 16位單片機MC9S12XSl28MAA的串行外設接口SPI對SD卡進行訪問,加快了整個系統的設計進度。實踐證明,該設計讀寫SD卡文件信息的速度以及穩定性滿足調試要求。該設計只需對底層驅動進行簡單修改就可直接應用于MMC卡、Micro SD卡等其他存儲介質上。
 

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 99国产高清久久久久久网站 | 网友自拍第一页 | 久揄揄鲁一二三四区高清在线 | 91精品视频免费 | 色老头老太做爰视频在线观看 | 一个人免费观看日本www视频 | 欧美激情国产一区在线不卡 | 香蕉久久久久久狠狠色 | 亚洲欧美另类日本久久影院 | 久久怡红院国产精品 | 国产精品久久国产三级国不卡顿 | 男吃女下面刺激视频免费 | 在线欧美视频 | 一区二区亚洲精品 | 免费aa在线观看 男人的天堂 | 亚洲精品一区二区三区五区 | 男人亚洲天堂 | 在线播放免费一级毛片欧美 | 亚洲国产欧美日韩精品一区二区三区 | 国产人妖xxxx做受视频 | 亚洲一区在线视频 | 久久精品中文字幕有码日本 | 久久精品道一区二区三区 | 人久热欧美在线观看量量 | 欧美日韩国产人成在线观看 | 免费看成人播放毛片 | 欧美性猛交xxxxbbb | 国产免费人视频在线观看免费 | 狠狠色综合色综合网站久久 | 亚洲欧美一区二区三区在线 | 黄色美女视频免费看 | 欧美日韩成人 | 成人午夜毛片在线看 | 毛片免费全部免费观看 | 国产情侣自拍网站 | 玖玖精品国产 | 欧美另类高清xxxxx | 日本道综合一本久久久88 | 亚洲不卡在线 | 九九在线偷拍视频在线播放 | 国产精品99r8在线观看 |