99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FAT32文件系統(tǒng)詳細分析 (格式化SD nand/SD卡)

深圳市雷龍發(fā)展有限公司 ? 2023-10-18 17:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

文章目錄

FAT32文件系統(tǒng)詳細分析 (續(xù)FAT文件系統(tǒng)詳解)

1. 前言

2. 格式化SD nand/SD卡

3. FAT32文件系統(tǒng)分析

3.1 保留區(qū)分析

3.1.1 BPB(BIOS Parameter Block) 及BS區(qū)分析

3.1.2 FSInfo 結構扇區(qū)分析

3.1.3 引導扇區(qū)剩余扇區(qū)

3.1.4 備份引導扇區(qū)

3.1.5 保留區(qū)剩余區(qū)域

3.2 分區(qū)偏移及大小計算

3.3 FAT區(qū)分析:

3.3.1 FAT1

3.3.2 FAT2

3.4 數據區(qū)分析:

4. 總結

1. 前言

續(xù)上一篇文章 : FATFS文件系統(tǒng)詳解:關于如SD卡、SD nand、spi nor flash等眾多存儲設備

在上一篇文章,我們已經對FAT文件系統(tǒng)有了一個詳細的介紹,但由于FAT文件系統(tǒng)由歷史發(fā)展,存在FAT12/16/32三種系統(tǒng),在上一篇文章中采用的是FAT16系統(tǒng)作為實例進行的分析,而FAT32系統(tǒng)存在些許差異,且FAT32文件系統(tǒng)在當前應用廣泛,因此特補充此篇博文,完善FAT32的示例分析。

2. 格式化SD nand/SD卡

申請到雷龍發(fā)展代理的CS創(chuàng)世 貼片 SD Card (SD NAND) 樣品,做出測試,有1Gb,4Gb,32Gb,64Gb的容量可選,我這里申請到的是兩片32Gb的芯片和測試板.

get?code=N2ZhM2RmMjNiOGU3ZTA5NDIwMzJlYzM1YjRkMDNmOGYsMTY5NzYxNTczMDAwNQ==

2.1 格式化SD nand / SD卡,強制采用FAT32格式,分配每個簇大小為2048Byte,同時為了避免其他原有數據干擾,我們此處取消快速格式化。

get?code=YmU4MmM3YzhmYThiMmEzY2U5MWFjZDRhMjFkZDQ5ZDUsMTY5NzYxNTczMDAwNQ==

2.2 使用 WinHex 打開分析

3. FAT32文件系統(tǒng)分析

FAT文件系統(tǒng)布局圖如下,和FAT16上有些許差別:

get?code=OWRiZGM0MmY5ODBhZGFmZTc4MzFiOTdlOWZlYmE0ZDYsMTY5NzYxNTczMDAwNg==

3.1 保留區(qū)分析

保留區(qū)分為引導扇區(qū)、備份引導扇區(qū)及其他字段,具體數據段分析如下。

3.1.1 BPB(BIOS Parameter Block) 及BS區(qū)分析

BPB及BS參數內容數據如下:

