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