www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 消費(fèi)電子 > 消費(fèi)電子
[導(dǎo)讀]如果你開發(fā)過(guò)USB相關(guān)項(xiàng)目,理解USB的一些基本概念,例如設(shè)備描述符、配置描述符、子類規(guī)范等,那么開發(fā)U盤只要概念清晰應(yīng)該不難。以下是我開發(fā)過(guò)程中的幾個(gè)相關(guān)步驟:保證U

如果你開發(fā)過(guò)USB相關(guān)項(xiàng)目,理解USB的一些基本概念,例如設(shè)備描述符、配置描述符、子類規(guī)范等,那么開發(fā)U盤只要概念清晰應(yīng)該不難。以下是我開發(fā)過(guò)程中的幾個(gè)相關(guān)步驟:

保證USB 芯片正常工作,用其他USB成功項(xiàng)目驗(yàn)證硬件連接及固件的正確性, 按Mass Storage協(xié)議Bulk-Only 模式提供描述符,使PC 機(jī)控制面板上設(shè)備類型出現(xiàn)Mass Storage Device響應(yīng)SCSI指令集中Inquiry 命令,可以出現(xiàn)盤符, 實(shí)現(xiàn)FAT16文件系統(tǒng)處理SCSI命令集中READ命令及其他UFI命令,可以訪問(wèn)盤符處理SCSI命令集中WRITE命令, U盤開發(fā)成功開發(fā)U盤有三個(gè)工具軟件應(yīng)該必備:USBVIEW 察看設(shè)備描述符,端點(diǎn)測(cè)試等;BUSHOUND 截取USB總線數(shù)據(jù),可分析UFI命令及U盤返回的數(shù)據(jù)流;串口助手可實(shí)時(shí)了解U盤所收命令流及程序流程, 由于每個(gè)人知識(shí)面不同,我想實(shí)現(xiàn)上面的幾個(gè)步驟遇到的問(wèn)題也不一樣。對(duì)我最大的困惑是實(shí)現(xiàn)FAT16文件系統(tǒng),直到在微軟網(wǎng)站找到它的白皮書才算解惑。這里簡(jiǎn)介一下方便大家有的放矢。

USB 組織定義了海量存儲(chǔ)設(shè)備類(Mass Storage Class)的規(guī)范,這個(gè)類規(guī)范包括四個(gè)獨(dú)立的子類規(guī)范,

即:

1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport

2. USBMass Storage Class Bulk-Only Transport

3. USB Mass Storage Class ATA Command Block

4.USB Mass Storage Class UFI Command Specification。

前兩個(gè)子規(guī)范定義了數(shù)據(jù)/命令/狀態(tài)在USB 上的傳輸方法。Bulk-Only 傳輸規(guī)范僅僅使用Bulk 端點(diǎn)傳送數(shù)據(jù)/命令/狀態(tài),CBI 傳輸規(guī)范則使用Control/Bulk/Interrupt三種類型的端點(diǎn)進(jìn)行數(shù)據(jù)/命令/狀態(tài)傳送。后兩個(gè)子規(guī)范則定義了存儲(chǔ)介質(zhì)的操作命令。ATA 命令規(guī)范用于硬盤,UFI 命令規(guī)范是針對(duì)USB 移動(dòng)存儲(chǔ)。Windows95 OSR2和Windows 98開始支持FAT32 文件系統(tǒng),它是對(duì)早期DOS的FAT16文件系統(tǒng)的增強(qiáng),由于文件系統(tǒng)的核心--文件分配表FAT由16位擴(kuò)充為32位,所以稱為FAT32文件系統(tǒng)。在一邏輯盤(硬盤的一分區(qū))超過(guò) 512 兆字節(jié)時(shí)使用這種格式,會(huì)更高效地存儲(chǔ)數(shù)據(jù),減少硬盤空間的浪費(fèi),一般還會(huì)使程序運(yùn)行加快,使用的計(jì)算機(jī)系統(tǒng)資源更少,因此是使用大容量硬盤存儲(chǔ)文件的極有效的系統(tǒng)。本人對(duì)Windows 98下的FAT32 文件系統(tǒng)做了分析實(shí)驗(yàn),總體上與FAT16文件系統(tǒng)變化不大,現(xiàn)將有關(guān)變化部分簡(jiǎn)介如下:

(一)FAT32 文件系統(tǒng)將邏輯盤的空間劃分為三部分,依次是引導(dǎo)區(qū)(BOOT區(qū))、文件分配表區(qū)(FAT區(qū))、數(shù)據(jù)區(qū)(DATA區(qū))。引導(dǎo)區(qū)和文件分配表區(qū)又合稱為系統(tǒng)區(qū)。