get?code=NzRjNzQwNzY0OWIyODc4NTQwMjc4NDExZjNmOWEzMGEsMTY5NzYxNTczMDAwNg==
  • EB 58 90 :BS_JmpBoot,跳轉指令
  • 4D 53 44 4F 53 35 2E 30:BS_OEMName,MSDOS 5.0,一個名字,指示創(chuàng)建此卷的操作系統(tǒng),無其他作用`
  • 00 02:BPB_BytsPerSec,扇區(qū)大小 512 字節(jié)
  • 04:BPB_SecPerClus,每次操作的最小扇區(qū)數,簇 Cluster,4 (與格式化時選擇的大小匹配 2048 = 512 * 4)
  • 16 11:BPB_RsvdSecCnt,保留區(qū)的扇區(qū)數,0x1116=4374 (通過此可計算,FAT區(qū)起始地址為 4374 * 512 = 0x22 2C00)
  • 02:BPB_NumFATs,FATs的個數,2(一般此值為2,多一個用來做冗余備份,解決系統(tǒng)異常導致第一個損壞時,增大恢復的可能性,表示FAT區(qū)有兩個FATs備份)
  • 00 00:BPB_RootEntCnt,0,在FAT12/16系統(tǒng)中,此字段表示根目錄中32字節(jié)目錄條目數量,設置此值時需注意對齊,為了最大的兼容性,FAT16系統(tǒng)上此值應設置為512,FAT32系統(tǒng)上此值應設置為0
  • 00 00:BPB_TotSec16,16位大小區(qū)域描述FAT卷扇區(qū)總數,0。當FAT12/16系統(tǒng)扇區(qū)數 ≥0x10000(65536)時,此字段應設置為0,真實值存放在 BPB_TotSec32 字段;對于FAT32系統(tǒng),此值必須為0。(此處由于我們的總扇區(qū)數=118.510241024/512 = 242688 > 65536,所以此字段為0)
  • F8:BPB_Media 媒體類型
  • 00 00:BPB_FATSz16,00,一個FAT占用的扇區(qū)數,此字段僅在FAT12/16系統(tǒng)使用;FAT32系統(tǒng),此字段必須為0,使用BPB_FATSz32字段替代。
  • 3F 00:BPB_SecPerTrk,每個磁道的扇區(qū)數,此字段僅與具有幾何形狀且僅用于 IBM PC 的磁盤 BIOS 的介質相關,不用管。
  • FF 00:BPB_NumHeads,頭數量,此字段僅與具有幾何形狀且僅用于 IBM PC 的磁盤 BIOS 的介質相關,不用管。
  • 00 00 00 00:BPB_HiddSec,0,FAT 卷之前的隱藏物理扇區(qū)數(當磁盤被分區(qū)之后,當前分區(qū)并不一定是從扇區(qū)頭開始的)
  • 00 08 0F 00:BPB_TotSec32,0x0F0800 = 985088(整個卷空間大?。?2位大小區(qū)域描述FAT卷扇區(qū)總數。 FAT12/16系統(tǒng),扇區(qū)總數小于0x10000時,此字段必須為0,真實值存放在BPB_FATSz16;FAT32系統(tǒng),此字段一直有效。(481M = 512 * 985088)

以上是FAT12/16/32公共字段,接下來是FAT32獨有字段

  • 75 07 00 00:BPB_FATSz32,1909,一個FAT占用的扇區(qū)數,FAT區(qū)總大小等于 BPB_FATSz?? * BPB_NumFATs 扇區(qū)。(由此可計算FAT區(qū)總大?。?909 * 2 = 3818扇區(qū) = 3818 * 512Byte = 0x1D D400 Byte)
  • 00 00: BPB_ExtFlags,擴展標識字段,bit7=0,表示所有FAT都是鏡像的和活躍的;bit7=1,表示只有bit3-0表示的FAT是有效的。
  • 00 00:BPB_FSVer:FAT32版本,高字節(jié)是主版本號,低字節(jié)是次版本號。
  • 02 00 00 00:BPB_RootClus,2, 根目錄的第一個簇號,此值通常為2,因為前兩個簇一般用于保留。
  • 01 00:BPB_FSInfo,1,FSInfo結構扇區(qū)與FAT32卷頂部的偏移扇區(qū)值。此值通常為1,因為其通常位于引導扇區(qū)旁邊。
  • 06 00:BPB_BkBootSec,6, 備份引導扇區(qū)與FAT32卷頂部的偏移扇區(qū)值。此值通常為6,考慮最大的兼容性,此值不建議為其他值。
  • 00 00 00 00 00 00 00 00 00 00 00 00:BPB_Reserved,0,保留
  • 80:BS_DrvNum,IBM PC 的磁盤 BIOS 使用的驅動器號,00h代表軟盤,80h代表固定磁盤
  • 00:BS_Reserved,保留字段,0
  • 29:BS_BootSig,擴展引導簽名,表示以下存在三個字段
  • 30 D1 B5 78:BS_VolID,與 BS_VolLab 一起構成卷序列號,一般在格式化的時候結合時間生成
  • 4E 4F 20 4E 41 4D 45 20 20 20 20:(解析為:"NO NAME “),BS_VolLab,11byte卷標,當卷標不存在時,此值應設置為"NO NAME”
  • 46 41 54 33 32 20 20 20:BS_FilSysType,始終為"FAT32 ",對FAT類型的確定沒有任何影響。
  • 33 C9 ... B9 01 00 00:BS_BootCode32,引導啟動程序,與平臺有關,不使用時填充為0
  • BS_BootSign:0xAA55,引導簽名,指示這是一個有效的引導扇區(qū)當扇區(qū)大小大于512字節(jié)時,剩余的字段應全部使用0x0填充。

3.1.2 FSInfo 結構扇區(qū)分析

FSInfo 數據結構為FAT32系統(tǒng)所特有,其目的是記錄FAT32系統(tǒng)上剩余的簇數量以及下一個空閑簇數據;以避免掃描整個磁盤搜索導致的時間浪費。

FSInfo數據偏移可從引導扇區(qū)內的 BPB_FSInfo 參數獲取,此處為 1,因此 FSInfo 數據偏移為1個扇區(qū),對應512Byte,0x200地址處。FSInfo數據結構如下:

get?code=NjZjYmE2ZjM4NTBkYjRhYTc0MzMzNTQwZWZkYTg3ZTgsMTY5NzYxNTczMDAwNg==

內容如下:

get?code=MDU2YmQyMzAxOTQ2OWVmODU0ZjMwZDE1YWFhODUzMzMsMTY5NzYxNTczMDAwNg==

3.1.3 引導扇區(qū)剩余扇區(qū)

FAT32引導扇區(qū)總共有三個512Byte的扇區(qū)構成。BPB、BS、FSInfo字段已使用了2個扇區(qū),還剩有一個扇區(qū)未使用,字段為0,如下圖所示,需要注意的是,此扇區(qū)在偏移值510處依舊存在尾部簽名0xAA55。

get?code=OTlhODc0MTJkMDhhZWYzZDFlNzkzYTcxNzk0NjQyODgsMTY5NzYxNTczMDAwNg==

引導扇區(qū)剩余字段,為非有效字段,采用0x00填充。

3.1.4 備份引導扇區(qū)

相比FAT12/16,FAT32系統(tǒng)上存在引導扇區(qū)的備份,此塊區(qū)域偏移參考引導扇區(qū)內BPB_BkBootSec字段,當前引導扇區(qū)內此參數值為6, 因此在當前文件系統(tǒng)內,備份引導扇區(qū)的偏移為 6號扇區(qū),對應偏移地址為 BPB_BkBootSec * BPB_BytsPerSec = 6 * 512Byte = 3072Byte = 0xC00

get?code=NjkwNzlhMWQzN2I3ZmQ4N2IwNWMyNmQwMDU0OWI3NGYsMTY5NzYxNTczMDAwNg==get?code=NGMxZDA2MzA2NWI5NmFhNDk2NjczZDdiYTc2N2RjNTYsMTY5NzYxNTczMDAwNg==

3.1.5 保留區(qū)剩余區(qū)域

在FAT32系統(tǒng)中,保留區(qū)除了 BPB區(qū)域、FSInfo區(qū)域以及這兩個區(qū)域的備份區(qū)域外,還有一部分區(qū)域,目前我沒找到此區(qū)域的作用,我理解為此塊區(qū)域是作為某種引導程序,數據內容如下:

get?code=MThmNjhkMGYyZTIxNzIyYmU0NTc2ZTM5Y2Q5ZWFhYjQsMTY5NzYxNTczMDAwNg==

關于此塊區(qū)域,歡迎大家在評論區(qū)討論!

此外,還有一處區(qū)域的存在也歡迎大家討論,即FSInfo扇區(qū)后面的一個扇區(qū),只有看到尾部簽名,其他數據為空,目前也未找到此處有關說明,后續(xù)清楚后會在此補充,亦歡迎大家在評論區(qū)討論!

get?code=ZmNiY2NkMGYwNDg0YTQ5YzQyZWU5YzA5Y2M2MTcwZmYsMTY5NzYxNTczMDAwNg==

3.2 分區(qū)偏移及大小計算

知道BPB參數內容之后,便可以進行分區(qū)偏移及大小計算了!

各分區(qū)偏移地址及大小如下:

get?code=MjdkY2FkZjljZjkyYjA0NzRhMThiZDlmNTY4MGZjN2QsMTY5NzYxNTczMDAwNg==

關于FAT區(qū),通常存在一個以上的FAT,如此處所格式化的sd卡便存在兩個FAT,對應的偏移地址和大小如下:

get?code=MGI3ZTQyY2E3YmU5NDA5OGU1MTM4MDJkMTIzYjA2MGEsMTY5NzYxNTczMDAwNg==

注意:在FAT32系統(tǒng)中,根目錄區(qū)不存在,但依舊存在根目錄,不過是根目錄作為數據區(qū)的一部分!

3.3 FAT區(qū)分析:

FAT32系統(tǒng)與FAT12/16系統(tǒng)在FAT區(qū)數據一個顯著差別是:FAT32每條FAT條目占32bit,FAT16占16個bit,FAT12占12bit。關于此部分更詳細描述,可參考上一篇:FAT文件系統(tǒng)詳解(點擊跳轉!) 的 4.3 章節(jié)!

3.3.1 FAT1

FAT1偏移地址:0x22 2C00

數據內容如下:

get?code=MTY1M2MzNDliNGI3OWY5NDA1ZjE0NjU2ZDZiYjhkMjYsMTY5NzYxNTczMDAwNg==

3.3.2 FAT2

FAT2是FAT1的備份,偏移地址:0x31 1600
數據內容與FAT1一致,如下:

get?code=ZDViY2EyNDFjOTNkZTc4ZmQ1OGNlNzgxMWJkNDY5NzYsMTY5NzYxNTczMDAwNg==

3.4 數據區(qū)分析:

偏移地址:0x40 0000
由參數BPB_RootClus可知,數據區(qū)第一個簇是2號簇。

打開數據區(qū)的第一個簇,里面存放的內容便是根目錄的內容!這也就是為什么FAT32沒有根目錄區(qū),但依舊存在根目錄的實現方式。數據內容如下:

get?code=NDUzYzA1ODgyYTMzN2RmNTUwNjU2NzAyM2QyOGNiNjgsMTY5NzYxNTczMDAwNg==

之后我們看到3號簇的內容:
數據字段如下圖所示,由于在上一篇博文中已對長短文件名每個字段進行過細致分析,此處不再做過度分析,僅抽取關鍵字段進行分析,如下圖所示:

get?code=Njg3MGE2ODc4MDg0Y2Q5Yjk0OWI0OGFhMTkxOTA5NjYsMTY5NzYxNTczMDAwNg==

之后切換到4號簇和5號簇,可以查看到對應數據:

get?code=NmUzZmI3ZTZkZDQwOWQxOTkyYjQ0MDVkYzEzZGRiOTUsMTY5NzYxNTczMDAwNg==get?code=MWNkY2NiN2EwMWYzMWQ2MzRkMmFhZWQxMTEyNTdkYmUsMTY5NzYxNTczMDAwNg==

從6號簇開始便沒有在使用,均為空閑簇,對應上 FSInfo 結構內 FSI_Nxt_Free 字段的內容。

4. 總結

相比FAT16系統(tǒng),FAT32文件系統(tǒng)在保留區(qū)有了更多的設計:

1)增加了引導扇區(qū)的備份,異常掉電等情況下可恢復性更強;

2)增加了FSInfo結構,對于大容量flash訪問將更加高效;

此外FAT32系統(tǒng)取消了根目錄區(qū),將根目錄移至數據區(qū),根目錄與普通目錄本來就沒有什么區(qū)別,確實也不用單獨分一個區(qū)存放,提高了一致性。

關于數據的存儲思想,依舊保持不變:FAT區(qū)內的FAT條目通過簇鏈記錄扇區(qū)使用情況及文件占用的扇區(qū)情況;數據區(qū)內目錄和文件都作為文件,通過目錄這一類特殊文件,描述文件屬性以及實際文件內容存放的簇的方式,將整個文件管理起來。

綜上,便是FAT32格式文件系統(tǒng)的詳細解析,歡迎大家評論區(qū)進行積極討論與反饋!??!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • NAND
    +關注

    關注

    16

    文章

    1720

    瀏覽量

    137999
  • SD卡
    +關注

    關注

    2

    文章

    578

    瀏覽量

    65470
  • FAT32
    +關注

    關注

    0

    文章

    33

    瀏覽量

    14245
  • TF卡
    +關注

    關注

    2

    文章

    88

    瀏覽量

    12591
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    服務器數據恢復—ocfs2文件系統(tǒng)格式化為Ext4文件系統(tǒng)的數據恢復案例

    服務器存儲數據恢復環(huán)境&故障: 人為誤操作將Ext4文件系統(tǒng)誤裝入一臺服務器存儲上的Ocfs2文件系統(tǒng)數據卷上,導致原Ocfs2文件系統(tǒng)格式化為Ext4
    的頭像 發(fā)表于 06-10 12:03 ?184次閱讀
    服務器數據恢復—ocfs2<b class='flag-5'>文件系統(tǒng)</b>被<b class='flag-5'>格式化</b>為Ext4<b class='flag-5'>文件系統(tǒng)</b>的數據恢復案例

    Nand flash 和SDSD NAND)存儲扇區(qū)分配表異同

    SD NAND)是基于 NAND Flash的存儲設備,其存儲扇區(qū)分配表建立在 SDSD
    發(fā)表于 03-13 10:45

    通過FATFS文件系統(tǒng)讀寫SD創(chuàng)建文件可以了,加入MSC一直顯示一個沒有格式化的U盤盤符,也不能格式化,為什么?

    通過FATFS文件系統(tǒng)讀寫SD創(chuàng)建文件可以了,但加入MSC,一直顯示一個沒有格式化的U盤盤符,也不能
    發(fā)表于 03-12 07:20

    在stm32cubeprogrammer上燒錄時,取消勾選根文件系統(tǒng),燒錄后發(fā)現sd上根文件系統(tǒng)的分區(qū)沒有了,為什么?

    在修改了linux內核后,我想只把bootfs燒錄到sd上,而不擦除根文件系統(tǒng)的分區(qū)。 我在stm32cubeprogrammer上燒錄時,取消勾選根文件系統(tǒng),燒錄后發(fā)現
    發(fā)表于 03-07 06:38

    FB08 1對7 U盤拷貝格式化機——高效數據復制工具

    FB08 1對7 U盤拷貝格式化機,采用臺灣捷美原廠工藝,具備25MB/s的高速拷貝速度和8口同步復制功能,支持加密U盤免解密拷貝及USB 2.0/3.0設備。支持FAT16/FAT32格式化
    的頭像 發(fā)表于 02-08 13:51 ?421次閱讀
    FB08 1對7 U盤拷貝<b class='flag-5'>格式化</b>機——高效數據復制工具

    FB16 1對15 U盤拷貝格式化機——高效數據復制工具

    FB16 1對15 U盤拷貝格式化機,采用臺灣捷美原廠工藝,具備25MB/s高速拷貝速度和16口同步復制功能,支持加密U盤免解密拷貝及USB 2.0/3.0設備。支持FAT16/FAT32格式
    的頭像 發(fā)表于 02-07 17:36 ?399次閱讀
    FB16 1對15 U盤拷貝<b class='flag-5'>格式化</b>機——高效數據復制工具

    SD NAND、SPI NAND 和 Raw NAND 的定義與比較

    問題,再也不用為SD的接觸穩(wěn)定性操心! SD nandSD 、SPI Nor flas
    的頭像 發(fā)表于 01-15 18:16 ?733次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>、SPI <b class='flag-5'>NAND</b> 和 Raw <b class='flag-5'>NAND</b> 的定義與比較

    EE-329:在SHARC處理器上運行FAT16文件系統(tǒng)和DOS命令

    電子發(fā)燒友網站提供《EE-329:在SHARC處理器上運行FAT16文件系統(tǒng)和DOS命令.pdf》資料免費下載
    發(fā)表于 01-06 14:22 ?0次下載
    EE-329:在SHARC處理器上運行<b class='flag-5'>FAT</b>16<b class='flag-5'>文件系統(tǒng)</b>和DOS命令

    EE-289:在ADSP-BF533 Blackfin處理器上實現FAT32文件系統(tǒng)

    電子發(fā)燒友網站提供《EE-289:在ADSP-BF533 Blackfin處理器上實現FAT32文件系統(tǒng).pdf》資料免費下載
    發(fā)表于 01-05 09:13 ?0次下載
    EE-289:在ADSP-BF533 Blackfin處理器上實現<b class='flag-5'>FAT32</b><b class='flag-5'>文件系統(tǒng)</b>

    關于SD NAND 的概述

    SD NAND是一種小型、可表面貼裝的存儲解決方案,適用于各種嵌入式系統(tǒng)和便攜式設備。SD NAND技術是近年來在存儲領域內的一項創(chuàng)新,它結
    發(fā)表于 12-06 11:22

    SD NAND 概述

    SD NAND是一種小型、可表面貼裝的存儲解決方案,適用于各種嵌入式系統(tǒng)和便攜式設備。SD NAND技術是近年來在存儲領域內的一項創(chuàng)新,它結
    的頭像 發(fā)表于 12-06 11:21 ?690次閱讀

    SD NAND技術簡介

    SD NAND是一種基于NAND Flash技術的嵌入式存儲解決方案,具備SD協(xié)議兼容性。它結合了NA
    的頭像 發(fā)表于 12-05 15:32 ?672次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>技術簡介

    帶你了解什么是SD NAND存儲芯片

    XST_FAILURE; } return XST_SUCCESS; }   以上是本次實驗使用到的部分代碼,里面包含了外設,標準的打印函數和SD控制器的功能,在程序中先進行格式化S
    發(fā)表于 11-13 15:20

    Arduino程序:實現SD NAND(貼片sd)的讀寫功能

      單片機上傳程序的時候,有時候感覺它的rom和 ram有時直接限制了他的使用,之前使用eeprom,和sd模塊. []()   然后最近看到了出的SD NAND 就是下面這個
    發(fā)表于 11-07 17:45

    貼片式SD功能介紹【MK SD NAND

    技術與傳統(tǒng)SD不同,SD NAND使用貼裝式封裝,允許直接焊接至電子設備的PCB上,提供一種內置的存儲功能。
    的頭像 發(fā)表于 07-05 17:03 ?1572次閱讀
    貼片式<b class='flag-5'>SD</b><b class='flag-5'>卡</b>功能介紹【MK <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>】