久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5789|回復: 2
打印 上一主題 下一主題
收起左側

FAT32文件系統的一點知識

[復制鏈接]
跳轉到指定樓層
樓主
ID:83710 發表于 2015-6-23 18:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
FAT32文件系統尋找文件存儲扇區
自從我做完12864圖像顯示后就在想做個視頻玩玩,結果視頻生成的幀需要大量的儲存空間,僅憑那可憐的8KB啥也做不了,于是就開始找一種大容量的存儲器!可是用什么呢?EEPROM是肯定不行的,外部擴展也不行,還是信息的力量讓我知道了-------SD卡;
其實SD卡我不陌生,以前在日照買的MP4用的是1GB SD卡,想到那東西如果可以用的話,那將會對我有質的飛躍,于是我找了一些資料,通過看這些資料我開始知道奧原來SD卡內部是有文件系統的!怪不得電腦能讀取他呢!并且這種文件系統在我們的電腦上,手機上,到處是,平時我們只是知道:把一首歌考到MP3播放器里的文件夾里,就可以聽了;熟不知這就是文件系統的功勞啊!在文件系統里我看到了FAT32的存在,于是我決定看看到底什么是FAT32文件系統。
開始在看振南寫的關于FAT32的資料,不行啊,不懂,后來又在網上找了些資料綜合后找出了尋找FAT32文件的路徑。
打個比方:現在我在可移動磁盤(H)里建一個文件文件名為EEE.txt,里面寫ABCDE五個字符,

