所謂的不兼容只是程序中一般不加出錯(cuò)處理造成的,這本來(lái)就不符合規(guī)范。目前只有一種情況CH375似乎不大搞得定,就是讀寫端點(diǎn)是同一個(gè)時(shí),可惜的是Win2000也不支持這種優(yōu)盤,所以幾乎不用考慮。 我現(xiàn)在使用CH375時(shí)是按照下面的流程走的,兼容性大概90%左右(一款清華紫光1G,一款是朗科早期的16M無(wú)法支持)。 1.發(fā)出DISK_INIT命令,等待成功中斷 2.發(fā)出DISK_MAX_LUN命令,等待成功中斷或STALL。 3.如果第二步成功,則讀出當(dāng)前優(yōu)盤有幾個(gè)邏輯單元,并保存。STALL則第四步。
從下面開始,如果出現(xiàn)0x1f中斷狀態(tài),發(fā)出DISK_R_SENSE,并對(duì)出錯(cuò)進(jìn)行處理,如果Sense key = 0x06, Additional Sense code = 0x28,則重復(fù)當(dāng)前命令,否則無(wú)法處理此優(yōu)盤。(請(qǐng)參考USB Mass Storage Class – UFI Command Specification)
4.發(fā)出DISK_INQUIRY命令,可能需要出錯(cuò)處理,直到成功。 5.發(fā)出DISK_SIZE命令,可能需要出錯(cuò)處理,直到成功。 6.讀MBR/DBR,判斷文件系統(tǒng),如果不支持且邏輯單元未全部判斷完成,則置為下一個(gè)邏輯單元,跳轉(zhuǎn)到第4步,否則無(wú)法支持此優(yōu)盤。(某些插到電腦上出現(xiàn)多個(gè)盤符的優(yōu)盤)
幾乎所有的金士頓優(yōu)盤在第4步必定會(huì)出錯(cuò)。某些優(yōu)盤支持在優(yōu)盤使用時(shí)可以打開/關(guān)閉寫保護(hù),同樣會(huì)使讀扇區(qū)命令出錯(cuò),也需要重復(fù)當(dāng)前命令。
使用CH375也有半年了,希望這點(diǎn)東西能對(duì)要脫離庫(kù)函數(shù)進(jìn)行開發(fā)的人有點(diǎn)幫助。