(二)引導(dǎo)區(qū)從第一扇區(qū)開始,使用了三個(gè)扇區(qū),保存了該邏輯盤每扇區(qū)字節(jié)數(shù),每簇對(duì)應(yīng)的扇區(qū)數(shù)等等重要參數(shù)和引導(dǎo)記錄。之后還留有若干保留扇區(qū)。而FAT16文件系統(tǒng)的引導(dǎo)區(qū)只占用一個(gè)扇區(qū),沒(méi)有保留扇區(qū)。

(三)文件分配表區(qū)共保存了兩個(gè)相同的文件分配表,因?yàn)槲募加玫拇鎯?chǔ)空間(簇鏈)及空閑空間的管理都是通過(guò)FAT實(shí)現(xiàn)的,F(xiàn)AT如此重要,保存兩個(gè)以便第一個(gè)損壞時(shí),還有第二個(gè)可用。文件系統(tǒng)對(duì)數(shù)據(jù)區(qū)的存儲(chǔ)空間是按簇進(jìn)行劃分和管理的,簇是空間分配和回收的基本單位,即,一個(gè)文件總是占用若干個(gè)整簇,文件所使用的最后一簇剩余的空間就不再使用,而是浪費(fèi)掉了。從統(tǒng)計(jì)學(xué)上講,平均每個(gè)文件浪費(fèi)0.5簇的空間,簇越大,存儲(chǔ)文件時(shí)空間浪費(fèi)越多,利用率越低。因此,簇的大小決定了該盤數(shù)據(jù)區(qū)的利用率。FAT16系統(tǒng)簇號(hào)用16位二進(jìn)制數(shù)表示,從0002H到FFEFH個(gè)可用簇號(hào)(FFF0H到FFFFH另有定義,用來(lái)表示壞簇,文件結(jié)束簇等),允許每一邏輯盤的數(shù)據(jù)區(qū)最多不超過(guò)FFEDH(65518)個(gè)簇。FAT32系統(tǒng)簇號(hào)改用32位二進(jìn)制數(shù)表示,大致從00000002H到FFFFFEFFH個(gè)可用簇號(hào)。FAT表按順序依次記錄了該盤各簇的使用情況,是一種位示圖法。每簇的使用情況用32位二進(jìn)制填寫,未被分配的簇相應(yīng)位置寫零;壞簇相應(yīng)位置填入特定值;已分配的簇相應(yīng)位置填入非零值,具體為:如果該簇是文件的最后一簇,填入的值為FFFFFF0FH,如果該簇不是文件的最后一簇,填入的值為該文件占用的下一個(gè)簇的簇號(hào),這樣,正好將文件占用的各簇構(gòu)成一個(gè)簇鏈,保存在FAT表中。0000000H、00000001H兩簇號(hào)不使用,其對(duì)應(yīng)的兩個(gè)DWORD位置(FAT表開頭的8個(gè)字節(jié))用來(lái)存放該盤介質(zhì)類型編號(hào)。FAT表的大小就由該邏輯盤數(shù)據(jù)區(qū)共有多少簇所決定,取整數(shù)個(gè)扇區(qū)。

(四)FAT32系統(tǒng)一簇對(duì)應(yīng)8個(gè)邏輯相鄰的扇區(qū),理論上,這種用法所能管理的邏輯盤容量上限為16TB(16384GB),容量大于16TB時(shí),可以用一簇對(duì)應(yīng)16個(gè)扇區(qū),依此類推。FAT16系統(tǒng)在邏輯盤容量介于128MB到256MB時(shí),一簇對(duì)應(yīng)8個(gè)扇區(qū),容量介于256MB到512MB時(shí),一簇對(duì)應(yīng)16個(gè)扇區(qū),容量介于512MB到1GB時(shí),一簇對(duì)應(yīng)32個(gè)扇區(qū),容量介于1GB到2GB時(shí),一簇對(duì)應(yīng)32個(gè)扇區(qū),超出2GB的部分無(wú)法使用。顯然,對(duì)于容量大于512MB的邏輯盤,采用FAT32的簇比采用FAT16的簇小很多,大大減少了空間的浪費(fèi)。但是,對(duì)于容量小于512MB的盤,采用FAT32雖然一簇8個(gè)扇區(qū),比使用FAT16一簇16個(gè)扇區(qū),簇有所減小,但FAT32的FAT表較大,占用空間較多,總數(shù)據(jù)區(qū)被減少,兩者相抵,實(shí)際并不能增加有效存儲(chǔ)空間,所以微軟建議對(duì)小于512M的邏輯盤不使用FAT32。另外,對(duì)于使用FAT16文件系統(tǒng)的用戶提一建議,硬盤分區(qū)時(shí),不要將分區(qū)(邏輯盤)容量正好設(shè)為某一區(qū)間的下限,例:將一邏輯盤容量設(shè)為1100M(稍大于1024M),則使用時(shí)其有效存儲(chǔ)容量比分區(qū)為950M的一般還少,因其簇大一倍,浪費(fèi)的空間較多。還有,使用FDISK等對(duì)分區(qū)指定容量時(shí),由于對(duì)1MB的定義不一樣(標(biāo)準(zhǔn)的二進(jìn)制的1MB為1048576B,有的系統(tǒng)將1MB理解為1000000B,1000KB等),及每個(gè)分區(qū)需從新磁道開始等因素,實(shí)際分配的容量可能稍大于指定的容量,亦需注意掌握。

