新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機和FAT16的SD卡讀寫系統設計

        基于單片機和FAT16的SD卡讀寫系統設計

        作者: 時間:2012-12-06 來源:網絡 收藏

        主引導記錄區(Main BootRecord,MBR)位于物理磁盤第零扇區。MBR中有硬盤分區記錄表(Disk Partition Table,DPT),DPT記錄了各邏輯分區的相對偏移。SD卡不支持多分區,在1個SD卡中只有1個分區,因此在SD卡上的DPT只有1個分區表項被占用。系統引導記錄區(DOS Boot Record,DBR)位于磁盤邏輯分區的第0扇區,是操作系統可以訪問的第1個扇區,它其中包含1個稱為BPB(Bios Parameter Block)的本分區參數記錄表。BPB記錄著本分區的根目錄大小、FAT、個數、磁盤介質描述、分配單元大小等重要參數。

        DBR之后是FAT(File Allocation Table,文件分配記錄表),記錄文件在磁盤上的存儲位置。在Windows系統中,文件存儲的單位是簇而不是字節,1個文件不是連續地存放于磁盤的某一區域,而往往分成若干段,像鏈子一樣存放。FAT表記錄了每個文件的起始簇號、后繼簇號和終止簇號。FAT表中的每個表項對應數據存儲區中的1個簇,由于FAT表對文件管理的重要性,FAT表有1個備份。
        DIR是根目錄區,緊接著第2個FAT表(FAT2)之后,記錄著根目錄下每個文件的起始簇號、大小等屬性。操作系統根據DIR中文件的起始簇號和大小,結合FAT表來定位文件。文件系統中1個文件的存儲示意圖如圖5所示。

        3.2 SD卡指令規范
        通過相應指令與SD卡進行交互。SD卡有特定的指令格式,都是6字節長,最高有效位(MSB)傳輸優先,如圖6所示。

        SD卡指令的最高2位“01”是SD卡指令的開始標志,最后1位“1”是結束標志。6位的指令是SD卡的指令序號,例如CMD17的6位指令即17的二進制表示010001。指令參數占4字節,具體內容參照SD卡規范。7位CRC校檢的生成多項式為G(x)=x7+x3+1。事實上SD卡在進入SPI模式后,不再通過CRC碼來確認指令的傳輸正確與否,指令中的7為CRC校檢,只在SD模式下起作用。因此僅SD卡上電后的第1條切換SPI模式指令CMd0 需要校檢碼,而此校檢碼是固定的0x95,其他指令的CRC均置1即可。SD卡響應有4種格式,不同指令對應不同響應,具體內容可參看SD卡規范。
        3.3 SD卡讀寫驅動
        3.3.1 SPI時序模擬
        用軟件來模擬SPI總線的具體方法是:將SCK的初始狀態置0,允許接收后(即CS置0)將SCK置1,這樣由DI線輸出1位數據到SD卡;接著再將SCK置0,由DO線從SD卡讀1位數據。至此,模擬1位數據輸入輸出完成。此后再將SCK置1,依次循環8次,完成SPI總線1字節數據的輸入輸出。
        以下是本系統軟件模擬SPI時序的匯編代碼。以通用寄存器A作為函數參數,實現將寄存器A中的數據通過SPI總線發送出去,并將從SPI總線讀到的數據存到寄存器A中。

        pos機相關文章:pos機原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安达市| 太仆寺旗| 苗栗县| 湛江市| 青浦区| 阿克陶县| 霍邱县| 阳朔县| 外汇| 枣强县| 灌阳县| 方城县| 怀集县| 澄迈县| 三穗县| 武定县| 天柱县| 合山市| 惠州市| 北安市| 昌黎县| 武定县| 宁都县| 芮城县| 泽库县| 竹溪县| 嘉善县| 博湖县| 厦门市| 兴和县| 六盘水市| 张掖市| 金湖县| 江永县| 墨江| 奉化市| 宁乡县| 靖远县| 旬邑县| 阳泉市| 潼关县|