亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: FAT32文件系統的一點知識 [打印本頁]

作者: hongniu    時間: 2015-6-23 18:41
標題: FAT32文件系統的一點知識
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
至此找到了,真他媽的麻煩啊






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

作者: wode1992@    時間: 2021-5-29 10:35
講解得很詳細,辛苦了




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1