(五)根目錄區(qū)(ROOT區(qū))不再是固定區(qū)域、固定大小,可看作是數(shù)據(jù)區(qū)的一部分。因?yàn)楦夸浺迅臑楦夸浳募?,采用與子目錄文件相同的管理方式,一般情況下從第二簇開始使用,大小視需要增加,因此根目錄下的文件數(shù)目不再受最多512的限制。FAT16文件系統(tǒng)的根目錄區(qū)(ROOT區(qū))是固定區(qū)域、固定大小的,是從FAT區(qū)之后緊接著的32個(gè)扇區(qū),最多保存512個(gè)目錄項(xiàng),作為系統(tǒng)區(qū)的一部分。

(六)目錄區(qū)中的目錄項(xiàng)變化較多,一個(gè)目錄項(xiàng)仍占32字節(jié),可以是文件目錄項(xiàng)、子目錄項(xiàng)、卷標(biāo)項(xiàng)(僅跟目錄有)、已刪除目錄項(xiàng)、長(zhǎng)文件名目錄項(xiàng)等。目錄項(xiàng)中原來(lái)在DOS下保留未用的10個(gè)字節(jié)都有了新的定義,全部32字節(jié)的定義如下:

(1) 0-- 7字節(jié) 文件正名。

(2) 8--10字節(jié) 文件擴(kuò)展名。

(3) 11字節(jié) 文件屬性,按二進(jìn)制位定義,最高兩位保留未用,0至5位分別是只讀位、隱藏位、系統(tǒng)位、卷標(biāo)位、子目錄位、歸檔位。

(4) 12--13字節(jié) 僅長(zhǎng)文件名目錄項(xiàng)用,用來(lái)存儲(chǔ)其對(duì)應(yīng)的短文件名目錄項(xiàng)的文件名字節(jié)校驗(yàn)和等。

(5) 14--15字節(jié) 24位二進(jìn)制的文件建立時(shí)間,其中的高5位為小時(shí),次6位為分鐘。

(6) 16--17字節(jié) 16位二進(jìn)制的文件建立日期,其中的高7位為相對(duì)于1980年的年份值,次4位為月份,后5位為月內(nèi)日期。

(7) 18--19字節(jié) 16位二進(jìn)制的文件最新訪問(wèn)日期,定義同(6)。

(8) 20--21字節(jié) 起始簇號(hào)的高16位。

(9) 22--23字節(jié) 16位二進(jìn)制的文件最新修改時(shí)間,其中的高5位為小時(shí),次6位為分鐘,后5位的二倍為秒數(shù)。

(10)24--25字節(jié) 16位二進(jìn)制的文件最新修改日期,定義同(6)。

(11)26--27字節(jié) 起始簇號(hào)的低16位。

(12)28--31字節(jié) 32位的文件字節(jié)長(zhǎng)度。

其中第(4)至(8)項(xiàng)為以后陸續(xù)定義的。 對(duì)于子目錄項(xiàng),其(12)為零;已刪除目錄項(xiàng)的首字節(jié)值為E5H。在可以使用長(zhǎng)文件名的FAT32系統(tǒng)中,文件目錄項(xiàng)保存該文件的短文件名,長(zhǎng)文件名用若干個(gè)長(zhǎng)文件名目錄項(xiàng)保存,長(zhǎng)文件名目錄項(xiàng)倒序排在文件短目錄項(xiàng)前面,全部是采用雙字節(jié)內(nèi)碼保存的,每一項(xiàng)最多保存十三個(gè)字符內(nèi)碼,首字節(jié)指明是長(zhǎng)文件名的第幾項(xiàng),11字節(jié)一般為0FH,12字節(jié)指明類型,13字節(jié)為校驗(yàn)和,26--27字節(jié)為零。