然后保存;我要在存儲卡里找到這五個字符怎么實現呢?
下面是我找到他的過程:
首先進入DBR中找到BPB
這就是SD卡的0扇區,我們要的是BPB,那BPB在哪里?呵呵在從地址字節0----地址字節5960字節數據;
當然在這60字節里也有大部分是不必要的,真正有用的是一小部分,那這部分是什么呢?
第一:11——12地址字節的數據代表每扇區字節數(上表中為0002)這里數據時小端(數據地位在地址高位)表示所以要轉換成大端(數據地位在地址地位)為0x0200;再轉換成十進制為512,原來是這樣,也就是這兩個字節告訴我們每扇區512個字節;僅此而已!
第二:13地址字節數據代表每簇扇區數(上表位08)表示一個簇有8個扇區,也就是8*512=4096=4KB
第三:14——15地址字節代表保留扇區數,也就是FAT表是從這里開始的。(上表中為0C11轉成0x110C轉成十進制4364扇區)
到這里引出第一個關鍵項
FAT1地址字節的開始=4364*512=2234368(記好了)
第四:16地址字節代表FAT表的個數(上表位02)表示有2FAT
第五:36——37地址字節代表FAT表占的扇區數(上表為7A07轉換0X077A轉換成十進制1914扇區)為了方便起見我們把它轉換成字節形式:1914*512=979968,與其說FAT表占了1914個扇區不如說FAT表占了979968個字節
第六:有了FAT1的初始字節,FAT表的長度,那么根據FAT32文件系統的結構可知,FAT1表下面是FAT2
FAT2地址字節=FAT1地址字節+FAT長度=2234368+979968=3214336地址字節
同理FAT2表下面是根目錄則:
根目錄地址字節= FAT2地址字節+ FAT長度=3214336+979968=4194304地址字節
至此BPB的有效數據已經讀完了總結如下:
通過上面的對BPB的分析我們知道了原來一個扇區有512個字節,一個簇有4KB8個扇區),
關鍵是我們知道了FAT表和根目錄的位置如下:
FAT1開始地址字節:2234368
FAT2開始地址字節:3214336
根目錄開始地址字節:4194304
下面看看我們找的對不對?
FAT1:
FAT2:
根目錄:
這樣我們找到了根目錄,FAT表后有什么用那?還是沒找到文件存哪里啊?接下來該是找得到文件的存儲位置的時候了:
第一:我們現在根目錄里找到EEE.TXT如圖:
這就是了:在對根目錄進行解釋
第一行45 45 45 20 20 20 20 20:表示EEEEASCII碼是4520表示空格,即不滿八位空格補,54 58 54表示TXT即文件類型,
第二行5-6個字符01 00表示此文件開始簇的高位地址
第二行10-11個字符BC 2F表示此文件開始簇低位地址
把這兩個字節結合為一個四位:0x00012FBC這就是此文件的開始簇,轉換成十進制為77756
然后你知道了開始簇你還要到FAT表里找到他,看看他占了幾簇!怎么在FAT表里找到他呢?
FAT表里一簇用4個字節表示,數據是從FAT表中第二個簇開始的(也就是第9個字節向后,前8個字節為FAT標志)
所以前兩個簇是無用的,要用(777562=77754簇,前面說了一個簇用4字節表示那么我們要找到77754簇的字節地址就要把它分解成字節所以有77754*4字節=311014字節(也就是在FAT表中第311014字節是此文件的FAT對應簇),好了這就找到了?沒有還差一步
你要知道FAT1的首地址,好了我知道然后加上311014才是;
所以=FAT1首地址字節+此文件在FAT表中占得字節數=2234368+311014=2545392(此文件的FAT表中的簇)如果這個文件大于一簇那么必定會有下一簇,如果這個文件不到一簇那么這個我們找到的FAT表中應為FF FF FF 0F(結束標志)好了前面我們寫入的是ABCDE怎么會大于4KB那?顯然我們找到的這個簇一定是FF FF FF 0F
看看是不是:
果然是FF FF FF 0F;
這其實是為超過一簇的文件制作的鏈表,這個不滿一簇所以就結束了,如果滿一簇則會在下一個FAT表中給出超出一簇的存處地址,一次類推,這也是FAT表的關鍵用途;
我們這個繼續,既然FAT表中顯示我們存儲的數據不滿一簇我們直接找就行了,根據FAT32結構,可知根目錄下是數據區,所以要這樣計算存數扇區的首地址字節=根目錄+(此文件的簇大小—2FAT表中的前兩個簇是FAT標志,真正的數據從第二簇開始所以要減去】)*一簇的字節數=4194304+77756-2*4096=322674688
看看我們寫的ABCDE是不是存在這個地址字節下了?
看看吧第一行:41 41 43 44 45 正好是ABCDEASCII
現在我敢說:我在可移動磁盤(H)盤下建立的EEE.TXT文件中的ABCDE被保存在H盤的第322674688/512=630224扇區看看圖:
第二行邏輯扇區數:630224
至此找到了,真他媽的麻煩啊





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:83710 發表于 2015-6-23 18:41 | 只看該作者
   最近在做SD卡讀寫,調了快一星期了總是調不通,昨天晚上做的時候,突然讀到兩個字節,55 AA,正好是最后兩個,那時部分扇區的結束的標志,證明我可能讀到了扇區,可是又讀0及其他字節,令我失望,沒有EB,全是00H,而我讀的是0扇區,WINHEX顯示是EB開頭的,要是不對,那55AA哪來的?而且位置正確,要是對那怎么找不到EB呢?橫頭疼,所有的都按照時序來的,為什么達不到預期的結國?這么糾結還是今年的頭一次!加油吧,畢竟這對我來說意義非常!@
回復

使用道具 舉報

板凳
ID:926451 發表于 2021-5-29 10:35 | 只看該作者
講解得很詳細,辛苦了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 龙珠z在线观看 | 性一交一乱一伦视频免费观看 | 欧美国产日韩精品 | 亚洲高清在线 | 美女在线观看av | 自拍偷拍亚洲视频 | 欧美男人天堂 | 中文字幕视频在线看 | 日韩三级一区 | 成人三级在线播放 | 中文二区| 伊色综合久久之综合久久 | 成人免费视频观看 | 亚洲一区 中文字幕 | 国产精品永久免费观看 | 免费同性女女aaa免费网站 | 国产视频福利在线观看 | 久久毛片| 国产精品观看 | 精品欧美一区二区三区久久久 | 国产成人精品一区二三区在线观看 | 日韩中文字幕在线免费 | 欧美日韩在线视频一区 | 中文字幕色站 | 日韩免费福利视频 | 日韩精品一区二区三区四区 | 亚洲 欧美 另类 综合 偷拍 | 国产乱码精品一区二区三区五月婷 | 国产精品婷婷 | 亚洲精品一区av在线播放 | 国产一区二区精品在线 | 国产精品1区 | 蜜桃色网| 日韩在线一区二区三区 | 成人免费在线视频 | 亚洲天天干 | 亚洲福利 | 国产伦精品一区二区三区高清 | 久久人体 | 日产精品久久久一区二区福利 | 亚洲免费视频一区二区 |