STM32F103VB的SD卡在應用編程設計
3.2 STM32F103VB芯片存儲組織結構
STM32F103VB的程序存儲器、數(shù)據(jù)存儲器、寄存器和輸入/輸出端口被組織在同一個4 GB的線性地址空間內。閃存區(qū)域即用戶代碼區(qū)域被置于0x08000000~0x0801FFFF的地址范圍。方案中IAP程序被事先燒錄進0x08000000~0x08002FFF的閃存區(qū)域,用戶應用程序緊接著IAP程序進行存放,可使用的范圍為0x08003000~0x0801FFFF的閃存區(qū)域。IAP程序內存分配如圖5所示。本文引用地址:http://butianyuan.cn/article/149588.htm
3.3 FAT32文件格式
為了方便終端用戶的操作和增加方案的通用性,本設計以FAT32分區(qū)格式標準對SD卡進行格式化,F(xiàn)AT32分區(qū)格式常見于通用的PC機平臺。FAT32分區(qū)格式如圖6所示。采用FAT32分區(qū)格式的SD卡內部結構包括主啟動區(qū)域、FAT表區(qū)域、根目錄區(qū)域、數(shù)據(jù)存儲區(qū)域四部分。
其中位于主啟動區(qū)域開始位置的第一個保留扇區(qū)為起始扇區(qū),包括很多重要的數(shù)據(jù)信息,如每個扇區(qū)的字節(jié)數(shù)、FAT表個數(shù)及大小、每簇扇區(qū)數(shù)、總扇區(qū)數(shù)、根目錄起始位置等等。FAT32包含兩張FAT表,它們緊接主啟動區(qū)域后面,是分區(qū)信息的映射表,主要功能是指示文檔如何按簇存放。根目錄區(qū)域包含了根目錄下文檔和目錄信息的內容。在根目錄區(qū)域可以獲得指定文檔的信息,如文檔名、文檔屬性、創(chuàng)建時間、文檔大小和文檔在FAT表中第一個簇的地址等。數(shù)據(jù)區(qū)域是實際的文檔存儲的地方,占據(jù)了磁盤的大部分空間。
FAT32分區(qū)格式中文檔是以簇為最小單位進行存儲的,固定每簇的容量為4 KB。一個文檔根據(jù)其大小被分為一個或者若干個簇存儲在數(shù)據(jù)區(qū)域,這些簇通常是以零散而不是連續(xù)的方式分布在數(shù)據(jù)存儲區(qū)域,形成的單鏈表稱為簇鏈,簇鏈的具體信息可從FAT表中獲得。圖7為FAT32文檔讀取方式示意圖。
FAT32文檔讀取步驟如下:
①在起始扇區(qū)中獲取SD卡信息。
②根目錄所在的物理地址通過下面公式得出。根目錄地址=(隱藏扇區(qū)個數(shù)+保留扇區(qū)個數(shù)+FAT所占扇區(qū)個數(shù)×FAT數(shù)量)×扇區(qū)字節(jié)數(shù)。
③在根目錄表中檢索文檔名為“UPDATE”的文檔,獲取其在FAT表中的首簇地址。首簇號的高字節(jié)和低字節(jié)位于以文檔名起始的偏移量為0x14和0x1a的共四個字節(jié)。圖7中UPDATE文檔首簇號為0003。
④在FAT表的簇號為0003的位置中存放的信息為0004,即下一個簇的位置;在簇號為0004的位置中存放的是簇號為0006的地址信息,由此一步步得出由簇號組成的單鏈表,一直到簇號為0008的位置中存儲的信息為0FFFFFFF,證明此時已到文檔的末尾,簇鏈結束。圖7中文檔“UP DATE”占用的簇所形成的簇鏈為0003-0004-0006-0008,總共占用了4個簇、16 KB的數(shù)據(jù)存儲空間。
⑤根據(jù)簇鏈中的簇號在數(shù)據(jù)存儲區(qū)域中獲取文檔的數(shù)據(jù)內容。例如圖7中文檔“UPDATE”的數(shù)據(jù)內容即是由0003、0004、0006、0008四個簇中的數(shù)據(jù)內容File[0]、File[1]、File[2]、File[3]所組成。
評論