(七)以前版本的 Windows 和DOS與 FAT32 不兼容,不能識(shí)別FAT32分區(qū),有些程序也依賴于FAT16文件系統(tǒng),不能和 FAT32 驅(qū)動(dòng)器一道工作。將硬盤轉(zhuǎn)換為 FAT32,就不能再用雙引導(dǎo)運(yùn)行以前版本的Windows(Windows 95 [Version 4.00.950]、Windows NT 3.x、Windows NT 4.0 和 Windows 3.x)。

磁盤結(jié)構(gòu)綜述

1.硬盤結(jié)構(gòu)

硬盤的內(nèi)部是由圓形金屬片堆疊起來(lái)的,每個(gè)盤片的兩面都有一個(gè)磁頭(Head)負(fù)責(zé)讀寫這個(gè)磁面(Side),在每個(gè)磁面上劃分了一圈一圈的同心圓,叫做柱面(Cylinder)對(duì)于軟盤通常稱之為磁道,在每個(gè)柱面中又劃分了若干段,稱之為扇區(qū)(Sector)。由于技術(shù)的發(fā)展,硬盤的密度越來(lái)越大,使得硬盤的實(shí)際盤片數(shù)越來(lái)越少,對(duì)磁盤操作的柱面、磁頭、扇區(qū)被硬盤控制器內(nèi)部轉(zhuǎn)換,已經(jīng)不是實(shí)際的柱面、磁頭、扇區(qū)了。由于最早時(shí)磁盤存取系統(tǒng)估計(jì)不足,傳輸數(shù)據(jù)時(shí)只給扇區(qū)留了6位,柱面留了10位,磁頭留了8位。也就是說(shuō),柱面最大只能為1023。但是大硬盤的柱面遠(yuǎn)大于這個(gè)數(shù),所以后來(lái)就采用將柱面數(shù)減少,將磁頭數(shù)增加的方式來(lái)滿足磁盤尋址的要求,對(duì)于實(shí)際地址的轉(zhuǎn)換在BIOS中進(jìn)行,這叫邏輯塊尋址方式(Logical Block Addressing,LBA)硬盤中有關(guān)柱面、磁頭、扇區(qū)的數(shù)據(jù)都是以此為基準(zhǔn)的。

2.分區(qū)結(jié)構(gòu)

眾多的文件數(shù)據(jù)存放在磁盤上,需要有組織,這就形成了文件系統(tǒng)。但是各個(gè)操作系統(tǒng)的文件系統(tǒng)都不盡相同,為了劃分管理文件系統(tǒng),在現(xiàn)在的PC機(jī)上都采用通用的分區(qū)結(jié)構(gòu)。分區(qū)機(jī)構(gòu)是這樣的:硬盤的以一個(gè)扇區(qū)(就是0柱面0磁頭1扇區(qū))叫主引導(dǎo)扇區(qū)(Main Boot Record,MBR),存放著引導(dǎo)程序和主分區(qū)表(Main Partition Table)和結(jié)束標(biāo)志“55AA”。一般稱的分區(qū)表即是主分區(qū)表。一個(gè)分區(qū)表最多可包含四個(gè)分區(qū)表項(xiàng),每個(gè)分區(qū)表項(xiàng)中標(biāo)示著一個(gè)分區(qū)信息或一個(gè)擴(kuò)展分區(qū)表的位置,而擴(kuò)展分區(qū)表中可能還有擴(kuò)展分區(qū)表,這就形成了一個(gè)鏈狀結(jié)構(gòu),可以記錄很多個(gè)分區(qū)。 C語(yǔ)言定義如下

typedef struct

{

char bootcode[0x1be]; //啟動(dòng)代碼

PartitionTable PT[4]; //分區(qū)表

word EndingFlag; //結(jié)束標(biāo)識(shí)

}MBR;

分區(qū)表項(xiàng)的如下:

typedef struct

{

byte BootFlag; //啟動(dòng)標(biāo)志

CHS StartCHS; //分區(qū)開始的柱面、磁頭、扇區(qū)

byte SystemID; //分區(qū)類型

CHS EndCHS; //分區(qū)結(jié)束的柱面、磁頭、扇區(qū)

dword RelativeSectors; //分區(qū)相對(duì)扇區(qū)數(shù),指分區(qū)相對(duì)于記錄該分區(qū)的分區(qū)表的扇區(qū)位置之差

dword TotalSectors;//分區(qū)總扇區(qū)數(shù)

}PartitionTable;

