專利名稱:一種usb大容量存儲(chǔ)裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)存儲(chǔ)設(shè)備技術(shù)領(lǐng)域,具體涉及一種USB大容量存儲(chǔ)裝置(簡稱U盤)。
背景技術(shù):
作為計(jì)算機(jī)的輔助工具,軟盤由于其容量小、速度慢、壽命短等缺點(diǎn),已逐漸為U盤所取代。U盤區(qū)別于軟盤的最大特點(diǎn)是,沒有機(jī)械部分,因而可以做到速度快,容量大、使用壽命長、數(shù)據(jù)安全可靠。
U盤一般采用一枚專用控制芯片、大容量存儲(chǔ)芯片構(gòu)成。這種方案有利的一面是,廠家只要依照專用控制芯片供貨商提供的圖紙,就可以直接生產(chǎn)加工。但是,有些廠家的U盤只支持廠家自己的格式化操作;有些廠家的U盤不全支持WINDOWS98/2X的FAT,F(xiàn)AT32,NTFS格式化操作;還有一些廠家的U盤數(shù)據(jù)經(jīng)常無緣無故被破壞;此外還存在壽命不夠長的問題。究其原因是控制寫軟件存在問題。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種容量大、壽命長、能支持多種格式化操作的USB存儲(chǔ)裝置。
本發(fā)明設(shè)計(jì)的USB大容量存儲(chǔ)裝置,由硬件和控制讀寫軟件兩部分組成。硬件(電路)由USB接口與電源發(fā)生器電路、振蕩電路、USB通信電路、單片機(jī)控制電路、大容量存儲(chǔ)器接口電路經(jīng)電路連接而成。電路結(jié)構(gòu)框圖見圖6所示。其中,USB接口與電源發(fā)生器電路提供與USB通信電路的USB接口,并從USB電源導(dǎo)出3.3伏左右的電源供其余電路工作;振蕩電路驅(qū)動(dòng)USB通信電路工作;USB通信電路負(fù)責(zé)USB數(shù)據(jù)包的收發(fā);單片機(jī)控制電路負(fù)責(zé)通過USB通信電路讓計(jì)算機(jī)識(shí)別自己是大容量存儲(chǔ)裝置,并智能地控制大容量存儲(chǔ)器接口電路的讀寫;大容量存儲(chǔ)器接口電路保存計(jì)算機(jī)經(jīng)由USB通信電路傳來的塊數(shù)據(jù),同時(shí)也在單片機(jī)控制電路的作用下經(jīng)由USB通信電路向計(jì)算機(jī)傳送塊數(shù)據(jù)。本發(fā)明設(shè)計(jì)的USB大容量存儲(chǔ)裝置的設(shè)計(jì)方案中沒有U盤所采用的專用控制芯片,而是采用工業(yè)上通用的廉價(jià)芯片,升級(jí)更容易,性能更可靠。
上述USB存儲(chǔ)裝置中,電源發(fā)生電路采用3只二極管串聯(lián)組成,從5伏USB電源降壓得到3.4伏的電源;單片機(jī)采用高速PIC兼容型MCU單片機(jī)MDT10P20,USB接口器件采用PDIUSB12D芯片,大容量存儲(chǔ)器采用FLASH芯片,三者組成USB大容量存儲(chǔ)組件。
本發(fā)明中,控制軟件由2部分構(gòu)成USB設(shè)備識(shí)別部分和大容量存儲(chǔ)讀寫部分。其中,USB設(shè)備識(shí)別部分,由控制端點(diǎn)0讀寫完成,符合USB規(guī)范1.1;大容量存儲(chǔ)讀寫部分,由端點(diǎn)2讀寫完成,符合USB MASS STORAGE CLASS BULK-ONLY TRANSPORT規(guī)范。此外,還要符合USB接口器件和大容量存儲(chǔ)芯片的使用規(guī)范。
圖1為USB接口與電源發(fā)生器電路。
圖2為USB通信電路。
圖3為單片機(jī)控制電路。
圖4為大容量存儲(chǔ)器接口電路。
圖5為 圖6為本存儲(chǔ)裝置的電路結(jié)構(gòu)框圖。
圖7為本存儲(chǔ)裝置的控制軟件框圖。
圖中標(biāo)號(hào)1為USB接口與電源發(fā)生器電路,2為USB通信電路,3為振蕩電路,4為單片機(jī)控制電路,5為大容量存儲(chǔ)器接口電路。
具體實(shí)施例方式 下面通過實(shí)施例和附圖來詳細(xì)說明本發(fā)明。
圖1所示的USB接口與電源發(fā)生器電路提供與USB通信電路的USB接口,并從USB電源導(dǎo)出3.3伏左右的電源供其余電路工作。J1是USB插座,1腳是USB地,2腳是USB的數(shù)據(jù)線DP,3腳是USB的數(shù)據(jù)線DN,4腳是USB的5伏電源線。D2,D3是2個(gè)硅二極管1N4007,D1是一個(gè)鍺二極管AK15。三只二極管串聯(lián),如圖所示接在J1的4腳和信號(hào)V3.3之間。三只二極管的壓降大約為0.65*2+0.3=1.6伏,從4腳5伏電源出發(fā),得出V3.3大約為3.4伏,用以驅(qū)動(dòng)其余的電路。我們這樣選擇其余的元器件,使得它們的工作電壓在2.7伏到3.6伏之間。電容C3的作用是穩(wěn)定V3.3電源信號(hào)。
圖2所示的USB通信電路負(fù)責(zé)USB數(shù)據(jù)包的收發(fā)。采用USB接口器件PDIUSB12D,該芯片符合USB1.1規(guī)范,具有12Mbit/s的全速USB通信功能,有8位并行接口,方便單片機(jī)控制。該芯片的工作模式0提供端點(diǎn)0和端點(diǎn)2,端點(diǎn)0具有輸入/輸出功能,最大數(shù)據(jù)包長度為16字節(jié),用于LSB的控制傳輸;端點(diǎn)2具有輸入/輸出功能,最大數(shù)據(jù)包長度為64字節(jié),有雙重64字節(jié)的數(shù)據(jù)緩沖區(qū),適合全速塊傳輸。其引腳連接如下 ①5、24腳是其電源腳,5腳接地,24腳接在V3.3信號(hào)上; ②22、23腳是它的振蕩腳,按要求接到內(nèi)置穩(wěn)定電容的陶瓷振蕩器Y1的兩端,Y1的頻率為6MHz,如圖5所示; ③25、26腳分別是該芯片的USB信號(hào)DN、DP腳,通過18Ω的電阻R3、R18連接到USB插座的3、2腳,R3、R18的作用是匹配差分電路的阻抗; ④1、2、3、4、6、7、8、9是它的并行接口,接到8位數(shù)據(jù)總線AD
上,通過該總線,一方面單片機(jī)可以控制該芯片,同時(shí)大容量存儲(chǔ)FLASH芯片可以與該芯片交換數(shù)據(jù); ⑤10腳是地址鎖存輸入信號(hào),不用故接地;14腳是數(shù)據(jù)收發(fā)中斷標(biāo)志輸出信號(hào),不用,故懸空;12腳是使芯片進(jìn)入掛起狀態(tài)輸入信號(hào),開漏,本設(shè)計(jì)中該芯片從不進(jìn)入掛起狀態(tài),故可以懸空;17、18、19腳分別是芯片的DMA請(qǐng)求輸出、承認(rèn)輸入、中斷輸入信號(hào),本設(shè)計(jì)不使用DMA功能,故分別懸空、接到V3.3信號(hào)上;Vout33是芯片的3.3伏電源輸出腳,不用,可以懸空,或接到V3.3信號(hào)上; ⑥11腳是芯片片選信號(hào),低有效,由于總線共享于USB接口芯片、MCU單片機(jī)、大容量存儲(chǔ)FLASH芯片3者之間,當(dāng)后兩者交換數(shù)據(jù)占據(jù)總線時(shí),需要USB接口芯片放棄總線控制權(quán),故該腳接到信號(hào)nCS上由MCU單片機(jī)來控制; ⑦28腳是地址位輸入信號(hào),該腳上信號(hào)為0時(shí)表示輸入的是數(shù)據(jù),否則是命令指令,故接到CLE信號(hào)上,由單片機(jī)來控制; ⑧13腳是可編程振蕩信號(hào)輸出腳,頻率為48MHz/(n+1),其中n為1到11之間的正數(shù),開始時(shí)為11。該信號(hào)連接到Clk上,用于驅(qū)動(dòng)MCU單片機(jī); ⑨15、16腳分別是讀、寫控制輸入腳,低有效,接到nRD、nWR信號(hào)上,由MCU單片機(jī)來控制; ⑩21腳是USB連接狀態(tài)指示燈,低有效,可吸收8mA的電流,故通過電阻R4與發(fā)光二極管LP1連接,二極管的另一端接到V3.3信號(hào)上,R4的作用是控制電流的大小。注意二極管的方向不可顛倒; 圖3所示的單片機(jī)控制電路負(fù)責(zé)通過USB通信電路讓計(jì)算機(jī)識(shí)別自己是大容量存儲(chǔ)裝置,并智能地控制大容量存儲(chǔ)器接口電路的讀寫。采用PIC兼容的MCU單片機(jī)MDT10P20來實(shí)現(xiàn),工作電壓為2.3伏到5伏之間。當(dāng)然也可以選用其他芯片,例如EM78P257。事實(shí)上,只要是有14個(gè)以上的IO口,3.3伏工作電壓時(shí)每秒可以執(zhí)行5M條左右的指令的RISC單片機(jī)都可以勝任。MDT10P20的引腳連接如下 ①電源腳6、15分別接地、V3.3信號(hào); ②17是振蕩輸入腳,連接到PDIUSB12D傳來的Clk振蕩信號(hào),16是振蕩輸出腳,不用,懸置; ③5是復(fù)位輸入腳,低有效,利用芯片的內(nèi)部上電復(fù)位功能,不用該腳的功能故連接到V3.3信號(hào)上; ④7到14腳8個(gè)IO口作為總線接口,連接到總線AD
上,輸入數(shù)據(jù)時(shí),這些腳要設(shè)置成輸入狀態(tài),輸出數(shù)據(jù)/命令時(shí),必須設(shè)置成輸出狀態(tài); ⑤18腳用于選擇PDIUSB12D,設(shè)置成輸出狀態(tài),連接到信號(hào)nCS上; ⑥19腳用于選擇大容量存儲(chǔ)FLASH芯片,設(shè)置成輸出狀態(tài),連接到信號(hào)nCE上; ⑦20、1腳用于控制寫、讀,設(shè)置成輸出狀態(tài),分別連接到nWR、nRD信號(hào)上; ⑧2腳用于命令指示位,設(shè)置成輸出狀態(tài),用于發(fā)出命令時(shí)通知PDIUSB12D和大容量存儲(chǔ)FLASH芯片; ⑨3腳用于地址指示位,設(shè)置成輸出狀態(tài),用于發(fā)出地址時(shí)通知大容量存儲(chǔ)FLASH芯片; ⑩4腳是外部脈沖輸入口,連接到大容量存儲(chǔ)FLASH芯片傳來的操作完成/等待信號(hào)nINT,1時(shí)表示完成,用以加速完成存儲(chǔ)器的寫操作。
圖4所示的大容量存儲(chǔ)器接口電路保存計(jì)算機(jī)經(jīng)由USB通信電路傳來的塊數(shù)據(jù),同時(shí)也在單片機(jī)控制電路的作用下經(jīng)由USB通信電路向計(jì)算機(jī)傳送塊數(shù)據(jù)。采用U盤常用的大容量存儲(chǔ)FLASH芯片例如K9F1208UOC,它是SAMSUNG公司生產(chǎn)的64MByte的存儲(chǔ)芯片,工作電壓為2.7伏到3.6伏。該芯片以頁為基礎(chǔ),每頁大小為512Byte,32頁構(gòu)成一個(gè)塊,共有4096個(gè)塊。具有以頁為單位的讀寫功能,擦除時(shí)以塊為單位,不需要特殊的擦除電壓。該芯片還具有頁拷貝功能。硬件連接如下 ①13、36腳為電源地,接地信號(hào);12、37腳接至V3.3信號(hào); ②29、30、31、32、41、42、43、44為8位并行IO接口,接總線AD
; ③9腳為片選輸入信號(hào),接nCE信號(hào),由單片機(jī)控制; ④16、17為命令、地址輸入信號(hào),分別接至CLE、ALE信號(hào),由單片機(jī)控制; ⑤8、18腳是讀、寫輸入信號(hào),分別接至nWR、nRD信號(hào),由單片機(jī)控制控制。這里繞接的好處是數(shù)據(jù)能夠直接在USB接口芯片與大容量存儲(chǔ)FLASH芯片之間傳遞,單片機(jī)只需負(fù)責(zé)產(chǎn)生nWR、nRD脈沖信號(hào)即可。USB接口芯片的讀,就是大容量存儲(chǔ)FLASH芯片的寫,反之亦然; ⑥19腳是寫保護(hù)輸入信號(hào),低有效,不用,故接到V3.3信號(hào)上; ⑦7腳為操作完成/需等待輸出信號(hào),接到nINT上,通知單片機(jī)下一步操作,主要用于加速完成大容量存儲(chǔ)FLASH芯片的讀寫任務(wù)。
本發(fā)明設(shè)計(jì)的USB大容量存儲(chǔ)裝置的控制軟件框圖如圖7所示,由2部分構(gòu)成USB設(shè)備識(shí)部分,由控制端點(diǎn)0讀寫完成,符合USB規(guī)范1.1;大容量存儲(chǔ)讀寫部分,由端點(diǎn)2讀寫完成,符合USB MASS STORAGE CLASS BULK-ONLY TRANSPORT。此外,還要符合USB接口器件和大容量存儲(chǔ)芯片的使用規(guī)范。
第一部分USB設(shè)備識(shí)別的詳細(xì)過程如下 (1)初始化。將單片機(jī)的控制端口設(shè)置成輸出狀態(tài),不選通USB接口器件和大容量存儲(chǔ)芯片;將單片機(jī)的總線端口設(shè)置成輸入狀態(tài),放棄總線控制權(quán); (2)自我表現(xiàn)全速USB設(shè)備。拉低USB接口器件的DP腳,告訴計(jì)算機(jī)USB接口上插入了全速USB設(shè)備,并設(shè)置合適的輸出振蕩頻率 ①調(diào)用該器件的使用說明文件中所提供的D12_SetMode函數(shù),斷開該器件。注意,D12_SetMode調(diào)用了底層D12_Output函數(shù),單片機(jī)向USB接口器件寫數(shù)據(jù)時(shí),應(yīng)先設(shè)置總線為輸出狀態(tài),再通過nCS信號(hào)選通USB接口器件,然后通過CLE、nWR、nRD信號(hào)的組合依次發(fā)送命令、數(shù)據(jù)。完成后恢復(fù)總線為輸入狀態(tài),不選通USB接口器件。另一個(gè)底層D12_Input函數(shù)的操作與此類似,不再贅述; ②等待50毫秒; ③調(diào)用D12_SetDMA函數(shù),關(guān)閉DMA功能; ④再次調(diào)用D12_SetMode函數(shù),接通該器件并設(shè)置合適的輸出振蕩頻率; (3)檢查端點(diǎn)0是否接收到數(shù)據(jù)。調(diào)用D12_ReadEndpoint函數(shù),僅僅讀端點(diǎn)0輸入緩沖區(qū)接收到的數(shù)據(jù)的長度(不可清除數(shù)據(jù)),該長度大于0的話,說明計(jì)算機(jī)向USB設(shè)備發(fā)送了數(shù)據(jù)。讀數(shù)據(jù)包類型判別是否為SETUP包。通過函數(shù)D12_ReadLastTransactionStatus清除USB接口器件端點(diǎn)0輸入的中斷標(biāo)志位,同時(shí)得到該端點(diǎn)的數(shù)據(jù)包的類型。如果不是建立包的話,設(shè)置空閑位。反之,要進(jìn)一步處理。
(4)讀緩沖區(qū)8字節(jié),清空緩沖區(qū)。調(diào)用D12_ReadEndpoint函數(shù)讀取端點(diǎn)0緩沖區(qū)8字節(jié),清除緩沖區(qū)用于下一次讀入數(shù)據(jù)。如果讀到的數(shù)據(jù)不足8字節(jié)的話,說明穿過來的數(shù)據(jù)不對(duì),設(shè)置空閑位,調(diào)用函數(shù)D12_SetEndpointStatus阻塞端點(diǎn)0的輸入/出;否則要進(jìn)一步具體情況具體分析。
(5)解析USB請(qǐng)求。調(diào)用D12_AcknowledgeEndpoint函數(shù)解鎖端點(diǎn)0的輸入/出,從建立包的長度域提取下一步操作的數(shù)據(jù)長度(大于127的話截取為127)。檢查包類型域中的方向位,如果置位的話,下一步數(shù)據(jù)傳輸?shù)姆较蚴窃O(shè)備到計(jì)算機(jī),這可能是GetConfiguration,Get Descriptor,Get Interface,Get status標(biāo)準(zhǔn)USB請(qǐng)求。反之是計(jì)算機(jī)到設(shè)備,檢查下一步操作的數(shù)據(jù)長度 1.等于0,可能是Set Address,Set Configuration,Set Feature,Set Interface,SetDescriptor標(biāo)準(zhǔn)USB請(qǐng)求。
2.不大于8,是向設(shè)備輸出數(shù)據(jù),清除空閑位,設(shè)置接收位準(zhǔn)備接收數(shù)據(jù)。
3.大于8,調(diào)用函數(shù)D12_SetEndpointStatus阻塞端點(diǎn)0的輸入/出。
(6)響應(yīng)所有USB請(qǐng)求。檢查建立包請(qǐng)求類型域 ①標(biāo)準(zhǔn)請(qǐng)求,根據(jù)建立包請(qǐng)求域,作出具體相應(yīng)。
I.GET_STATUS,建立包請(qǐng)求類型域有3種情況,分別返回2字節(jié)信息 0x000x00 0x00(遠(yuǎn)程喚醒禁止\總線電源)、0x02 0x00(允許); 0x010x00 0x00(接口情況); 0x020x01 0x00(端點(diǎn)禁止)、0x00 0x00。
II.CLEAR_FEATURE,分設(shè)備遠(yuǎn)程喚醒和端點(diǎn)禁止兩種情況,記錄并調(diào)用D12_SetEndpointStatus作相應(yīng)的設(shè)置,返回返回0長度數(shù)據(jù)表示完成。
III.SET_FEATURE,根據(jù)記錄,返回一個(gè)字節(jié)的數(shù)據(jù)反映設(shè)備遠(yuǎn)程喚醒和端點(diǎn)禁止兩種情況。
IV.SET_ADDRESS,從包的數(shù)值域提取新地址,調(diào)用D12_SetAddressEnable函數(shù)將設(shè)備設(shè)置成該地址,返回返回0長度數(shù)據(jù)表示完成。
V.GET_DESCRIPTOR,視情況分別返回設(shè)備描述符,或返回所有的配置、接口、類、端點(diǎn)描述符。
VI.GET_CONFIGURATION,返回返回一個(gè)字節(jié)的配置/清除數(shù)據(jù)。
VII.SET_CONFIGURATION,從包的數(shù)值域提取配置/清除標(biāo)志,調(diào)用函數(shù)D12_SetEndpointEnable設(shè)置/清除配置,返回返回0長度數(shù)據(jù)表示完成。
VIII.GET_INTERFACE,返回一個(gè)字節(jié)的數(shù)據(jù)0表示完成。
IX.SET_INTERFACE,返回0長度數(shù)據(jù)表示完成。
其余情況,調(diào)用函數(shù)D12_SetEndpointStatus阻塞端點(diǎn)0的輸入/出。
②類請(qǐng)求,如果是USB_CLASS_MASS_BulkOnly_Reset請(qǐng)求的話,返回0長度數(shù)據(jù)表示OK;如果是USB_CLASS_MASS_BulkOnly_GetMaxLun請(qǐng)求的話,按要求需要返回一個(gè)字節(jié)的數(shù)據(jù)0,表示只支持1個(gè)LUN。
(7)端點(diǎn)0有數(shù)據(jù)需要發(fā)送發(fā)送數(shù)據(jù)。調(diào)用函數(shù)D12_ReadLastTransactionStatus USB接口器件端點(diǎn)0輸出的狀態(tài),并清除的中斷標(biāo)志位,如果空閑位=0且發(fā)送位=1,表示有數(shù)據(jù)需要發(fā)送。調(diào)用函數(shù)D12_WriteEndpoint進(jìn)一步發(fā)送最多16個(gè)字節(jié)的數(shù)據(jù)。最后一次發(fā)送時(shí)必定小于16字節(jié),表示發(fā)送結(jié)束。
第二部分大容量存儲(chǔ)讀寫部分的詳細(xì)過程如下 檢查端點(diǎn)2是否接收到數(shù)據(jù)。讀緩沖區(qū)36字節(jié),清空緩沖區(qū),匹配檢查開始4字節(jié),并解析SCSIOP命令。調(diào)用D12_ReadEndpoint函數(shù),讀最多36字節(jié)端點(diǎn)2輸入緩沖區(qū)接收到的數(shù)據(jù)并清除緩沖區(qū),該長度非0的話,說明計(jì)算機(jī)向USB設(shè)備發(fā)送了數(shù)據(jù)。匹配檢查第0、1、2、3字節(jié)是否為0x55,0x53,x042,0x43,不匹配的話則不再作處理。備份第4至7字節(jié)的數(shù)據(jù)包簽名用于應(yīng)答;第15字節(jié)為大容量存儲(chǔ)命令。完成上次寫操作與本次操作之間遺留的寫操作,執(zhí)行如下PreRestore程序 Procedure PreRestore begin if每塊操作一次標(biāo)志置位的話, if碰到另一個(gè)寫命令,并且邏輯區(qū)地址落在上一次的邏輯區(qū)地址與其塊上界之間 的話, 從備份塊中恢復(fù)本塊中間沒有寫的區(qū)域的數(shù)據(jù); else 從備份塊中恢復(fù)本塊尾部未寫區(qū)域的數(shù)據(jù),清除每塊操作一次標(biāo)志; fi fi end 從19、20字節(jié)分別提取邏輯區(qū)地址的高、低字節(jié);從22、23字節(jié)分別提取邏輯區(qū)長度的高、低字節(jié)。根據(jù)大容量存儲(chǔ)命令,分別作出如下相應(yīng)的處理。
(1).SCSIOP_WRITE寫命令執(zhí)行如下Backup_DirectWrite__Restore備份_直寫_恢復(fù)程序,USB大容量存儲(chǔ)裝置的可靠性及壽命皆有賴于它 Procedure Backup_DirectWrite_Restore begin if開始寫一頁, 1.如果每塊操作一次標(biāo)志清除的話, 記錄當(dāng)前邏輯區(qū)地址及邏輯區(qū)所處塊內(nèi)的相對(duì)地址; if待寫的區(qū)域的結(jié)尾地址落在邏輯區(qū)所處塊之內(nèi)的話, 擦除備份塊(設(shè)置在大容量存儲(chǔ)器后面適當(dāng)大小一塊區(qū)域); 備份不欲寫后部區(qū)域的數(shù)據(jù)到備份塊; else if邏輯區(qū)塊內(nèi)相對(duì)地址不為0的話,擦除備份塊; fi if邏輯區(qū)塊內(nèi)相對(duì)地址不為0的話,<!-- SIPO <DP n="7"> --><dp n="d7"/> 備份不欲寫前部區(qū)域的數(shù)據(jù)到備份塊; 擦除當(dāng)前欲寫之塊; 從備份中恢復(fù)不欲寫之前部區(qū)域; fi 2.if邏輯區(qū)塊內(nèi)相對(duì)地址不為0的話,擦除當(dāng)前塊; fi 調(diào)用D12_ReadEndpoint讀端點(diǎn)2輸入口64字節(jié),寫到大容量存儲(chǔ)器;完成8次 操作時(shí),寫完一個(gè)邏輯區(qū),相應(yīng)地邏輯區(qū)地址增加1; if 邏輯區(qū)地址仍在同一快內(nèi) 置位每塊操作一次標(biāo)志; else 清除每塊操作一次標(biāo)志; fi end (2).SCSIOP_READ,從邏輯區(qū)地址開始,如果USB接口器件端點(diǎn)2雙環(huán)寫緩沖取是否至少有一個(gè)為空的話,逐次讀取大容量存儲(chǔ)64字節(jié),調(diào)用D12_WriteEndpoint寫端點(diǎn)2輸出口(下同),直到向計(jì)算機(jī)傳輸完額定的邏輯區(qū)數(shù)內(nèi)容為止。必要的話,可以變形D12_WriteEndpoint以加速操作; (3).SCSIOP_TEST_UNIT_READY,發(fā)送13字節(jié)OK信息。13字節(jié)具體為0x55,0x53,0x42,0x43,4字節(jié)簽名,0,0,0,0,0; (4).SCSIOP_REQUEST_SENSE,先返回14字節(jié)非法請(qǐng)求信息,后發(fā)送13字節(jié)OK信息。14字節(jié)中的第0字節(jié)為0xf0,2為0x05,7為0x0a,12為0x20,其余為0。
(5).SCSIOP_INQUIRY,先返回36字節(jié)的設(shè)備信息,后后發(fā)送13字節(jié)OK信息。36節(jié)中的第1字節(jié)為0x80,3為0x01,4為0x1f,其余為0。
(6).SCSIOP_MEDIUM_REMOVAL,發(fā)送13字節(jié)OK信息。
(7).READ_FORMAT_CAPACITIES,先返回12字節(jié)格式化容量信息,后發(fā)送13字節(jié)OK信息。12字節(jié)中的第3字節(jié)為0x08,4、5、6、7為邏輯區(qū)總數(shù)(高先),8為0x02,9、10、11為邏輯區(qū)字節(jié)個(gè)數(shù)(高先),其余為0。
(8).SCSIOP_READ_CAPACITY,先返回8字節(jié)容量信息,后發(fā)送13字節(jié)OK信息。8字節(jié)中的0、1、2、3為編號(hào)從0開始,最后一個(gè)邏輯區(qū)的編號(hào)(高先),4、5、6、7為邏輯區(qū)字節(jié)個(gè)數(shù)(高先)。
(9).SCSIOP_VERIFY,發(fā)送13字節(jié)OK信息。
(10).SCSIOP_MODE_SENSE,先返回8字節(jié)的模式信息,后后發(fā)送13字節(jié)OK信息。8節(jié)中的第0字節(jié)為0x1C,1為0x06,3為0x01,其余為0。
根據(jù)本發(fā)明內(nèi)容,采用單片機(jī)MDT10P22作為控制器,從網(wǎng)上下載MDT10P22的軟件開發(fā)工具,根據(jù)本發(fā)明給出的軟件流程,設(shè)計(jì)出控制軟件,生成MDT10P22的二進(jìn)制編程文件。用PROTEL電路圖設(shè)計(jì)軟件照附圖所示畫出原理圖。規(guī)劃元器件的放置方案,采用貼片元器件,畫出美麗的PCB圖。從PCB圖生成元器件列表。網(wǎng)上下載Microsoft的DDK設(shè)備驅(qū)動(dòng)開發(fā)工具,下載UMSS U盤驅(qū)動(dòng)程序包,修改生成運(yùn)行于WIN98的U盤驅(qū)動(dòng)程序,并用智能安裝打包程序打包生成SETUP.EXE安裝程序。
權(quán)利要求
1、一種USB大容量存儲(chǔ)裝置,由硬件和軟件兩部分構(gòu)成,其特征在于硬件由USB接口與電源發(fā)生器電路、振蕩電路、USB通信電路、單片機(jī)控制電路、大容量存儲(chǔ)器接口電路經(jīng)電路連接而成,其中,USB接口與電源發(fā)生器電路提供與USB通信電路的USB接口,并從USB電源導(dǎo)出3.3伏左右的電源供其余電路工作;振蕩電路驅(qū)動(dòng)USB通信電路工作;USB通信電路負(fù)責(zé)USB數(shù)據(jù)包的收發(fā);單片機(jī)控制電路負(fù)責(zé)通過USB通信電路讓計(jì)算機(jī)識(shí)別自己是大容量存儲(chǔ)裝置,并智能地控制大容量存儲(chǔ)器接口電路的讀寫;大容量存儲(chǔ)器接口電路保存計(jì)算機(jī)經(jīng)由USB通信電路傳來的塊數(shù)據(jù),同時(shí)也在單片機(jī)控制電路的作用下經(jīng)由USB通信電路向計(jì)算機(jī)傳送塊數(shù)據(jù)。
2、根據(jù)權(quán)利要求1所述的USB大容量存儲(chǔ)裝置,其特征在于所述電源發(fā)生電路采用3只二極管串聯(lián)組成,從5伏USB電源降壓得到3.4伏的電源;單片機(jī)采用高速PIC兼容型MCU單片機(jī)MDT10P20,USB接口器件采用PDIUSB12D芯片,大容量存儲(chǔ)器采用FLASH芯片,三者組成USB大容量存儲(chǔ)組件。
3、根據(jù)權(quán)利要求1所述的USB大容量存儲(chǔ)裝置,其特征在于所述控制軟件由2部分構(gòu)成USB設(shè)備識(shí)別部分和大容量存儲(chǔ)讀寫部分;其中,USB設(shè)備識(shí)別部分,由控制端點(diǎn)0讀寫完成,符合USB規(guī)范1.1;大容量存儲(chǔ)讀寫部分由端點(diǎn)2讀寫完成,符合USB MASS STORAGE CLASS BULK-ONLY TRANSPORT規(guī)范;此外,還符合USB接口器件和大容量存儲(chǔ)芯片的使用規(guī)范。
4、根據(jù)權(quán)利要求1所述的USB大容量存儲(chǔ)裝置,其特征在于所述的大容量存儲(chǔ)讀寫軟件中,
(1)有一個(gè)完成上次寫操作與本次操作之間遺留的寫操作的PreRestore程序
if每塊操作一次標(biāo)志置位的話,
if碰到另一個(gè)寫命令,并且邏輯區(qū)地址落在上一次的邏輯區(qū)地址與其塊上界之
間的話,
從備份中恢復(fù)本塊中間沒有寫的區(qū)域的數(shù)據(jù);
else
從備份中恢復(fù)本塊尾部未寫區(qū)域的數(shù)據(jù),清除每塊操作一次志;
fi
fi
(2)有一個(gè)用于寫操作的Backup_DirectWrite_Restore備份_直寫_恢復(fù)程序,支持FAT、FAT32、NTFS等多種文件格式
if開始寫一頁,
1.如果每塊操作一次標(biāo)志清除的話,
記錄當(dāng)前邏輯區(qū)地址及邏輯區(qū)所處塊內(nèi)的相對(duì)地址;
if待寫的區(qū)域的結(jié)尾地址落在邏輯區(qū)所處塊之內(nèi)的話,
擦除備份塊;
備份不欲寫后部區(qū)域的數(shù)據(jù)到備份塊;
else if邏輯區(qū)塊內(nèi)相對(duì)地址不為0的話,擦除備份塊;
fi
if邏輯區(qū)塊內(nèi)相對(duì)地址不為0的話,
備份不欲寫前部區(qū)域的數(shù)據(jù)到備份塊;
擦除當(dāng)前欲寫之塊;
從備份中恢復(fù)不欲寫之前部區(qū)域;
fi
2.如果邏輯區(qū)塊內(nèi)相對(duì)地址不為0的話,擦除當(dāng)前塊;
fi
調(diào)用D12_ReadEndpoint讀端點(diǎn)2輸入口64字節(jié),寫到大容量存儲(chǔ)器;完成8次
操作時(shí),寫完一個(gè)邏輯區(qū),相應(yīng)地邏輯區(qū)地址增加1;
if邏輯區(qū)地址仍在同一快內(nèi),
置位每塊操作一次標(biāo)志;
else
清除每塊操作一次標(biāo)志;
fi
全文摘要
本發(fā)明是一種USB大容量存儲(chǔ)裝置,由硬件和控制軟件兩部分構(gòu)成。硬件采用通用型元器件,由USB接口器件、廉價(jià)高速PIC兼容型MCU單片機(jī)、大容量存儲(chǔ)芯片構(gòu)成。這種方案的缺點(diǎn)是連接稍微復(fù)雜些,優(yōu)點(diǎn)是組合可能多,選擇余地大。本發(fā)明給出了詳細(xì)的軟件解決方案,利用大容量存儲(chǔ)芯片塊擦除、頁拷貝特點(diǎn),提出了具有特點(diǎn)的“備份-直接寫-恢復(fù)”的寫流程,它保證了USB大容量存儲(chǔ)裝置具有長壽命、永遠(yuǎn)正確、兼容性強(qiáng)的特點(diǎn),使基于本發(fā)明制造的U盤具有升級(jí)容易,性能可靠的優(yōu)點(diǎn)。
文檔編號(hào)G11C16/02GK1588554SQ20041005403
公開日2005年3月2日 申請(qǐng)日期2004年8月26日 優(yōu)先權(quán)日2004年8月26日
發(fā)明者張德志 申請(qǐng)人:復(fù)旦大學(xué)