SD卡 FAT32檔案系統學習心得

2021-09-25 11:38:46 字數 2413 閱讀 6996

一.一般硬碟資料結構是按下面來建立的

二.首先看看啟動區的內容,也就是第乙個扇區。使用軟體:winhex

有用的內容用彩色線標誌下

⑴.灰色線內容:eb 59 90 跳轉指令

⑵.灰色點線內容:4d 53 44 4f 53 35 2e 30 為廠商標誌和os 版本號,這裡是msdos5.0

⑶.紅色部分:00 20 (偏移位址0bh,長度2)注意這裡資料的布局,高位址放高位元組,低位址放低位元組(資料為小端格式組織),所以資料應該是0200,就是512。表示的意思是,該磁碟每個扇區有512個位元組。

有的可能是1024、2048、4096.

⑷.黃色部分:08 (偏移位址0dh,長度1)表示的意思是每個簇有8個扇區。這個值不能為0,而且必須是2的整數次方,比如1、2、4、8、16、32、64、128.

但是這個值不能使每個簇超過32kb位元組。

⑸.藍色部分:24 00 (偏移位址0eh,長度2),轉換一下,就是00 24,意思是保留區域中的保留扇區數為36個。那麼就可以知道下面的fat1區的開始的位址就是:

0x24*200(每個扇區的位元組數)=0x4800,

⑹.粉色部分:02 (偏移位址10h,長度1),此卷中的fat結構的份數為2,另外乙個是備份的。

⑺.黑色部分:c6 03 (偏移位址24h,長度2)轉換一下,03c6,每個fat占用的扇區數。那麼每個扇區占用的位元組數就是0x03c6*200=78c00。

根據啟動區、fat1、fat2、根目錄、資料區的次序,可以依次計算出它們的位址了。

啟動區:理所當然是0x00;

fat1:0x4800;

fat2:0x4800 + 0x78c00 = 7d400;

根目錄區:7d400 + 78c00 = f6000;

資料區的位址,等等再計算。這個只是計算,可以看看是不是和實際的一致。

怎麼樣,是不是和計算的很一致。

為什麼要計算sd資料的讀取要給出位址,而且每次讀取都是乙個整扇區,512個位元組。找出這些位址後,可以很方便的找到資料。

三.現在分析下根目錄區的內容。

這裡使用的是fat32短檔案目錄項,每32個位元組表示乙個檔案(資料夾也是),32個位元組的表示定義分別如下

⑴.黑色部分:驅動器的名稱,8個位元組,

⑵.紅色部分:54 45 53 54 20 20 20 20 (偏移位址20h,長度8)檔名:test (空缺部分是空格)。

⑶.紅色點線:54 58 54 (偏移位址28h,長度3)檔案型別,為ascii字元表示。

⑷.綠色:20(偏移位址2bh,長度2)檔案屬性,00000000(讀寫);00000001(唯讀);00000010(隱藏);00000100(系統);00001000(卷標);00010000(子目錄);00100000(歸檔)。

⑸.藍色點線:2e(偏移位址2eh,長度2) 檔案建立時間。

⑹.粉色線、點線依次表示檔案建立日期檔案最後訪問日期。

⑺.灰色線、點線:依次為該檔案開始簇號的高位位元組、地位位元組,這裡也是用了小端格式組織。轉換下為00 00 00 03,根據這個就可以找到檔案下乙個簇號在fat1中的位置了。

4800+03*04(因為四個位元組存乙個簇號)= 480c。

⑻.黃色線部分:檔案長度。轉後00 00 2d 77 就是節。

但是它占用的12kb的空間,因為檔案是按照整簇來存放的,不夠乙個簇的大小,也要給乙個簇的空間。

四.計算出該檔案放置空間。

從檔案的大小可以計算出,需要占用多少個簇。根據前面的資料,每個簇放8個扇區,每個扇區512個位元組,那麼乙個簇的空間就是節了,4kb。那麼節需要3個簇,這三個簇的開始的位址就可以計算出來了。

上面已經知道開始簇開始的位址了:03,那麼開始位址為:f6000(根目錄區位址)+ (03-2)*08*200=f7000(第乙個簇開始位址);這裡03減去的02的意思是:

簇號都是從2開始的,

第二個簇4800+03*04=480c,查查480c裡面的內容是什麼:04 00 00 00,轉化後為04,不是0x0fffffff(檔案最後一簇的標誌),那麼還有簇號存在(檔案還沒有放完呢,下乙個簇不計算),第二個簇就可以算出來了,位址為f6000+(04-2)*08*200 = f8000(第二個簇開始位址);

480c的內容是04,指出的下個簇號位址位置,4800+04*04=4810,4810的資料為05,也不是0x0fffffff,同樣可以計算出第三個簇位址:f6000+(05-2)*08*200 = f9000(第三個簇開始位址);繼續看看下乙個簇號:4800+05*04=4814,內容為0x0fffffff,檔案放置結束,沒有了。

總結下:

f7000(第乙個簇開始位址)

f8000(第二個簇開始位址)

f9000(第三個簇開始位址)

看圖檢驗下。

暫時學習到這裡,現在可以讀取檔案。但是讀取長檔名,寫檔案如何進行,接下來繼續學習。

資料的起源來自此,現在也回到這裡。。。。。

SD卡損壞檔案已損壞需要格式化SD卡

與安卓論壇 sd卡損壞 檔案已損壞 需要格式化sd卡 乙個月來一次,像女人一樣 症狀 說一下為什麼好好地手機會出現這個問題,newboy發現 請回憶,我們往往是在使用相機,看 使用xx市場,重啟 開機,或者開啟設定 最近遇到刷完機之後也出現這個情況 這時候發現手機變得出奇的慢,頻繁出現fc,無響應,...

超強Android系統SD卡分割槽教程

小知識 儲存器分為隨機儲存器 ram 和唯讀儲存器 rom 兩種。手機rom相當於pc上的硬碟,用於儲存手機作業系統和軟體,也叫flash rom,決定手機儲存空間的大小。手機ram相當於pc的記憶體,其大小決定手機的執行速度。首先我們需要對手機sd卡進行分割槽,分乙個fat32分割槽和乙個ext3...

SD卡資料夾名稱的解釋

安卓系統的sd卡各資料夾功能的詳解 1 android secure 是官方app2sd的產物,刪了之後裝到sd卡中的軟體就無法使用了。2 bluetooth 顧名思義,用藍芽之後就會有這個。3 mobo 顧名思義,moboplayer的快取檔案。4 qq 顧名思義,qq的快取檔案。5 quicko...