其中CHS為一個(gè)柱面、磁頭、扇區(qū)的結(jié)構(gòu),定義如下:

struct CHS

{

byte Head; //磁頭

byte Sector:6; //扇區(qū)

byte CyH2:2; //柱面的高兩位

byte CyL8; //柱面的低八位

};

word Cylinder()

{

return (word(CyH2)*256+CyL8);

} //返回柱面值

void SetCylinder(word Cylinder) //設(shè)置柱面值

{

CyH2=(Cylinder>>8)&0x3;

CyL8=(Cylinder&0xff);

}

};

其中分區(qū)類型是對(duì)應(yīng)于各種文件系統(tǒng)統(tǒng)一編排的一個(gè)代碼。比如06H是大于32M的FAT16分區(qū)的標(biāo)志,05H是擴(kuò)展分區(qū)的標(biāo)志,等等。一般的,對(duì)于DOS/Windows3.x/Windows95/98的系統(tǒng)來(lái)說(shuō),第一個(gè)分區(qū)表項(xiàng)記錄著DOS主分區(qū)(C盤)的信息,而且是可以啟動(dòng)的,第二個(gè)分區(qū)表項(xiàng)一般是擴(kuò)展分區(qū),在這個(gè)擴(kuò)展分區(qū)表項(xiàng)所指向的分區(qū)表中又是一個(gè)Dos主分區(qū)(D盤)和一個(gè)擴(kuò)展分區(qū),依次類推。而在絕大部分系統(tǒng)中Dos主分區(qū)(C盤)是從0柱面1磁頭1扇區(qū)開始的。(有些機(jī)器在這個(gè)位置有個(gè)小分區(qū),專門用來(lái)管理啟動(dòng)或機(jī)器設(shè)置,之后才是C盤的分區(qū))

3.FAT文件系統(tǒng)

FAT文件系統(tǒng)(FAT12/FAT16/FAT32)是從DOS發(fā)展過(guò)來(lái)的一種文件系統(tǒng),其優(yōu)點(diǎn)是簡(jiǎn)單易用,并被多種操作系統(tǒng)支持。(目前支持FAT32的操作系統(tǒng)還不多)FAT文件系統(tǒng)名稱后的數(shù)字是標(biāo)識(shí)文件中系統(tǒng)一個(gè)分配單元所需的位(bit)數(shù)。一個(gè)FAT12/16文件系統(tǒng)的結(jié)構(gòu)是這樣的:引導(dǎo)扇區(qū) 第一文件分配表 第二文件分配表 根目錄 數(shù)據(jù)區(qū)

(1).引導(dǎo)扇區(qū)

引導(dǎo)扇區(qū)是文件系統(tǒng)的第一個(gè)扇區(qū),其中包含分區(qū)重要的數(shù)據(jù)信息——BPB(BIOS Paramenter Block-磁盤參數(shù)表)。磁盤參數(shù)表中包含分區(qū)總大小、磁盤參數(shù)等重要信息。其C語(yǔ)言定義為:

typedef struct

{

word SectorBytes; //每扇區(qū)字節(jié)數(shù)

byte SectorsPerCluster; //每簇扇區(qū)數(shù)

word ReservedSectors; //保留扇區(qū)數(shù)

byte NbrFat; //FAT的個(gè)數(shù)

word RootEntry; //根目錄項(xiàng)數(shù)

word TotalSectors; //分區(qū)總扇區(qū)數(shù)(分區(qū)小于32M時(shí))

byte Media; //分區(qū)介質(zhì)標(biāo)識(shí)

word SectorsPerFAT; //每個(gè)FAT占的扇區(qū)數(shù)

word SectorsPerTrack; //每道扇區(qū)數(shù)

word Heads; //磁頭數(shù)

dword HiddenSectors; //隱含扇區(qū)數(shù)

dword BigTotalSectors; //分區(qū)總扇區(qū)數(shù)(分區(qū)大于32M時(shí))

}BPB_FAT16;

其中保留扇區(qū)數(shù)為從分區(qū)開始到第一個(gè)FAT表開始中間的扇區(qū)數(shù)。隱含扇區(qū)數(shù)同分區(qū)表中的隱含扇區(qū)數(shù)含義相同。雖然存在FAT個(gè)數(shù)的定義,但現(xiàn)在的FAT12/16系統(tǒng)基本上沒(méi)有除2以外的值。因而一般不考慮其他情況。根目錄項(xiàng)數(shù)是指根目錄總共能容納下的目錄的項(xiàng)數(shù)。一個(gè)目錄項(xiàng)占32個(gè)字節(jié),所以一個(gè)扇區(qū)有512/32=16個(gè)目錄項(xiàng)。用這個(gè)值除以16就是根目錄所占的扇區(qū)數(shù)。分區(qū)總扇區(qū)數(shù)在分區(qū)大于32M時(shí)已經(jīng)超過(guò)65535,兩個(gè)字節(jié)已經(jīng)無(wú)法表示,因此在大于32M的分區(qū)中TotalSector總是等于零,而將實(shí)際的數(shù)放在BigTotalSectors中。分區(qū)介質(zhì)標(biāo)識(shí)是確定BPB有效的標(biāo)志。它必須與FAT表中第一個(gè)字節(jié)的分區(qū)介質(zhì)標(biāo)識(shí)統(tǒng)一。硬盤的分區(qū)介質(zhì)標(biāo)識(shí)為0F8h,如果這個(gè)標(biāo)識(shí)不對(duì)或者與FAT不統(tǒng)一則將會(huì)出“Invalid media type”的錯(cuò)誤。

SectorsPerFAT是每個(gè)FAT所占的扇區(qū)數(shù)。系統(tǒng)根據(jù)分區(qū)起始地址+保留扇區(qū)數(shù)+每個(gè)FAT所占扇區(qū)數(shù)*FAT個(gè)數(shù)+根目錄項(xiàng)數(shù)/16來(lái)確定數(shù)據(jù)區(qū)開始的位置,然后由這個(gè)位置+簇號(hào)*每簇扇區(qū)數(shù)來(lái)最終確定數(shù)據(jù)在硬盤扇的具體位置。

(2)文件分配表

文件分配表是文件在磁盤上分布的信息。FAT文件系統(tǒng)將數(shù)據(jù)區(qū)按每簇扇區(qū)數(shù)為單位劃分成一個(gè)一個(gè)單元,每個(gè)單元是文件分配的最小單位。這個(gè)單元就稱為簇。一些大的文件可能占用了很多簇,而且在磁盤上沒(méi)有連續(xù)存放。FAT表就是為了確定文件每個(gè)簇的連接關(guān)系而設(shè)的。FAT表的每一項(xiàng)都對(duì)應(yīng)著數(shù)據(jù)區(qū)的一個(gè)簇,F(xiàn)AT16的FAT表每一項(xiàng)占16位,也就是兩個(gè)字節(jié)。每一項(xiàng)的內(nèi)容表示其對(duì)應(yīng)簇的分配情況,0表示尚未分配;FFF0h~FFF6h為備用;FFF7h表示壞簇,即該簇中磁盤有損壞;FFF8h~FFFF表示文件結(jié)束;其他值則表示當(dāng)前簇的下一簇的簇號(hào)。FAT表的最前面兩項(xiàng)是不用的,因此第一個(gè)數(shù)據(jù)簇的簇號(hào)為2。FAT表第一個(gè)字節(jié)也是分區(qū)介質(zhì)類型,和BPB中的一樣。因此用“F8 FF FF”可以作為硬盤FAT起始的標(biāo)志。絕大多數(shù)FAT系統(tǒng)有兩個(gè)FAT表,第二個(gè)FAT表又稱為后備文件分配表。系統(tǒng)內(nèi)部完成后備文件分配表與第一文件分配表的統(tǒng)一。本文討論的完全恢復(fù)是基于后備文件分配表沒(méi)有被破壞的情況下的恢復(fù),如果兩個(gè)文件分配表都被損壞,理論上就無(wú)法完全確定文件信息,因此無(wú)法完全恢復(fù)。

(3)根目錄

FAT12/16的根目錄是單獨(dú)列出來(lái)的,在后備文件分配表和數(shù)據(jù)區(qū)之間。每個(gè)目錄項(xiàng)為32個(gè)字節(jié),記錄一個(gè)文件或目錄的信息。(長(zhǎng)文件名例外)文件修復(fù)的原理就是由目錄項(xiàng)中指示的起始簇號(hào)和數(shù)據(jù)區(qū)開始位置來(lái)確定文件的位置,從而恢復(fù)小的文件。

4.FAT32文件系統(tǒng)

FAT32文件系統(tǒng)與FAT12/16的差別較大,一個(gè)主要的差別就是將根目錄劃歸到數(shù)據(jù)區(qū)中了,在BPB中專門加了一項(xiàng)根目錄開始簇號(hào)。這樣根目錄的大小就不再受到限制,大大增加了根目錄的自由度。

FAT32的BPB定義如下:

typedef struct

{

word BytesPerSector; //每扇區(qū)字節(jié)數(shù)

byte SectorsPerCluster; //每簇扇區(qū)數(shù)

word ReservedSectors; //保留扇區(qū)數(shù)

byte NumberOfFATs; //FAT的個(gè)數(shù)

word RootEntries; //根目錄項(xiàng)數(shù)(FAT32不用)

word TotalSectors; //分區(qū)總扇區(qū)數(shù)(FAT32不用)

byte MediaDescriptor; //分區(qū)介質(zhì)標(biāo)識(shí)

word SectorsPerFAT; //每個(gè)FAT占的扇區(qū)數(shù)(FAT32不用)

word SectorsPerTrack; //每道扇區(qū)數(shù)

word Heads; //磁頭數(shù)

dword HiddenSectors; //隱含扇區(qū)數(shù)

dword BigTotalSectors; //分區(qū)總扇區(qū)數(shù)

dword BigSectorsPerFat; //每個(gè)FAT占的扇區(qū)數(shù)

word ExtFlags; //擴(kuò)展標(biāo)志

word FS_Version; //文件系統(tǒng)版本

dword RootDirStartClus; //根目錄起始簇號(hào)

word FSInfoSec; //指向包含BIGFATBOOTFSINFO結(jié)構(gòu)的扇區(qū)

word BkUpBootSec; //后備引導(dǎo)區(qū)的位置

byte Reserved[12]; //備用

}BPB_FAT32;

從上可以看出,F(xiàn)AT32的BPB是在FAT16BPB的基礎(chǔ)上加入了一些參數(shù),并停用了一些參數(shù)。每個(gè)FAT所占扇區(qū)數(shù)變?yōu)?個(gè)字節(jié),根目錄項(xiàng)數(shù)不再使用。FAT32與FAT12/16的另一不同點(diǎn)在于,F(xiàn)AT32既可以同時(shí)使用多個(gè)FAT表,也可以只使用其中的某一個(gè)FAT表。ExtFlags正是這個(gè)標(biāo)志。當(dāng)ExtFlags的第8位為0時(shí)表示同時(shí)使用每個(gè)FAT表,當(dāng)其為1時(shí)表示只使用其中的一個(gè)FAT表,這個(gè)FAT表的序號(hào)由ExtFlags的低4位給出。FS_Version文件系統(tǒng)版本現(xiàn)在都為0。FAT32將根目錄也視作一個(gè)目錄文件,使用一個(gè)簇鏈(Cluster Chain),RootDirStartClus正是這個(gè)鏈的起始簇號(hào)。FAT32有個(gè)專門放BIGFATBOOTFSINFO結(jié)構(gòu)的扇區(qū),該結(jié)構(gòu)包含了剩余簇個(gè)數(shù),下一個(gè)空閑簇號(hào)等信息。這個(gè)扇區(qū)通常緊接著引導(dǎo)扇區(qū)。由于與恢復(fù)關(guān)系不大,本文不做討論。FAT32將引導(dǎo)扇區(qū)和文件系統(tǒng)信息扇區(qū)信息存了兩份,另一份的位置由BkUpBootSec指出。這樣由于偶然發(fā)生的損壞就很容易恢復(fù)。

5.擴(kuò)展BIOS參數(shù)塊

在BPB的后面是Extended BIOS Paramenter Block。EBPB的結(jié)構(gòu)如下:

typedef struct //Extended BIOS Paramenter Block

{

byte PhysicalDriveNumber; //物理硬盤號(hào)

byte CurrentHead; //當(dāng)前磁頭

byte ExtBootRecSign; //擴(kuò)展引導(dǎo)記錄標(biāo)志

dword SerialNumber; //序列號(hào)

char VolumeLabel[11]; //卷標(biāo)

char FSID[8]; //文件系統(tǒng)標(biāo)識(shí)

}EBPB;

其中物理硬盤號(hào)和當(dāng)前磁頭是系統(tǒng)運(yùn)行時(shí)使用的,硬盤上的值沒(méi)有什么實(shí)際意義。ExtBootRecSign一般為28h或29h。SerialNumber是格式化后生成的序列號(hào)。文件系統(tǒng)標(biāo)識(shí)指示了文件系統(tǒng)的類型,即“FAT12”、 “FAT16”、 “FAT32”

Mass Storage 協(xié)議 Bulk-Only 傳輸協(xié)議可參考USBMASSBULK.PDF文檔

SCSI 指令集可參考USBMASSUFI.PDF文檔

FAT16文件系統(tǒng)可參考FAT_PAPER.PDF文檔

相關(guān)文檔可到WWW.USB.ORG官方網(wǎng)站下載

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

2025年8月13日 – 提供超豐富半導(dǎo)體和電子元器件?的業(yè)界知名新品引入 (NPI) 代理商貿(mào)澤電子 (Mouser Electronics) 即日起開售Asahi Kasei Microdevices (AKM) 的...

關(guān)鍵字: 數(shù)模轉(zhuǎn)換器 USB 無(wú)線揚(yáng)聲器

物聯(lián)網(wǎng)與智能化設(shè)備快速普及,供電方式的選擇直接影響設(shè)備部署的靈活性、成本與可靠性。PoE(以太網(wǎng)供電)與USB供電作為兩大主流技術(shù),分別在工業(yè)網(wǎng)絡(luò)、智能家居、消費(fèi)電子等領(lǐng)域占據(jù)關(guān)鍵地位。本文將從設(shè)備適配性、傳輸距離、功率...

關(guān)鍵字: PoE USB

在無(wú)線技術(shù)的發(fā)展歷程中,部署的簡(jiǎn)便性往往是成功的關(guān)鍵。像Wi-Fi、藍(lán)牙和早期的蜂窩技術(shù),只有在集成變得簡(jiǎn)單、無(wú)縫且實(shí)惠時(shí),才能實(shí)現(xiàn)大規(guī)模的應(yīng)用。而如今,Wi-Fi HaLow——一種專為物聯(lián)網(wǎng)(IoT)設(shè)計(jì)的遠(yuǎn)距離、低...

關(guān)鍵字: 物聯(lián)網(wǎng) Wi-Fi USB

2025年8月5日 – 專注于引入新品的全球電子元器件和工業(yè)自動(dòng)化產(chǎn)品授權(quán)代理商貿(mào)澤電子 (Mouser Electronics)即日起開售Microchip Technology的新款A(yù)VR? SD 8位MCU。AVR...

關(guān)鍵字: MCU 工業(yè)自動(dòng)化 USB

隨著高解析度音頻應(yīng)用的不斷發(fā)展和廣泛部署,諸如USB與I2S之間等不同專業(yè)接口之間的高品質(zhì)音頻轉(zhuǎn)換需求日益增長(zhǎng),由此帶來(lái)了實(shí)現(xiàn)高性能、高實(shí)時(shí)性與高靈活性的新挑戰(zhàn)。為此,邊緣AI和智能音頻專家XMOS攜手其全球首家增值分銷...

關(guān)鍵字: SoC USB 處理器

【2025年7月24日, 德國(guó)慕尼黑訊】全球功率系統(tǒng)和物聯(lián)網(wǎng)領(lǐng)域的半導(dǎo)體領(lǐng)導(dǎo)者英飛凌科技股份公司(FSE代碼:IFX / OTCQX代碼:IFNNY)近日推出新型英飛凌ID Key系列,進(jìn)一步擴(kuò)展其通用串行總線(USB)...

關(guān)鍵字: 控制器 USB 非易失性存儲(chǔ)器

其他電腦(比如安卓手機(jī)/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問(wèn)一些東西。你可以使用android的USB OTG功能(是的,幾乎每個(gè)android都支持這個(gè)功能,你可以將鼠標(biāo)和鍵盤連接到它)。

關(guān)鍵字: USB 鼠標(biāo) Android 樹莓派

M5Stack Cardputer非常適合作為硬件密碼管理器。它很小巧,有一個(gè)內(nèi)置鍵盤,一個(gè)SD卡插槽,運(yùn)行在帶有本地USB支持的ESP32-S3上。屏幕使其易于使用,并且由于USB HID,它可以直接在登錄字段中鍵入密...

關(guān)鍵字: 密碼管理器 M5Stack Cardputer USB

【2025年7月10日, 德國(guó)慕尼黑訊】全球功率系統(tǒng)和物聯(lián)網(wǎng)領(lǐng)域的半導(dǎo)體領(lǐng)導(dǎo)者英飛凌科技股份公司(FSE代碼:IFX / OTCQX代碼:IFNNY)為CIS的新款USB 5 Gbit/s和10 Gbit/s攝像頭提供E...

關(guān)鍵字: 控制器 USB 圖像信號(hào)處理器

Holtek 針對(duì)USB應(yīng)用推出HT82B45R低速USB OTP MCU,符合USB 2.0低速規(guī)范,支持鍵盤用的高阻抗碳膜技術(shù)(Carbon Membrane)。HT82B45R結(jié)合低功耗設(shè)計(jì)、彈性I/O配置、內(nèi)建L...

關(guān)鍵字: MCU USB 看門狗定時(shí)器
關(guān)閉