專利名稱::通用串行總線接口的大容量移動(dòng)存儲(chǔ)器及其實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于計(jì)算機(jī)
技術(shù)領(lǐng)域:
,特別涉及對(duì)移動(dòng)存儲(chǔ)設(shè)備的設(shè)計(jì)。目前計(jì)算機(jī)所普遍使用的移動(dòng)存儲(chǔ)設(shè)備仍然以1.44MB的軟驅(qū)為主流,同時(shí)也出現(xiàn)了一些新的存儲(chǔ)器,如ZIP、MO、刻錄機(jī)、外置硬盤(pán)等等。但是這些設(shè)備作為移動(dòng)存儲(chǔ)器都存在著很大的缺陷軟驅(qū)所使用的軟盤(pán)價(jià)格便宜,但是可靠性極差,且容量小,速度慢,壽命短、容易損壞,不方便攜帶,沒(méi)有數(shù)據(jù)安全保障;而其他新型移動(dòng)存儲(chǔ)器則價(jià)格偏高,安裝攜帶不便,標(biāo)準(zhǔn)不統(tǒng)一,且一般采用串并口,速度慢,也沒(méi)有數(shù)據(jù)安全保證。本發(fā)明的目的是為了解決已有技術(shù)的不足之處,提出一種USB接口的移動(dòng)存儲(chǔ)器,結(jié)合FLASH存儲(chǔ)技術(shù)和USB接口兩項(xiàng)最新技術(shù),將程序存放于PC端驅(qū)動(dòng)程序中,在設(shè)備接入時(shí)自動(dòng)下載執(zhí)行;采用雙緩沖存儲(chǔ)技術(shù),大大提高了USB接口的傳輸速度;采用體交叉的快速存儲(chǔ)技術(shù),極大提高了數(shù)據(jù)的存儲(chǔ)速度;且對(duì)數(shù)據(jù)的傳輸和攜帶具有可靠、方便攜式而廉價(jià)的優(yōu)點(diǎn)。本發(fā)明提出的一種通用串行總線接口的大容量移動(dòng)存儲(chǔ)器,其特征在于,包括由硬件電路構(gòu)成的移動(dòng)存儲(chǔ)器插板,嵌入PC主機(jī)端的控制軟件和PC主機(jī)端中的驅(qū)動(dòng)程序兩部分組成;其中,移動(dòng)存儲(chǔ)器插板包括微處理器CPU及與其相連的兩個(gè)Flash存儲(chǔ)器、一個(gè)備選EEPROM存儲(chǔ)器、與PC主機(jī)進(jìn)行連接的USB接口,通過(guò)微處理器CPU的晶振輸入管腳為其提供工作脈沖的晶振,供給所說(shuō)的CPU、Flash存儲(chǔ)器或EEPROM電壓的電源,所說(shuō)的Flash存儲(chǔ)器通過(guò)數(shù)據(jù)總線以及CPU的IO端口和CPU進(jìn)行連接;所說(shuō)的備選EEPROM存儲(chǔ)器通過(guò)I2C總線和CPU相連;所說(shuō)的嵌入PC主機(jī)端的控制軟件由系統(tǒng)狀態(tài)機(jī),USB協(xié)議棧和Flash的IO驅(qū)動(dòng)程序組成;所說(shuō)的PC主機(jī)中的驅(qū)動(dòng)程序由下載代碼的驅(qū)動(dòng)程序,正常工作的設(shè)備驅(qū)動(dòng)程序和IO端口驅(qū)動(dòng)程序組成。本發(fā)明的功能及特點(diǎn)可靠性和安全性高本發(fā)明的基本功能是可靠、安全、方便快速的拷貝、攜帶數(shù)據(jù)文件;由于其存儲(chǔ)器采用可擦寫(xiě)的閃存——FLASH,保存數(shù)據(jù)的可靠性極高,有效擦寫(xiě)周期大于100萬(wàn)次;所存入的數(shù)據(jù)可以在不需要電源的情況下可以安全存放10年以上;而且由于沒(méi)有機(jī)械傳動(dòng)部件,其抗震性能優(yōu)異,可以保證攜帶中數(shù)據(jù)的安全。速度快、功耗低該存儲(chǔ)器的目前支持USB協(xié)議1.0,實(shí)現(xiàn)的USB接口的傳輸速度為8Mbps即使串行Flash的寫(xiě)入速度較慢,但是本發(fā)明采用體交叉的存儲(chǔ)技術(shù),極大的提高系統(tǒng)性能。本發(fā)明的實(shí)際存取速度為寫(xiě)入速率3.2Mbps-5Mbps,讀出速率為5.6Mbps-7.2Mbps(實(shí)際速率與PC主機(jī)的速度有關(guān)系);將來(lái)使用更高速的FLASH,以及升級(jí)到USB協(xié)議2.0將可以支持到360-480Mb每秒的傳輸速率;本發(fā)明的最大功耗為1W,且有節(jié)電模式。存儲(chǔ)容量大由于采用了串行的FLASH(即數(shù)據(jù)地址總線復(fù)用的FLASH),故即可以采用廉價(jià)的8051處理器,且突破了其64K尋址空間的限制,可以方便的擴(kuò)展FLASH存儲(chǔ)器的容量;本發(fā)明目前的系列容量為8MB~512MB;但是本發(fā)明的最終容量?jī)H受存儲(chǔ)器的單片容量和成本的限制;隨著FLASH單片容量的增加,本發(fā)明可以隨之?dāng)U展存儲(chǔ)容量。功能強(qiáng),升級(jí)方便本發(fā)明微處理器的控制程序不是固化于ROM中,而是位于驅(qū)動(dòng)程序中,當(dāng)系統(tǒng)加電時(shí),PC主機(jī)的操作系統(tǒng)根據(jù)從本發(fā)明獲取的ID號(hào)加載設(shè)備驅(qū)動(dòng),本發(fā)明的驅(qū)動(dòng)程序通過(guò)缺省的USB協(xié)議設(shè)置將微處理器的控制程序由USB接口下載到本發(fā)明的RAM中,然后系統(tǒng)開(kāi)始工作。該特性使本發(fā)明能夠通過(guò)不同的驅(qū)動(dòng)程序?qū)崿F(xiàn)USB協(xié)議中的控制、中斷、批傳輸和同步傳輸四種傳輸模式,任何對(duì)USB協(xié)議的升級(jí),對(duì)微處理器的任何設(shè)置調(diào)整,都只需要更新驅(qū)動(dòng)程序即可。使用方便在PC主機(jī)開(kāi)啟情況下,只需將USB接頭插入即可使用;支持本發(fā)明的熱插拔(即不需要關(guān)閉計(jì)算機(jī)就可以插拔該設(shè)備),支持真正的即插即用,在接入本發(fā)明后,PC主機(jī)的操作系統(tǒng)將自動(dòng)載入本發(fā)明的驅(qū)動(dòng)程序;同時(shí)本發(fā)明不需要外部電源,系統(tǒng)電源直接由USB接口供給;本發(fā)明只有口香糖大小,非常適合攜帶;驅(qū)動(dòng)和盤(pán)片(存儲(chǔ)芯片)合一,通用性好。兼容性好,擴(kuò)展能力強(qiáng)隨著USB技術(shù)的廣泛應(yīng)用,本發(fā)明能夠廣泛工作在各種具有USB接口的設(shè)備上,如PC主機(jī),筆記本、蘋(píng)果機(jī)等,其適用的PC主機(jī)操作系統(tǒng)為Win98,Win2000,WinCE、Linux等。本發(fā)明的存儲(chǔ)器容量可以方便的擴(kuò)充,只需更換FLAH芯片即可;更為重要的是,本發(fā)明具有USB接口的良好擴(kuò)展能力,可以在USB總線上同時(shí)連接64個(gè)本發(fā)明,突破了一個(gè)串、并口只能連接一個(gè)本發(fā)明的限制。系統(tǒng)成本低本發(fā)明80%左右的成本集中于核心存儲(chǔ)器FLASH;之所以采用目前成本較高的FLASH作為存儲(chǔ)器,主要是考慮到FLASH的高可靠性、方便性和存在良好的應(yīng)用前景;正由于FLASH作為存儲(chǔ)設(shè)備的這一特點(diǎn),目前FLASH的應(yīng)用日趨廣泛,計(jì)算機(jī)BIOS、MP3隨身聽(tīng)、數(shù)字相機(jī)等設(shè)備的核心存儲(chǔ)器均為FLASH。目前世界上的主要存儲(chǔ)設(shè)備生產(chǎn)商均在大規(guī)模的擴(kuò)展FLASH的生產(chǎn)能力,因此FLASH即將成為下一代的主流存儲(chǔ)介質(zhì)。由于該存儲(chǔ)器具有驅(qū)動(dòng)和盤(pán)片合一、壽命長(zhǎng)、不需要象軟驅(qū)一樣每臺(tái)計(jì)算機(jī)均配置一個(gè)驅(qū)動(dòng)器的特點(diǎn),實(shí)際降低了整個(gè)系統(tǒng)成本;而且隨著核心存儲(chǔ)器FLASH生產(chǎn)成本的下降,本發(fā)明可望成為未來(lái)的主流移動(dòng)存儲(chǔ)設(shè)備。市場(chǎng)潛力巨大根據(jù)摩爾定量,核心存儲(chǔ)器Flash容量將指數(shù)增加,而成本則指數(shù)下降,該產(chǎn)品將成為性能價(jià)格比極高的理想移動(dòng)存儲(chǔ)器;同時(shí),隨著USB技術(shù)的日益廣泛應(yīng)用和該產(chǎn)品的優(yōu)異性能,該移動(dòng)存儲(chǔ)器將逐步取得各主板廠商的BIOS支持以及PC主機(jī)操作系統(tǒng)的驅(qū)動(dòng)支持,實(shí)現(xiàn)從該驅(qū)動(dòng)器的啟動(dòng)和直接存儲(chǔ)功能,從而可以徹底淘汰軟盤(pán)驅(qū)動(dòng)器而成為計(jì)算機(jī)的標(biāo)準(zhǔn)配置。與其他數(shù)據(jù)存儲(chǔ)設(shè)備相比,本發(fā)明的特點(diǎn)為1、可靠性擦寫(xiě)周期大于1,000,000次,高于ZIP、MO盤(pán);2、操作方便性不需要安裝,支持熱插拔,操作最方便;3、通用性驅(qū)動(dòng)器和存儲(chǔ)器一體,適應(yīng)于任何具有USB、RS232接口的微機(jī)設(shè)備;4、體積遠(yuǎn)小于軟盤(pán)、硬盤(pán)、ZIP、MO盤(pán)驅(qū)動(dòng)器;5、速度為軟驅(qū)的50倍;采用USB2.0將達(dá)到高速硬盤(pán)的速率;6、容量遠(yuǎn)高于軟盤(pán),可達(dá)到ZIP、MO盤(pán)容量;7、成本高于軟驅(qū),遠(yuǎn)低于ZIP、MO盤(pán)驅(qū)動(dòng)器;附圖簡(jiǎn)要說(shuō)明圖1為本發(fā)明的USB接口的移動(dòng)存儲(chǔ)器硬件總體結(jié)構(gòu)的電路原理圖。圖2為本發(fā)明的嵌入PC主機(jī)端的控制軟件和PC主機(jī)端中的驅(qū)動(dòng)程序的整體結(jié)構(gòu)示意圖。圖3為本發(fā)明的嵌入PC主機(jī)端的控制軟件的實(shí)施例結(jié)構(gòu)示意圖。圖4為本發(fā)明的狀態(tài)機(jī)狀態(tài)的轉(zhuǎn)換程序示意圖。圖5為本發(fā)明的USB協(xié)議棧狀態(tài)圖。圖6為本發(fā)明程序的自動(dòng)下載實(shí)施例流程示意圖。圖7為本發(fā)明乒乓緩沖區(qū)的發(fā)送數(shù)據(jù)的實(shí)施例工作流程示意圖。圖8為本發(fā)明乒乓緩沖區(qū)接收數(shù)據(jù)的實(shí)施例流程示意圖。圖9為本發(fā)明嵌入端體交叉存儲(chǔ)的實(shí)施例寫(xiě)入程序流程圖。圖10為本發(fā)明下載代碼的驅(qū)動(dòng)程序的實(shí)施例流程圖。圖11為本發(fā)明接入管理程序?qū)嵤├鞒虉D。圖12為本發(fā)明實(shí)現(xiàn)IO控制程序的程序?qū)嵤├鞒虉D。圖13為本發(fā)明PC端體交叉存儲(chǔ)方式的數(shù)據(jù)發(fā)送程序?qū)嵤├鞒虉D。本發(fā)明設(shè)計(jì)的USB接口的大容量移動(dòng)存儲(chǔ)器實(shí)施例,包括由硬件電路構(gòu)成的移動(dòng)存儲(chǔ)器插板,嵌入PC主機(jī)端的控制軟件和PC主機(jī)端中的驅(qū)動(dòng)程序兩部分組成。其中,移動(dòng)存儲(chǔ)器插板的總體結(jié)構(gòu)如圖1所示,圖中1、圖中J1為USB接口插頭,是本存儲(chǔ)器插板與PC主機(jī)的USB接口進(jìn)行連接的接頭,其類型為USB-A口公接頭;USB總線中的D+和D-為一對(duì)查分信號(hào)線,直接與CPU的USB信號(hào)線管腳相連。2、U6(CMPWR)器件為CMPWR150芯片,該芯片從USB總線的VCC(+5V)線獲取電源,并將其轉(zhuǎn)換為3.3V的輸出電壓,以供給CPU、Flash存儲(chǔ)器或者EEPROM。3、U1(EZUSB_80)為微處理器AN2131QC;該處理器通過(guò)8位的數(shù)據(jù)總線,通用輸出端口與Flash存儲(chǔ)器(U3、U4)相連,通過(guò)I2C總線和EEPROM(U8)相連。其主要功能是實(shí)現(xiàn)USB接口協(xié)議,與PC主機(jī)通過(guò)USB總線進(jìn)行數(shù)據(jù)交換,同時(shí)通過(guò)輸出時(shí)序來(lái)控制Flash存儲(chǔ)器的讀寫(xiě)、擦除等操作;也可以通過(guò)I2C總線實(shí)現(xiàn)從EEPROM的啟動(dòng)。由于本發(fā)明可以實(shí)現(xiàn)從PC主機(jī)下載程序的功能,故該EEPROM只是一個(gè)備選器件。4、U3、U4(KM29U128T)為Flash存儲(chǔ)器,其通過(guò)8位的數(shù)據(jù)總線以及CPU的IO端口和CPU進(jìn)行連接;其主要功能是進(jìn)行數(shù)據(jù)的存儲(chǔ)。5、U8(24LC00/01/64)為備選EEPROM,通過(guò)I2C總線和CPU相連,其主要作用時(shí)存儲(chǔ)CPU的可執(zhí)行程序,完成CPU的啟動(dòng),以加快本存儲(chǔ)器插板的啟動(dòng)速度。6、Y1為12MHz的晶振,通過(guò)CPU的晶振輸入管腳為CPU提供12MHz的工作脈沖。7、J2、J3、J4為本存儲(chǔ)器插板的硬件配置跳線,通過(guò)跳線,可以識(shí)別Flash存儲(chǔ)器的容量和片數(shù)。本存儲(chǔ)器插板的主要器件的實(shí)施例及功能分別說(shuō)明如下微處理器采用Cypress公司的AN2131QC;該微處理器的內(nèi)核是通用的8051CPU,但是一款增強(qiáng)型的51處理器,CPU頻率為24MHz,指令周期為4CLK;且該CPU集成了USB接口引擎和收發(fā)器,是一款適合于本發(fā)明的性能價(jià)格比非常高的處理器。其內(nèi)部集成的模塊包括USB差分收發(fā)器、USB串行接口引擎、增強(qiáng)型的8051微處理器以及8K字節(jié)的RAM存儲(chǔ)器。Flash存儲(chǔ)器采用Samsung公司的KM29U6400T~KM29U256T系列或者Toshiba公司的TC58256系列的Flash存儲(chǔ)器,該存儲(chǔ)器是一種地址和數(shù)據(jù)總線復(fù)用的FLASH芯片,其特點(diǎn)是存儲(chǔ)密度大(單片容量可從8M字節(jié)到128M字節(jié)不等),體積小(20mm×12mm×2mm),使用方便(不同容量的芯片管腳兼容),價(jià)格便宜,可利用8051提供的兩個(gè)片選信號(hào),完全可以由一個(gè)IO端口實(shí)現(xiàn)FLASH的所有時(shí)序控制。電源芯片實(shí)現(xiàn)USB接口的5V到微處理器和Flash需要的3.3V電壓,可采用的型號(hào)主要有Maxim公司的Max882或者CaliforniaMicroDevices公司的CMPWR150,其額定工作電流為500mA。EEPROM本存儲(chǔ)器插板硬件本身是一個(gè)裸機(jī),其控制程序可以在接入PC主機(jī)的時(shí)候自動(dòng)從驅(qū)動(dòng)程序中下載運(yùn)行;該特點(diǎn)十分方便程序的升級(jí),而且有效的降低了系統(tǒng)的成本;但是缺點(diǎn)就是下載的過(guò)程需要1-2秒鐘。為了考慮不同的用戶需求,本存儲(chǔ)器插板保留了一個(gè)8KB的I2C的ROM的位置,以方便用戶選用,使用EEPROM的特點(diǎn)就是瞬間啟動(dòng)(接入PC主機(jī)的同時(shí)就實(shí)現(xiàn)了啟動(dòng)),也具備隨時(shí)可以升級(jí)的特點(diǎn),缺點(diǎn)就是成本稍有提高。本實(shí)施例采用的EEPROM的型號(hào)為Atmel公司的AT24LC64或者CAT24WC08。其他器件主要是12MHz的晶振1個(gè),發(fā)光二極管1個(gè),電阻、電容若干,這些器件的功能及選用的型號(hào)均屬一般常識(shí),在此略述。本發(fā)明的軟件包括運(yùn)行于PC主機(jī)端的驅(qū)動(dòng)程序和運(yùn)行子存儲(chǔ)器插板硬件端的控制程序構(gòu)成,由于本發(fā)明能夠?qū)崿F(xiàn)存儲(chǔ)器插板硬件端的控制程序從PC主機(jī)上的自動(dòng)下載,故運(yùn)行于存儲(chǔ)器插板硬件端的控制程序?qū)嶋H是存放在PC主機(jī)端的下載代碼的驅(qū)動(dòng)程序中,只有在本發(fā)明的存儲(chǔ)器插板硬件接入PC主機(jī)的USB接口的時(shí)候才自動(dòng)下載到存儲(chǔ)器插板上運(yùn)行,故將運(yùn)行于本發(fā)明存儲(chǔ)器插板硬件端的控制程序稱為“嵌入PC主機(jī)端的控制軟件”。嵌入PC主機(jī)端的控制軟件和PC主機(jī)中的驅(qū)動(dòng)程序?qū)嵤├恼w結(jié)構(gòu)如圖2所示。其中,嵌入PC主機(jī)端的控制軟件由系統(tǒng)狀態(tài)機(jī),USB協(xié)議棧和Flash的IO驅(qū)動(dòng)程序組成;本發(fā)明的PC主機(jī)中的驅(qū)動(dòng)程序由構(gòu)建于PC主機(jī)操作系統(tǒng)USB協(xié)議棧之上的本發(fā)明的下載代碼的驅(qū)動(dòng)程序,本發(fā)明正常工作的設(shè)備驅(qū)動(dòng)程序和本發(fā)明的IO端口驅(qū)動(dòng)程序三部分組成。嵌入PC主機(jī)端的控制軟件主要指本存儲(chǔ)器插板的8051微處理的運(yùn)算和控制程序,設(shè)計(jì)的主要思想是采用微內(nèi)核的思想;由于8051CPU的處理能力有限,本發(fā)明的設(shè)計(jì)思想是8051僅僅用來(lái)實(shí)現(xiàn)最基本、最簡(jiǎn)單的USB協(xié)議以及數(shù)據(jù)傳輸服務(wù),而將其他復(fù)雜的功能的實(shí)現(xiàn)放在處理能力強(qiáng)大的PC主機(jī)端實(shí)現(xiàn)。本發(fā)明的嵌入PC主機(jī)端的控制軟件的實(shí)施例結(jié)構(gòu)和功能示如圖3所示。主要包括以下三部分(1)系統(tǒng)狀態(tài)機(jī);(2)USB協(xié)議棧;(3)Flash的IO驅(qū)動(dòng)程序。其中,狀態(tài)機(jī)是控制主程序,其負(fù)責(zé)調(diào)度USB協(xié)議棧和Flash驅(qū)動(dòng)程序的工作;USB協(xié)議棧主要負(fù)責(zé)處理USB的協(xié)議,通過(guò)USB總線實(shí)現(xiàn)與PC主機(jī)的驅(qū)動(dòng)程序的數(shù)據(jù)收發(fā),數(shù)據(jù)中包含發(fā)送給狀態(tài)機(jī)的命令和普通的文件數(shù)據(jù);Flash驅(qū)動(dòng)程序主要負(fù)責(zé)實(shí)現(xiàn)與Flash的通訊,為主狀態(tài)機(jī)實(shí)現(xiàn)與Flash進(jìn)行數(shù)據(jù)交換的通道,即通過(guò)Flash的時(shí)序控制,實(shí)現(xiàn)數(shù)據(jù)向Flash的存儲(chǔ)以及從Flash上讀取數(shù)據(jù)。狀態(tài)機(jī)即為本嵌入PC主機(jī)端的控制軟件的控制主程序,主要維護(hù)各個(gè)處理狀態(tài)之間的互斥、相互轉(zhuǎn)換等功能,實(shí)現(xiàn)任務(wù)的調(diào)度。本狀態(tài)機(jī)的實(shí)現(xiàn)方法實(shí)施例包括1.定義狀態(tài)1)空閑狀態(tài)(Idle),CPU沒(méi)有任務(wù)在執(zhí)行;2)查詢狀態(tài)(Quest),CPU對(duì)PC的查詢命令進(jìn)行響應(yīng)3)Flash擦除狀態(tài)(Erase),CPU執(zhí)行Flash的擦除操作4)Flash讀狀態(tài)(Read),CPU執(zhí)行讀Flash的操作5)Flash寫(xiě)狀態(tài)(Write),CPU執(zhí)行寫(xiě)Flash的操作2.定義2個(gè)操作1)清除當(dāng)前狀態(tài)操作(Clear),CPU強(qiáng)制退出當(dāng)前狀態(tài),返回空閑狀態(tài);2)復(fù)位操作(Reset),在任何狀態(tài)下,CPU均執(zhí)行系統(tǒng)復(fù)位功能3.實(shí)現(xiàn)狀態(tài)機(jī)狀態(tài)的轉(zhuǎn)換,如圖4所示,包括以下步驟1)狀態(tài)機(jī)的擦除、讀和寫(xiě)入狀態(tài)只能從空閑狀態(tài)下進(jìn)入;2)查詢狀態(tài)可以在任何狀態(tài)下進(jìn)入;3)空閑狀態(tài)下,收到Erase命令,則進(jìn)入擦除狀態(tài);其他狀態(tài)下均不能進(jìn)入擦除狀態(tài);執(zhí)行完Erase命令后,返回空閑狀態(tài);4)空閑狀態(tài)下,收到Read命令,則進(jìn)入讀取狀態(tài);其他狀態(tài)下均不能進(jìn)入讀取狀態(tài);執(zhí)行完Read命令后,返回空閑狀態(tài);5)空閑狀態(tài)下,收到Write命令,則進(jìn)入寫(xiě)入狀態(tài);其他狀態(tài)下均不能進(jìn)入寫(xiě)入狀態(tài);執(zhí)行完Write命令后,返回空閑狀態(tài);6)在空閑狀態(tài)、擦除狀態(tài)、讀狀態(tài)和寫(xiě)入狀態(tài),如果收到Quest命令,立刻進(jìn)入查詢狀態(tài),直到執(zhí)行完查詢操作后,返回進(jìn)入查詢狀態(tài)前的狀態(tài)。7)狀態(tài)機(jī)的各個(gè)狀態(tài)之間的設(shè)置互斥機(jī)制,即只要當(dāng)前的狀態(tài)沒(méi)有結(jié)束(包括自然結(jié)束和強(qiáng)制結(jié)束),那么狀態(tài)機(jī)就不能夠進(jìn)行狀態(tài)切換?;コ鈾C(jī)制是保證每次讀寫(xiě)操作完整性和正確性的基本保障。上述的互斥機(jī)制實(shí)施例采用令牌方法,具體包括如下步驟1)PC端程序在需要進(jìn)行某個(gè)操作(如讀、寫(xiě)、擦等),在進(jìn)入某個(gè)狀態(tài)之前,必須通過(guò)命令管道,向本發(fā)明發(fā)送一個(gè)Quest命令,申請(qǐng)操作令牌;2)本存儲(chǔ)器插板收到Quest命令,立刻返回當(dāng)前的令牌屬性,即屬于那個(gè)狀態(tài);3)PC端程序需要檢查令牌的屬性,如果當(dāng)前操作令牌數(shù)Idel狀態(tài),那么PC端程序有權(quán)申請(qǐng)操作令牌,否則PC端程序必須等待,直至令牌屬性為Idel;4)如果PC端檢測(cè)到本存儲(chǔ)器插板返回的令牌屬性為Idel,那么程序需要再次通過(guò)命令管道向本存儲(chǔ)器插板遞交需要執(zhí)行的操作,同時(shí)申請(qǐng)操作令牌;5)本存儲(chǔ)器插板收到該申請(qǐng)后,檢查資源,核對(duì)當(dāng)前令牌,如果符合資源足夠,且當(dāng)前狀態(tài)是Idel時(shí),就按申請(qǐng)的操作進(jìn)行狀態(tài)切換,并置令牌屬性;6)PC端程序遞交操作申請(qǐng)后,為確保申請(qǐng)成功,每次操作前仍需要執(zhí)行一次Quest命令,確認(rèn)當(dāng)前令牌屬性屬于自己。本USB協(xié)議棧主要包括USB1.0標(biāo)準(zhǔn)協(xié)議棧;程序自動(dòng)下載及設(shè)置乒乓緩沖區(qū)三個(gè)部分內(nèi)容其中,程序自動(dòng)下載程序是在USB標(biāo)準(zhǔn)協(xié)議?;A(chǔ)上增加的新功能;為了提高數(shù)據(jù)傳輸?shù)乃俣龋瑢SB協(xié)議棧中定義數(shù)據(jù)收發(fā)緩沖區(qū)設(shè)置為乒乓緩沖區(qū)。各部分的具體實(shí)現(xiàn)方法實(shí)施例說(shuō)明如下USB1.0標(biāo)準(zhǔn)協(xié)議棧的實(shí)現(xiàn)方法如圖5所示,包括以下步驟1)本存儲(chǔ)器插板接入U(xiǎn)SB總線的時(shí)候?yàn)檫B接狀態(tài),如果存在USB的HUB,那么本發(fā)明就進(jìn)入加電狀態(tài);在加電狀態(tài)時(shí),如果HUB復(fù)位,或者失去HUB的連接,那么本發(fā)明返回連接狀態(tài);2)在加電狀態(tài),如果接收到USB總線的復(fù)位命令,本發(fā)明進(jìn)入缺省狀態(tài);3)在缺省狀態(tài),如果收到PC主機(jī)的AddressAssigned(配置地址)命令,則本發(fā)明進(jìn)入編址狀態(tài);4)在編址狀態(tài),如果收到PC主機(jī)的查詢或者設(shè)置配置的命令,本發(fā)明就進(jìn)入配置狀5)在缺省狀態(tài)、編址態(tài)和配置態(tài)時(shí),如果電源中斷,都將返回加電狀態(tài);如果收到USB總線的復(fù)位命令,都將返回缺省態(tài);6)在加電狀態(tài)、缺省態(tài)、編址態(tài)和配置態(tài)時(shí),如果USB總線沒(méi)有傳輸信號(hào),則本發(fā)明進(jìn)入掛起狀態(tài),以節(jié)約電能。實(shí)現(xiàn)該功能的目的就是完成本發(fā)明與PC主機(jī)的初始化操作,在USB協(xié)議中稱為“列舉”(Enumeration),具體過(guò)程如下連接狀態(tài)該狀態(tài)指本存儲(chǔ)器插板可被連接到USB接口上或從接口斷開(kāi),是本存儲(chǔ)器插板開(kāi)始工作的第一個(gè)步驟。加電狀態(tài)(Powered)本存儲(chǔ)器插板的工作電源是從USB接口的5V電源處獲取得,因此,本存儲(chǔ)器插板接入PC端的USB接口以后,從USB總線的電源線獲得5V電源,通過(guò)DC-DC的轉(zhuǎn)換芯片,轉(zhuǎn)換為3.3V的工作電壓,供給AN2131微處理器,是微處理器開(kāi)始工作;本存儲(chǔ)器插板需要的工作電流為60mA左右。缺省狀態(tài)本存儲(chǔ)器插板加電以后,在它從總線接收到復(fù)位信號(hào)之前不應(yīng)對(duì)總線傳輸發(fā)生響應(yīng)。在接收到復(fù)位信號(hào)之后,本發(fā)明才在缺省地址處變得可尋址。地址狀態(tài)在進(jìn)入地址狀態(tài)前,PC主機(jī)首先必須識(shí)別本存儲(chǔ)器插板的本發(fā)明號(hào)(ID),以判別是否是一個(gè)合法的USB設(shè)備,該操作是通過(guò)向USB總線發(fā)送地址為0,端點(diǎn)為0(endpoint0)的“獲取設(shè)備描述表”(GetDescriptor)命令,因?yàn)槿魏卧O(shè)備都缺省具備端點(diǎn)0(endpoint0),且必須對(duì)地址為0的數(shù)據(jù)包進(jìn)行響應(yīng),因此本存儲(chǔ)器插板向PC主機(jī)返回自己的設(shè)備描述表,本存儲(chǔ)器插板的描述表內(nèi)容如表1所示表1<tablesid="table1"num="001"><table>偏移量域大小值描述0Blength10x12此描述表的字節(jié)數(shù)1BdecriptorType10x01描述表種類為設(shè)備2BcdUSB20x0001此設(shè)備與描述表兼容的USB設(shè)備說(shuō)明版本號(hào)(BCD碼)4BdeviceClass10x00設(shè)備類碼如果此域的值為0則一個(gè)設(shè)置下每個(gè)接口指出它自己的類,并個(gè)接口各自獨(dú)立工作。如果此域的值處于1~FEH之間,則設(shè)備在不同的接口上支持不同的類。并這些接口可能不能獨(dú)立工作。此值指出了,這些接口集體的類定義。如果此域設(shè)為FFH,則此設(shè)備的類由廠商定義。5BdeviceSubClass10x00子類碼這些碼值的具體含義根據(jù)bDeviceClass域來(lái)看。如bDeviceClass域?yàn)榱?,此域也須為零如bDeviceClass域?yàn)镕FH,此域的所有值保留。6BDevicePortocol100x00協(xié)議碼這些碼的值視bDeviceClass和bDevieeSubClass的值而定。如果設(shè)備支持設(shè)備基礎(chǔ)上的類相關(guān)的協(xié)議,此碼標(biāo)志了設(shè)備類說(shuō)明上的值。</table></tables>PC主機(jī)收到本存儲(chǔ)器插板的設(shè)備描述表后,按照表中的設(shè)備ID號(hào)來(lái)加載對(duì)應(yīng)的本發(fā)明驅(qū)動(dòng)程序,如果成功,PC主機(jī)再次通過(guò)端點(diǎn)0和地址0向本存儲(chǔ)器插板發(fā)送一個(gè)SetAddress命令,給本存儲(chǔ)器插板分配一個(gè)唯一的USB地址,本存儲(chǔ)器插板收到PC主機(jī)SetAddress命令后,將PC主機(jī)賦予的地址存入寄存器,以后PC主機(jī)訪問(wèn)本移動(dòng)存儲(chǔ)器均使用該地址,本存儲(chǔ)器插板也僅僅對(duì)該地址的數(shù)據(jù)包響應(yīng)。Configured(配置狀態(tài))本存儲(chǔ)器插板正常工作以前,本發(fā)明必須被正確配置。配置的內(nèi)容就是PC通過(guò)發(fā)送“獲取配置表”(GetConfiguration()),從本存儲(chǔ)器插板獲取配置表中的內(nèi)容,并按該內(nèi)容在PC端進(jìn)行資源配置,或者對(duì)該配置表進(jìn)行修改(SetConfiguration)。本存儲(chǔ)器插板的配置表內(nèi)容如表2所示表2中止?fàn)顟B(tài)為節(jié)省電源,本存儲(chǔ)器插板在探測(cè)不到總線傳輸時(shí)自動(dòng)進(jìn)入中止?fàn)顟B(tài)。當(dāng)中止時(shí),本存儲(chǔ)器插板保持本身的內(nèi)部狀態(tài),包括它的地址及配置。程序的自動(dòng)下載是本發(fā)明的一個(gè)重要的特點(diǎn),即本發(fā)明的存儲(chǔ)器插板中8051微處理器的執(zhí)行程序并不需要ROM保存,而是可以存放在PC主機(jī)端的本發(fā)明驅(qū)動(dòng)程序中,并在本存儲(chǔ)器插板接入U(xiǎn)SB總線的瞬間完成程序的下載并開(kāi)始運(yùn)行。實(shí)現(xiàn)該功能的核心思想是利用AN2131微處理器作為一個(gè)缺省的初始USB設(shè)備(具有設(shè)備ID1,PID=0x2131)接入PC主機(jī),PC主機(jī)加載對(duì)應(yīng)于ID1的設(shè)備驅(qū)動(dòng),該驅(qū)動(dòng)程序主要包含通過(guò)缺省的端點(diǎn)endpoint0向本存儲(chǔ)器插板下載執(zhí)行程序的程序;本存儲(chǔ)器插板收到執(zhí)行程序后,立刻運(yùn)行該程序,然后執(zhí)行USB總線的復(fù)位(通過(guò)AN2131的USB總線復(fù)位管腳進(jìn)行),PC主機(jī)重新識(shí)別本存儲(chǔ)器插板設(shè)備,此時(shí)本存儲(chǔ)器插板返回設(shè)備ID2(本存儲(chǔ)器插板的真正設(shè)備ID,PID)=0x1002),PC主機(jī)根據(jù)該ID加載本存儲(chǔ)器插板最終的驅(qū)動(dòng)程序,從而使本存儲(chǔ)器插板開(kāi)始正常工作。該功能的實(shí)現(xiàn)是利用了AN2131微處理器的一個(gè)特點(diǎn)AN2131不運(yùn)行程序的時(shí)候,可以作為一個(gè)具有設(shè)備VID=0x2131的缺省USB設(shè)備,該設(shè)備具有USB協(xié)議的缺省配置,即具有端點(diǎn)0,能夠?qū)Χ它c(diǎn)0的數(shù)據(jù)進(jìn)行響應(yīng)。本發(fā)明的程序自動(dòng)下載具體實(shí)現(xiàn)方法實(shí)施例如圖6所示,包括以下步驟1)本存儲(chǔ)器插板接入U(xiǎn)SB總線的時(shí)候,PC主機(jī)將向之發(fā)送GetDescriptor(獲取描述表)命令,要求USB設(shè)備返回設(shè)備號(hào)和廠商號(hào);2)本存儲(chǔ)器插板首先返回初始化設(shè)備的VID=0547(生產(chǎn)廠商ID),PID=2131(產(chǎn)品ID)3)PC主機(jī)獲取本存儲(chǔ)器插板的初始設(shè)備ID后,將在PC主機(jī)操作系統(tǒng)的USB設(shè)備驅(qū)動(dòng)庫(kù)中查找對(duì)應(yīng)于上述ID的設(shè)備驅(qū)動(dòng)(該ID對(duì)應(yīng)于本發(fā)明的下載程序的驅(qū)動(dòng)程序),并加載;4)PC主機(jī)操作系統(tǒng)一旦加載本存儲(chǔ)器插板的下載程序的驅(qū)動(dòng),該程序立刻通過(guò)本存儲(chǔ)器插板初始化設(shè)備提供的數(shù)據(jù)管道向本存儲(chǔ)器插板下載可執(zhí)行程序;5)本存儲(chǔ)器插板收到下載的程序后,立刻運(yùn)行而成為本存儲(chǔ)器插板正常工作的設(shè)備;6)本存儲(chǔ)器插板產(chǎn)生一次新USB設(shè)備接入總線的信號(hào),使PC主機(jī)重新識(shí)別本存儲(chǔ)器插板;7)PC主機(jī)收到新設(shè)備接入的信號(hào),重復(fù)上述的1、2、3步驟,加載對(duì)應(yīng)于VID=0547,PID=1002的設(shè)備驅(qū)動(dòng),該驅(qū)動(dòng)即為本存儲(chǔ)器插板正常工作時(shí)的設(shè)備驅(qū)動(dòng),從而完成程序自動(dòng)下載的過(guò)程。由于本發(fā)明具備硬件執(zhí)行程序動(dòng)態(tài)下載的功能,從而使之具備最先進(jìn)的軟件升級(jí)功能;對(duì)于傳統(tǒng)的硬件系統(tǒng),程序一般存儲(chǔ)在可擦寫(xiě)的EEPROM或者Flash中,用戶在升級(jí)軟件的時(shí)候,一旦中途意外中斷操作或者升級(jí)了錯(cuò)誤的程序,將造成硬件設(shè)備不能正確啟動(dòng)的物理故障。而本發(fā)明的程序是存放在PC主機(jī)端,用戶可以隨意更換驅(qū)動(dòng)而不致影響物理設(shè)備。乒乓緩沖的設(shè)計(jì)主要是為了加快本發(fā)明的數(shù)據(jù)收發(fā);因?yàn)镻C主機(jī)的處理速度非常的快,且USB總線的傳輸速率也非常的高,最高可達(dá)12Mbps,但是本存儲(chǔ)器插板的微處理器的速度相對(duì)就比較慢,如果每個(gè)端點(diǎn)只使用一個(gè)緩沖區(qū),將使數(shù)據(jù)的傳輸速率大為降低,設(shè)計(jì)原理如下條件1、USB總線的實(shí)際傳輸速率為900Kbyte/S(即7.2Mbps);2、端點(diǎn)的緩沖區(qū)位64字節(jié)(只能等于USB最大數(shù)據(jù)包的長(zhǎng)度64字節(jié));3、AN2131的平均指令執(zhí)行時(shí)間為160nS;4、將64字節(jié)數(shù)據(jù)送入Flash,平均需要執(zhí)行400條指令。計(jì)算64B數(shù)據(jù)在USB總線的傳輸時(shí)間T1=64/900K=69444nS,AN2131處理64字節(jié)的時(shí)間T2=400×160=64000nS。如果端點(diǎn)只使用一個(gè)緩沖區(qū),那么PC主機(jī)必須等待本存儲(chǔ)器插板處理完收到的64字節(jié)數(shù)據(jù)后,才能發(fā)送下一個(gè)64字節(jié)的數(shù)據(jù),此時(shí)實(shí)際的數(shù)據(jù)傳輸速率為V=64/(T1+T2)=468Kbyte/S此時(shí)數(shù)據(jù)的傳輸速率遠(yuǎn)低于USB總線的900Kbyte/S的傳輸速率;如果使用2個(gè)緩沖區(qū),很明顯,因?yàn)閁SB總線傳輸64字節(jié)的時(shí)間69444nS大于微處理器的處理時(shí)間64000nS,因此,微處理器處理完一個(gè)64字節(jié)的緩沖區(qū)后,PC主機(jī)向另外一個(gè)緩沖區(qū)的數(shù)據(jù)傳輸還沒(méi)有完成,所以,此時(shí)的數(shù)據(jù)傳輸速度就等于USB總線的傳輸速度900Kbye/S。因此,乒乓緩沖區(qū)的使用,大致可以提高一倍的數(shù)據(jù)傳輸速率。本發(fā)明的乒乓緩沖區(qū)程序包括數(shù)據(jù)的發(fā)送和接收,其中發(fā)送數(shù)據(jù)的實(shí)現(xiàn)方法實(shí)施例如圖7所示,包括如下步驟1)本存儲(chǔ)器插板收到USB總線的數(shù)據(jù),立刻查詢Buffer1(緩沖區(qū)1)的標(biāo)志位,如果是空的,則將數(shù)據(jù)包寫(xiě)入Buffer1,并置該緩沖區(qū)的標(biāo)志位為1(滿),最后向PC主機(jī)發(fā)送接收成功的握手信號(hào)ACK;2)如果Buffer1是滿的,則轉(zhuǎn)而查詢Buffer2,如果Buffer2是空的,則重復(fù)和Buffer1空時(shí)同樣的操作;如果Buffer2也是滿的,則表示PC主機(jī)發(fā)送的速度過(guò)快,本存儲(chǔ)器插板處理不過(guò)來(lái),則丟棄本次接收的數(shù)據(jù),并向PC主機(jī)返回接收不成功的握手信號(hào)NAK。本實(shí)施例的乒乓緩沖區(qū)的接收數(shù)據(jù)的方法如圖8所示,包括如下步驟1)本存儲(chǔ)器插板的微處理器首先檢查Buffer1的標(biāo)志,如果Busy1=1,表示該緩沖區(qū)接收滿了數(shù)據(jù),那么將該數(shù)據(jù)寫(xiě)入Flash,并置標(biāo)志為0(表示Buffer1為空);如果Busy1=0,表示沒(méi)有數(shù)據(jù),則直接進(jìn)入下面的操作;2)處理完Buffer1后,接著檢查Buffer2的標(biāo)志,如果有數(shù)據(jù),則寫(xiě)入Flash,然后清空標(biāo)志位;如果沒(méi)有數(shù)據(jù),則重復(fù)第一步的操作。本實(shí)施例的Flash的IO驅(qū)動(dòng)程序主要在Flash標(biāo)準(zhǔn)時(shí)序的基礎(chǔ)上增設(shè)了體交叉的寫(xiě)入方法。由于Flash的結(jié)構(gòu)特點(diǎn),決定了Flash讀寫(xiě)時(shí)間的不對(duì)稱性;以Samsung公司的KM29U128T芯片為例,讀出一頁(yè)數(shù)據(jù)(512字節(jié))的時(shí)間為10uS,而寫(xiě)入一頁(yè)數(shù)據(jù)的平均時(shí)間為350uS;一頁(yè)數(shù)據(jù)從USB總線傳送到Flash的數(shù)據(jù)總線,或者從Flash的數(shù)據(jù)總線傳送到USB總線的平均時(shí)間為300uS,因此本發(fā)明內(nèi)部的讀傳輸速率=512/(300+10)=12.6Mbps本發(fā)明內(nèi)部的寫(xiě)傳輸速率=512/(300+350)=6Mbps由此可見(jiàn),F(xiàn)lash的寫(xiě)入延時(shí)是本發(fā)明寫(xiě)入速度的瓶頸,如果不采取措施,加上USB總線和PC主機(jī)端的數(shù)據(jù)傳輸?shù)臅r(shí)延,實(shí)際的寫(xiě)入速度將只能達(dá)到3~4Mbps。體交叉技術(shù)的核心思想就是利用多片F(xiàn)lash的并行操作來(lái)提高寫(xiě)入速度;由于Flash具有讀流水的特點(diǎn),故體交叉技術(shù)對(duì)讀出操作并沒(méi)有改善。由于本發(fā)明的體積非常小,故一般只采用兩片F(xiàn)lash。本實(shí)施例的體交叉的寫(xiě)入操作實(shí)現(xiàn)流程如圖9所示。包括步驟如下1)進(jìn)入頁(yè)寫(xiě)入操作后,首先判斷待寫(xiě)入的頁(yè)地址是否奇數(shù)頁(yè),如果是則準(zhǔn)備將數(shù)據(jù)寫(xiě)入Flash1中;否則準(zhǔn)備將數(shù)據(jù)寫(xiě)入Flash2中;2)檢查Flash1的R/B管腳,判斷Flash1是否空閑;如果空閑,將數(shù)據(jù)寫(xiě)入Flash,否則繼續(xù)查詢狀態(tài),直到空閑后寫(xiě)入;3)寫(xiě)入Flash2的操作同寫(xiě)入Flash1的操作。由于Flash的讀操作具有流水特性,故讀出的過(guò)程仍然采用順序讀取,即先讀完Flash1上的數(shù)據(jù),然后讀取Flash2上的數(shù)據(jù)。當(dāng)然,要是實(shí)現(xiàn)完整的文件體交叉存取,還需要PC端的驅(qū)動(dòng)程序的支持。本發(fā)明的PC主機(jī)中的驅(qū)動(dòng)程序包括PC主機(jī)操作系統(tǒng)的標(biāo)準(zhǔn)USB協(xié)議棧的驅(qū)動(dòng)程序和本發(fā)明本身的驅(qū)動(dòng)程序。PC主機(jī)操作系統(tǒng)的標(biāo)準(zhǔn)USB協(xié)議棧的驅(qū)動(dòng)程序主要包括PCI-Enumeriator:PC主機(jī)的USB物理接口是通過(guò)PCI總線與CPU連接的;OpenHCI.SYS:PC主機(jī)操作系統(tǒng)的USB協(xié)議棧的驅(qū)動(dòng),開(kāi)放PC主機(jī)控制器接口驅(qū)動(dòng)(OpenHostControllerInterface);UHCD.SYS:PC主機(jī)操作系統(tǒng)的USB協(xié)議棧的驅(qū)動(dòng),USBPC主機(jī)控制器驅(qū)動(dòng)(USBhostcontrollerdrivers);USBD.SYS:PC主機(jī)操作系統(tǒng)的USB協(xié)議棧的驅(qū)動(dòng),USB設(shè)備驅(qū)動(dòng);USBHUB.SYS:PC主機(jī)操作系統(tǒng)的USB協(xié)議棧的驅(qū)動(dòng),USB的集線器驅(qū)動(dòng);本發(fā)明本身的驅(qū)動(dòng)程序包括EDStart.SYS:本發(fā)明的下載代碼的驅(qū)動(dòng)程序;EasyDisk.SYS:本發(fā)明正常工作的設(shè)備驅(qū)動(dòng)程序;EDIOSP.SYS:本發(fā)明的IO端口驅(qū)動(dòng)(IOSPort)。本發(fā)明的下載代碼的驅(qū)動(dòng)程序和正常工作的設(shè)備驅(qū)動(dòng)程序均采用WDM格式開(kāi)發(fā),具有良好的兼容性。下載代碼的驅(qū)動(dòng)程序的主要功能就是向本發(fā)明下載可執(zhí)行程序,進(jìn)行設(shè)備的初始化。下載代碼的驅(qū)動(dòng)程序流程如圖10所示,包括以下步驟1)IRP_MJ_POWER和IRP_MJ_PNP均是PC主機(jī)操作系統(tǒng)的IRP參數(shù),當(dāng)本存儲(chǔ)器插板接入的時(shí)候,PC主機(jī)操作系統(tǒng)的驅(qū)動(dòng)USBD.SYS能夠通過(guò)EDStart.SYS的入口函數(shù)DriverEntry()來(lái)傳遞這些參數(shù);2)輔助功能碼同樣是通過(guò)PC主機(jī)操作系統(tǒng)的USB協(xié)議棧獲得;3)當(dāng)輔助功能碼為刪除設(shè)備的時(shí)候,表示本存儲(chǔ)器插板已經(jīng)脫開(kāi)USB總線,此時(shí)調(diào)用PC主機(jī)操作系統(tǒng)USB協(xié)議棧提供的刪除設(shè)備的函數(shù)IoDetachDevice()和IoDeleteDevice()來(lái)刪除設(shè)備;4)當(dāng)輔助功能碼是其他的時(shí)候,此時(shí)本發(fā)明的下載驅(qū)動(dòng)不進(jìn)行任何動(dòng)作,僅僅簡(jiǎn)單返回;5)流程圖中的復(fù)位本發(fā)明和向本存儲(chǔ)器插板下載程序,都是通過(guò)URB參數(shù)塊向下層的USBD.SYS傳遞參數(shù),來(lái)使用USB協(xié)議中的VenderRequest(廠家請(qǐng)求命令)命令與本發(fā)明通訊,本發(fā)明下載代碼的驅(qū)動(dòng)程序使用的URB結(jié)構(gòu)如下<prelisting-type="program-listing"><![CDATA[urb→UrbHeader.Length=sizeof(struct_URB_CONTROL_VENDOR_OR_CLASS_REQUEST)urb→UrbHeader.Function=URB_FUNCTION_VENDOR_DEVICEurb→UrbControlVendorClassRequest.TransferBufferLength=1urb→UrbControlVendorClassRequest.TransferBuffer=&resetBit;urb→UrbControlVendorClassRequest.TransferBufferMDL=NULLurb→UrbControlVendorClassRequest.Request=EZDSK_LOAD_INTERNALurb→UrbControlVendorClassRequest.Value=CPUCS_REG;urb→UrbControlVendorClassRequest.Index=0;]]></pre>本發(fā)明的正常工作的設(shè)備驅(qū)動(dòng)程序是按PC主機(jī)操作系統(tǒng)標(biāo)準(zhǔn)驅(qū)動(dòng)程序格式實(shí)現(xiàn)的。該正常工作的設(shè)備驅(qū)動(dòng)程序是本發(fā)明正常工作所使用的驅(qū)動(dòng);當(dāng)本發(fā)明完成程序的下載后,便以一個(gè)新接入的設(shè)備開(kāi)始工作,此時(shí)PC主機(jī)操作系統(tǒng)便加載本發(fā)明的正常工作的設(shè)備驅(qū)動(dòng)程序。本發(fā)明的正常工作的設(shè)備驅(qū)動(dòng)程序主要包括接入設(shè)備的管理和為上層應(yīng)用提供IO操作。接入設(shè)備的管理主要包括設(shè)備的即插即用管理和設(shè)備的電源管理。本發(fā)明設(shè)備的電源管理并不進(jìn)行很多的處理工作,僅僅從底層PC主機(jī)操作系統(tǒng)的USB驅(qū)動(dòng)獲取本發(fā)明的電源類型,電源狀態(tài),并不進(jìn)行處理和修改。從底層獲取得電源的IRP參數(shù)主要有IRP_MN_SET_POWER(設(shè)置電源屬性的IRP參數(shù))IRP_MN_QUERY_POWER(查詢電源屬性的IRP參數(shù))通過(guò)這些IRP參數(shù)的輔助參數(shù)還可以知道設(shè)備的電源狀態(tài)和供電內(nèi)容。本發(fā)明的即插即用(PlugandPlay,簡(jiǎn)稱PNP)管理是一個(gè)很重要的功能,主要處理設(shè)備的接入、停止和刪除;本發(fā)明充分繼承了USB總線支持多設(shè)備同時(shí)接入的特點(diǎn),能夠有效的實(shí)現(xiàn)同時(shí)接入64個(gè)本發(fā)明;雖然USB協(xié)議規(guī)定,總線上最多可以級(jí)聯(lián)127個(gè)設(shè)備,但是由于所有的設(shè)備均需要共享帶寬,而USB總線的最大帶寬為12Mbps,放實(shí)際上接入127個(gè)設(shè)備基本沒(méi)有意義,因而本發(fā)明僅僅做到了支持64個(gè)設(shè)備的同時(shí)接入。本發(fā)明的接入管理流程如圖11所示,包括以下步驟1)本發(fā)明接入U(xiǎn)SB總線的時(shí)候,PC主機(jī)操作系統(tǒng)將加載本發(fā)明的驅(qū)動(dòng)程序,并將本發(fā)明接入的PNP消息傳遞給本發(fā)明的驅(qū)動(dòng)程序EasyDisk.SYS;2)驅(qū)動(dòng)程序接收到PNP的消息,將進(jìn)入PNP處理例程;3)驅(qū)動(dòng)首先檢查當(dāng)前驅(qū)動(dòng)管理的本發(fā)明設(shè)備是否大于64;4)如果大于64則返回超過(guò)最大設(shè)備數(shù)目的錯(cuò)誤,否則進(jìn)入下一步操作;5)如果小于64,那么創(chuàng)建一個(gè)新設(shè)備,設(shè)備名稱為“EZDSK-X”,X表示當(dāng)前實(shí)例的個(gè)數(shù),例如第一個(gè)設(shè)備名稱為“EZDSK-0”,后續(xù)接入的多個(gè)設(shè)備依次命名為“EZDSl-1”,“EZDSK-2”等;6)如果創(chuàng)建設(shè)備成功,則調(diào)用IoCreateSymbolicLink()函數(shù)來(lái)建立符號(hào)連接,即將設(shè)備名稱和實(shí)際的設(shè)備句柄進(jìn)行關(guān)聯(lián),否則返回創(chuàng)建失??;7)建立符號(hào)連接后,返回成功的標(biāo)志。另外,本發(fā)明的PNP管理還需要處理以下三個(gè)系統(tǒng)IRP消息IRP_MN_START_DEVICE該IRP的功能是初始化剛剛接入的本發(fā)明設(shè)備。通過(guò)設(shè)置URB參數(shù)塊,通過(guò)函數(shù)IoCallDriver()調(diào)用Pc主機(jī)操作系統(tǒng)的USBD.SYS驅(qū)動(dòng),向本發(fā)明發(fā)送初始化命令。URB的結(jié)構(gòu)和內(nèi)容在2.1.1中有描述,不再詳述。IRP_MN_STOP_DEVICE該IRP的功能是暫停本發(fā)明的工作。實(shí)現(xiàn)方法仍然是通過(guò)URB參數(shù)塊,調(diào)用USB驅(qū)動(dòng)進(jìn)行傳送。IRP_MN_REMOVE_DEVICE該IRP的功能是刪除己脫離USB總線的本發(fā)明設(shè)備,實(shí)現(xiàn)方法同上。本發(fā)明正常工作的設(shè)備驅(qū)動(dòng)程序的最重要的功能就是給本發(fā)明的上層應(yīng)用提供基本的IO操作,為此,本發(fā)明的驅(qū)動(dòng)定義了若干的IO操作的控制程序,以方便上層應(yīng)用程序使用。上層的應(yīng)用程序只需要調(diào)用系統(tǒng)DeviceIoControl()函數(shù),并在其中指定才發(fā)明的設(shè)備句柄和響應(yīng)的IO控制程序,就可以調(diào)用本發(fā)明的驅(qū)動(dòng)進(jìn)行IO操作了。本發(fā)明定義了豐富的IO控制碼,以完成各種IO控制和系統(tǒng)狀態(tài)查詢,IO控制碼定義如下IOCTL_EZDSK_GET_PIPE_INFO獲取本發(fā)明的所有傳輸管道信息IOCTL_EZDSK_GET_DEVICE_DESCRIPTOR獲取設(shè)備描述表信息IOCTL_EZDSK_GET_CONFIGURATION_DESCRIPTOR獲取設(shè)備配置表信息IOCTL_EZDSK_BULK_WRITE批傳輸?shù)膶?xiě)操作IOCTL_EZDSK_BULK_READ批傳輸?shù)淖x操作IOCTL_EZDSK_VENDOR_REQUEST獲取廠商信息IOCTL_EZDSK_GET_CURRENT_CONFIG獲取當(dāng)前配置IOCTL_EZDSK_DOWNLOAD向本發(fā)明下載可執(zhí)行程序IOCTL_EZDSK_GET_STRING_DESCRIPTOR獲取字符描述表信息IOCTL_EZDSK_RESET復(fù)位本發(fā)明設(shè)備IOCTL_EZDSK_GET_CURRENT_FRA_NUMBER獲取當(dāng)前幀編號(hào)本發(fā)明為上層應(yīng)用提供IO操作實(shí)現(xiàn)流程如圖12所示。程序?qū)崿F(xiàn)步驟如下1)先獲取上層調(diào)用傳遞過(guò)來(lái)的IO控制程序參數(shù);2)然后根據(jù)IO控制程序建立相應(yīng)的URP參數(shù)塊;3)最后調(diào)用底層的USB驅(qū)動(dòng)來(lái)執(zhí)行響應(yīng)的操作。上層的調(diào)用方法在完成正常工作的設(shè)備驅(qū)動(dòng)程序后,上層應(yīng)用的調(diào)用非常簡(jiǎn)單,只需要通過(guò)標(biāo)準(zhǔn)的設(shè)備IO控制函數(shù)就可以實(shí)現(xiàn)相應(yīng)的操作,函數(shù)調(diào)用規(guī)則如下BOOLDeviceIoControl(HANDLEhDevice,∥指向本發(fā)明設(shè)備的句柄DWORDdwIoControlCode,∥IO控制程序LPVOIDlpInBuffer,∥輸入數(shù)據(jù)/參數(shù)的緩沖區(qū)指針DWORDnInBufferSize,∥輸入數(shù)據(jù)/參數(shù)的緩沖區(qū)的大小LPVOIDlpOutBuffer,∥接收數(shù)據(jù)的緩沖區(qū)指針DWORDnOutBufferSize,∥接收數(shù)據(jù)的緩沖區(qū)的大小LPDWORDlpBytesReturned,∥實(shí)際接收到的數(shù)據(jù)的字節(jié)數(shù)LPOVERLAPPEDlpOverlapped∥指向一個(gè)異步操作的結(jié)構(gòu))本發(fā)明的IO端口驅(qū)動(dòng)程序EDIOSP.SYS的主要功能就是建立一個(gè)虛擬的存儲(chǔ)設(shè)備驅(qū)動(dòng)器,使用戶能夠象操作計(jì)算機(jī)中的本地硬盤(pán)一樣操作本發(fā)明。該驅(qū)動(dòng)程序的開(kāi)發(fā)與USB的正常工作的設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)流程類似,只需要按照DDK中編寫(xiě)存儲(chǔ)設(shè)備驅(qū)動(dòng)程序的WDM模板編寫(xiě)即可。端口驅(qū)動(dòng)程序除完成虛擬存儲(chǔ)設(shè)備驅(qū)動(dòng)外,其最重要的功能仍然是本發(fā)明的IO操作的實(shí)現(xiàn)。其主要內(nèi)容是實(shí)現(xiàn)本發(fā)明的文件系統(tǒng)。本發(fā)明的文件系統(tǒng)包括文件系統(tǒng)的定義和文件系統(tǒng)的操作本發(fā)明的文件系統(tǒng)的定義如下1)本文件系統(tǒng)定義文件存儲(chǔ)的基本單位為16KB。2)整張盤(pán)由一個(gè)引導(dǎo)塊和后續(xù)的數(shù)據(jù)塊組成;3)引導(dǎo)塊是從第0塊開(kāi)始,所找到的第1個(gè)非壞的物理塊。為了提高效率,規(guī)定引導(dǎo)塊只能位于前10個(gè)物理塊內(nèi)。這樣,如果前10個(gè)物理塊都是壞的,那么這張盤(pán)將無(wú)法用于本文件系統(tǒng);引導(dǎo)塊的數(shù)據(jù)結(jié)構(gòu)如表3所示表34)由于Flash上難免存在壞掉的物理塊,所以本文件系統(tǒng)采取了能繞過(guò)壞塊存儲(chǔ)文件的設(shè)計(jì);文件在盤(pán)上連續(xù)存儲(chǔ),每一個(gè)文件由一系列連續(xù)的物理塊組成。其中可能有壞塊,但文件系統(tǒng)在訪問(wèn)時(shí)會(huì)根據(jù)壞塊映像來(lái)自動(dòng)跳過(guò)這些壞塊。例如,一個(gè)文件的文件頭和數(shù)據(jù)加起來(lái)本來(lái)應(yīng)該占用n個(gè)塊,該文件的存放起始?jí)K地址為a,那么該文件應(yīng)該占用從第a塊到第a+n-1塊共n個(gè)物理塊的區(qū)間。但是如果在此區(qū)間內(nèi)有壞塊,那么此區(qū)間將往后延伸,直到區(qū)間內(nèi)所有的好塊剛好能放下此文件。這樣,如果該文件占用了從第a塊到第a+n-1+t塊的區(qū)間,說(shuō)明在此區(qū)間內(nèi)有t個(gè)壞塊;5)存放文件的第一個(gè)塊的第1頁(yè)共512字節(jié)的空間用于存放文件頭,從第2頁(yè)開(kāi)始才是文件本身的數(shù)據(jù)。這樣,如果一個(gè)文件在PC主機(jī)上的大小為m個(gè)字節(jié),那么在盤(pán)上將占用(m+512-1)/16K+1個(gè)好塊;文件頭的數(shù)據(jù)結(jié)構(gòu)如表4表420)由于“連續(xù)讀”的問(wèn)題,每片F(xiàn)lash的最后1個(gè)物理塊在本文件系統(tǒng)中不采用。所以16MB的盤(pán)實(shí)際上可用1023個(gè)物理塊,而32MB的盤(pán)實(shí)際上可用2046個(gè)物理塊。21)為了提高訪問(wèn)速度,在本發(fā)明接入的時(shí)候,驅(qū)動(dòng)程序?qū)⒃赑C主機(jī)的內(nèi)存中創(chuàng)建本發(fā)明的引導(dǎo)分區(qū)的映象;知道用戶的操作需要修改引導(dǎo)分區(qū)的信息,驅(qū)動(dòng)程序才會(huì)更新Flash中的引導(dǎo)分區(qū)表。22)本發(fā)明支持長(zhǎng)文件名,多級(jí)目錄;文件名和目錄信息均存放在文件頭的文件名稱字符串中。23)體交叉存儲(chǔ)方式的文件系統(tǒng)和正常方式的文件系統(tǒng)基本一致,主要的區(qū)別就是每一片F(xiàn)lash均存在一個(gè)獨(dú)立的文件系統(tǒng),而每個(gè)文件均分割成兩個(gè)獨(dú)立的文件存放。文件系統(tǒng)提供給用戶的操作主要包括本發(fā)明格式化,文件的寫(xiě)入,文件的讀取,文件的刪除,文件的重命名操作和本發(fā)明的碎片整理操作。格式化操作的主要功能就是重新建立本發(fā)明的文件系統(tǒng),在本發(fā)明初次使用的時(shí)候,以及文件系統(tǒng)意外損壞的情況下,需要進(jìn)行格式化操作。格式化操作將擦除Flash中的所有數(shù)據(jù)。本發(fā)明格式化操作的流程非常簡(jiǎn)單,首先識(shí)別是否可以建立體交叉文件系統(tǒng)(通過(guò)硬件電路識(shí)別存儲(chǔ)器的個(gè)數(shù)),然后擦除Flash,檢測(cè)Flash的失效塊,最后寫(xiě)入文件系統(tǒng)。本發(fā)明的文件寫(xiě)入操作包括普通寫(xiě)入和體交叉寫(xiě)入兩種操作本發(fā)明的普通寫(xiě)入方法步驟如下1)查詢本發(fā)明的引導(dǎo)分區(qū)映象,獲取可用的存儲(chǔ)空間和起始地址;2)按文件系統(tǒng)修改引導(dǎo)分區(qū)中的存儲(chǔ)空間占用信息;3)將文件頭和數(shù)據(jù)按照文件系統(tǒng)的格式寫(xiě)入Flash體交叉的寫(xiě)入和普通寫(xiě)入過(guò)程基本類似,主要的區(qū)別在于體交叉存儲(chǔ)前需要將待存儲(chǔ)文件順序分割為兩部分,分別作為獨(dú)立的文件存入不同F(xiàn)lash中。注意,由于Flash可能隨機(jī)存在失效塊,文件分割成的兩部分的大小可能不一樣,分割的原則是盡量相等,因?yàn)檫@樣的存入效率最高。而發(fā)送數(shù)據(jù)的時(shí)候則需要對(duì)分割好的文件進(jìn)行交叉發(fā)送。體交叉寫(xiě)入流程圖如圖13所示,實(shí)現(xiàn)步驟如下1)進(jìn)入體交叉存儲(chǔ)例程盾,首先檢查Flash剩余的連續(xù)空間是否足夠存放當(dāng)前的文件;如果最大的連續(xù)空間不夠存放當(dāng)前的文件,但是剩余的物理空間足夠,則需要進(jìn)行碎片整理;如果整理完后的連續(xù)空間仍然不夠,則表示又產(chǎn)生了一些新的無(wú)效塊,然后返回空間不足的錯(cuò)誤,退出;2)如果第一次檢查后發(fā)現(xiàn)剩余連續(xù)空間足夠,或者碎片整理完后,空間足夠存放當(dāng)前文件,則開(kāi)始分割文件;3)將文件按盡量相等地原則順序的分割為2部分,并開(kāi)始以頁(yè)為單位發(fā)送數(shù)據(jù)4)發(fā)送時(shí)交替發(fā)送分割后的文件1和2的數(shù)據(jù),直到發(fā)送完畢由于本發(fā)明在接入PC進(jìn)行初始化的時(shí)候,驅(qū)動(dòng)程序?qū)⒆詣?dòng)掃描本發(fā)明的引導(dǎo)分區(qū)和所有文件的文件頭,并在PC的內(nèi)存中建立本發(fā)明文件位置的映象。因此文件的讀取只需要簡(jiǎn)單的向本發(fā)明發(fā)送起始地址,順序讀入文件的內(nèi)容即可。讀取操作也分為體交叉讀和普通讀,體交叉讀和普通讀入操作的區(qū)別很小,唯一不同的是體交叉讀需要進(jìn)行兩次讀操作,先讀完位于Flash1中的文件,然后讀取位于Flash2中的文件,最后將讀到的兩個(gè)文件簡(jiǎn)單的合并即可。文件的刪除操作實(shí)際上只需要釋放本發(fā)明的引導(dǎo)分區(qū)中該文件占用的塊信息即可。文件的重命名操作只需要更新文件頭中的文件名稱即可。本發(fā)明的碎片整理是將重新安排本發(fā)明上所有文件的位置,使文件之間不存在空閑區(qū)域。本實(shí)施例的主要性能參數(shù)如表5所示表5<tablesid="table7"num="007"><table>外形尺寸80mm×22mm×12mm存儲(chǔ)容量8MB-512MB不等最大傳輸速率寫(xiě)入4Mbps-6Mbps,讀出6Mbps-8MbpsPC主機(jī)操作系統(tǒng)Win95/Win98/Win2000存儲(chǔ)器壽命擦寫(xiě)周期大于1000,000次</table></tables>權(quán)利要求1.一種通用串行總線接口的大容量移動(dòng)存儲(chǔ)器,其特征在于,包括由硬件電路構(gòu)成的移動(dòng)存儲(chǔ)器插板,嵌入PC主機(jī)端的控制軟件和PC主機(jī)端中的驅(qū)動(dòng)程序兩部分組成;其中,移動(dòng)存儲(chǔ)器插板包括微處理器CPU及與其相連的兩個(gè)Flash存儲(chǔ)器、一個(gè)備選EEPROM存儲(chǔ)器、與PC主機(jī)進(jìn)行連接的USB接口,通過(guò)微處理器CPU的晶振輸入管腳為其提供工作脈沖的晶振,供給所說(shuō)的CPU、Flash存儲(chǔ)器或EEPROM電壓的電源,所說(shuō)的Flash存儲(chǔ)器通過(guò)數(shù)據(jù)總線以及CPU的IO端口和CPU進(jìn)行連接;所說(shuō)的備選EEPROM存儲(chǔ)器通過(guò)I2C總線和CPU相連;所說(shuō)的嵌入PC主機(jī)端的控制軟件由系統(tǒng)狀態(tài)機(jī),USB協(xié)議棧和Flash的IO驅(qū)動(dòng)程序組成;所說(shuō)的PC主機(jī)中的驅(qū)動(dòng)程序由下載代碼的驅(qū)動(dòng)程序,正常工作的設(shè)備驅(qū)動(dòng)程序和IO端口驅(qū)動(dòng)程序組成。2.一種用于如權(quán)利要求1所述移動(dòng)存儲(chǔ)器的實(shí)現(xiàn)方法,其特征在于,所說(shuō)的狀態(tài)機(jī)的實(shí)現(xiàn)方法包括(1)定義狀態(tài)1)空閑狀態(tài)(Idle),CPU沒(méi)有任務(wù)在執(zhí)行;2)查詢狀態(tài)(Quest),CPU對(duì)PC的查詢命令進(jìn)行響應(yīng);3)Flash擦除狀態(tài)(Erase),CPU執(zhí)行Flash的擦除操作;4)Flash讀狀態(tài)(Read),CPU執(zhí)行讀Flash的操作;5)Flash寫(xiě)狀態(tài)(Write),CPU執(zhí)行寫(xiě)Flash的操作;(2)定義2個(gè)操作1)清除當(dāng)前狀態(tài)操作(Clear),CPU強(qiáng)制退出當(dāng)前狀態(tài),返回空閑狀態(tài);2)復(fù)位操作(Reset),在任何狀態(tài)下,CPU均執(zhí)行系統(tǒng)復(fù)位功能;(3)實(shí)現(xiàn)狀態(tài)機(jī)狀態(tài)的轉(zhuǎn)換,如圖4所示,包括以下步驟1)狀態(tài)機(jī)的擦除、讀和寫(xiě)入狀態(tài)只能從空閑狀態(tài)下進(jìn)入;2)查詢狀態(tài)可以在任何狀態(tài)下進(jìn)入;3)空閑狀態(tài)下,收到Erase命令,則進(jìn)入擦除狀態(tài);其他狀態(tài)下均不能進(jìn)入擦除狀態(tài);執(zhí)行完Erase命令后,返回空閑狀態(tài);4)空閑狀態(tài)下,收到Read命令,則進(jìn)入讀取狀態(tài);其他狀態(tài)下均不能進(jìn)入讀取狀態(tài);執(zhí)行完Read命令后,返回空閑狀態(tài);5)空閑狀態(tài)下,收到Write命令,則進(jìn)入寫(xiě)入狀態(tài);其他狀態(tài)下均不能進(jìn)入寫(xiě)入狀態(tài);執(zhí)行完Write命令后,返回空閑狀態(tài);6)在空閑狀態(tài)、擦除狀態(tài)、讀狀態(tài)和寫(xiě)入狀態(tài),如果收到Quest命令,立刻進(jìn)入查詢狀態(tài),直到執(zhí)行完查詢操作后,返回進(jìn)入查詢狀態(tài)前的狀態(tài);7)狀態(tài)機(jī)的各個(gè)狀態(tài)之間的設(shè)置互斥機(jī)制,即只要當(dāng)前的狀態(tài)沒(méi)有結(jié)束(包括自然結(jié)束和強(qiáng)制結(jié)束),那么狀態(tài)機(jī)就不能夠進(jìn)行狀態(tài)切換?;コ鈾C(jī)制是保證每次讀寫(xiě)操作完整性和正確性的基本保障。3.如權(quán)利要求2所述的方法,其特征在于,所說(shuō)的互斥機(jī)制采用令牌方法,具體包括如下步驟1)PC端程序在需要進(jìn)行某個(gè)操作(如讀、寫(xiě)、擦等),在進(jìn)入某個(gè)狀態(tài)之前,必須通過(guò)命令管道,向本發(fā)明發(fā)送一個(gè)Quest命令,申請(qǐng)操作令牌;2)本存儲(chǔ)器插板收到Quest命令,立刻返回當(dāng)前的令牌屬性,即屬于那個(gè)狀態(tài);3)PC端程序需要檢查令牌的屬性,如果當(dāng)前操作令牌數(shù)Idel狀態(tài),那么PC端程序有權(quán)申請(qǐng)操作令牌,否則PC端程序必須等待,直至令牌屬性為Idel;4)如果PC端檢測(cè)到本存儲(chǔ)器插板返回的令牌屬性為Idel,那么程序需要再次通過(guò)命令管道向本存儲(chǔ)器插板遞交需要執(zhí)行的操作,同時(shí)申請(qǐng)操作令牌;5)本存儲(chǔ)器插板收到該申請(qǐng)后,檢查資源,核對(duì)當(dāng)前令牌,如果符合資源足夠,且當(dāng)前狀態(tài)是Idel時(shí),就按申請(qǐng)的操作進(jìn)行狀態(tài)切換,并置令牌屬性;6)PC端程序遞交操作申請(qǐng)后,為確保申請(qǐng)成功,每次操作前仍需要執(zhí)行一次Quest命令,確認(rèn)當(dāng)前令牌屬性屬于自己。4.一種用于如權(quán)利要求1所述移動(dòng)存儲(chǔ)器的實(shí)現(xiàn)方法,其特征在于,所說(shuō)的程序自動(dòng)下載的實(shí)現(xiàn)方法,包括以下步驟1)所說(shuō)的存儲(chǔ)器插板接入U(xiǎn)SB總線的時(shí)候,PC主機(jī)將向之發(fā)送獲取描述表命令,要求USB設(shè)備返回設(shè)備號(hào)和廠商號(hào);2)該存儲(chǔ)器插板首先返回初始化設(shè)備的生產(chǎn)廠商ID,產(chǎn)品ID;3)PC主機(jī)獲取本存儲(chǔ)器插板的初始設(shè)備ID后,將在PC主機(jī)操作系統(tǒng)的USB設(shè)備驅(qū)動(dòng)庫(kù)中查找對(duì)應(yīng)于上述ID的設(shè)備驅(qū)動(dòng),并加載;4)PC主機(jī)操作系統(tǒng)一旦加載該存儲(chǔ)器插板的下載程序的驅(qū)動(dòng),該程序立刻通過(guò)該存儲(chǔ)器插板初始化設(shè)備提供的數(shù)據(jù)管道向該存儲(chǔ)器插板下載可執(zhí)行程序;5)該存儲(chǔ)器插板收到下載的程序后,立刻運(yùn)行而成為該存儲(chǔ)器插板正常工作的設(shè)備;6)該存儲(chǔ)器插板產(chǎn)生一次新USB設(shè)備接入總線的信號(hào),使PC主機(jī)重新識(shí)別該存儲(chǔ)器插板;7)PC主機(jī)收到新設(shè)備接入的信號(hào),重復(fù)上述的1、2、3步驟,加載對(duì)應(yīng)于生產(chǎn)廠商ID,產(chǎn)品ID的設(shè)備驅(qū)動(dòng),該驅(qū)動(dòng)即為該存儲(chǔ)器插板正常工作時(shí)的設(shè)備驅(qū)動(dòng),從而完成程序自動(dòng)下載的過(guò)程。5.一種用于如權(quán)利要求1所述移動(dòng)存儲(chǔ)器的實(shí)現(xiàn)方法,其特征在于,乒乓緩沖區(qū)實(shí)現(xiàn)方法包括數(shù)據(jù)的發(fā)送和接收方法,其中所說(shuō)的發(fā)送數(shù)據(jù)的實(shí)現(xiàn)方法包括如下步驟1)本存儲(chǔ)器插板收到USB總線的數(shù)據(jù),立刻查詢Buffer1(緩沖區(qū)1)的標(biāo)志位,如果是空的,則將數(shù)據(jù)包寫(xiě)入Buffer1,并置該緩沖區(qū)的標(biāo)志位為l(滿),最后向PC主機(jī)發(fā)送接收成功的握手信號(hào)ACK;2)如果Buffer1是滿的,則轉(zhuǎn)而查詢Buffer2,如果Buffer2是空的,則重復(fù)和Buffer1空時(shí)同樣的操作如果Buffer2也是滿的,則表示PC主機(jī)發(fā)送的速度過(guò)快,本存儲(chǔ)器插板處理不過(guò)來(lái),則丟棄本次接收的數(shù)據(jù),并向PC主機(jī)返回接收不成功的握手信號(hào)NAK;所說(shuō)的接收數(shù)據(jù)的實(shí)現(xiàn)方法包括如下步驟1)本存儲(chǔ)器插板的微處理器首先檢查Buffer1的標(biāo)志,如果Busy1=1,表示該緩沖區(qū)接收滿了數(shù)據(jù),那么將該數(shù)據(jù)寫(xiě)入Flash,并置標(biāo)志為0(表示Buffer1為空);如果Busy1=0,表示沒(méi)有數(shù)據(jù),則直接進(jìn)入下面的操作;2)處理完Buffer1后,接著檢查Buffer2的標(biāo)志,如果有數(shù)據(jù),則寫(xiě)入Flash,然后清空標(biāo)志位;如果沒(méi)有數(shù)據(jù),則重復(fù)第一步的操作。6.一種用于如權(quán)利要求1所述移動(dòng)存儲(chǔ)器的實(shí)現(xiàn)方法,其特征在于,本發(fā)明的文件系統(tǒng)的實(shí)現(xiàn)方法包括定義、提供給用戶的操作,其中,所說(shuō)的定義如下1)文件存儲(chǔ)的基本單位為16KB;2)整張盤(pán)由一個(gè)引導(dǎo)塊和后續(xù)的數(shù)據(jù)塊組成;3)引導(dǎo)塊是從第0塊開(kāi)始,所找到的第1個(gè)非壞的物理塊;規(guī)定引導(dǎo)塊只能位于前10個(gè)物理塊內(nèi),文件在盤(pán)上連續(xù)存儲(chǔ),每一個(gè)文件由一系列連續(xù)的物理塊組成,其中可能有壞塊,但文件系統(tǒng)在訪問(wèn)時(shí)會(huì)根據(jù)壞塊映像來(lái)自動(dòng)跳過(guò)這些壞塊;存放文件的第一個(gè)塊的第1頁(yè)共512字節(jié)的空間用于存放文件頭,從第2頁(yè)開(kāi)始才是文件本身的數(shù)據(jù);這樣,如果一個(gè)文件在PC主機(jī)上的大小為m個(gè)字節(jié),那么在盤(pán)上將占用(m+512-1)/16K+1個(gè)好塊;文件頭的數(shù)據(jù)結(jié)構(gòu)為0~7B,8字節(jié),表示起始標(biāo)志“EzFile”;8~11B,4字節(jié),表示文件大小,單位字節(jié),可表示小于4GB的文件12~19B,8字節(jié),表示文件“修改時(shí)間20~23B,4字節(jié),表示文件“屬性”;24~487B,464字節(jié),表示文件名字符串,包含全目錄信息;488~507B,20字節(jié),表示文件密碼字符串;508~511B,4字節(jié),表示文件類型標(biāo)志“MP3”表示mp3文件,“PCM”表示錄音文件,“***”表示其它文件4)由于“連續(xù)讀”的問(wèn)題,每片F(xiàn)lash的最后1個(gè)物理塊在本文件系統(tǒng)中不采用;在本發(fā)明接入的時(shí)候,驅(qū)動(dòng)程序?qū)⒃赑C主機(jī)的內(nèi)存中創(chuàng)建本發(fā)明的引導(dǎo)分區(qū)的映象;知道用戶的操作需要修改引導(dǎo)分區(qū)的信息,驅(qū)動(dòng)程序才會(huì)更新Flash中的引導(dǎo)分區(qū)表5)本發(fā)明支持長(zhǎng)文件名,多級(jí)目錄;文件名和目錄信息均存放在文件頭的文件名稱字符串中;6)體交叉存儲(chǔ)方式的文件系統(tǒng)和正常方式的文件系統(tǒng)基本一致,主要的區(qū)別就是每一片F(xiàn)lash均存在一個(gè)獨(dú)立的文件系統(tǒng),而每個(gè)文件均分割成兩個(gè)獨(dú)立的文件存放。所說(shuō)的提供給用戶的操作主要包括本發(fā)明格式化,文件的寫(xiě)入,文件的讀取,文件的刪除,文件的重命名操作和碎片整理操作;所說(shuō)的格式化操作的療法為首先識(shí)別是否可以建立體交叉文件系統(tǒng),然后擦除Flash,檢測(cè)Flash的失效塊,最后寫(xiě)入文件系統(tǒng);所說(shuō)的文件寫(xiě)入操作包括普通寫(xiě)入和體交叉寫(xiě)入兩種操作方法其中,該普通寫(xiě)入方法步驟如下(1)查詢本發(fā)明的引導(dǎo)分區(qū)映象,獲取可用的存儲(chǔ)空間和起始地址;(2)按文件系統(tǒng)修改引導(dǎo)分區(qū)中的存儲(chǔ)空間占用信息;(3)將文件頭和數(shù)據(jù)按照文件系統(tǒng)的格式寫(xiě)入Flash;所說(shuō)的體交叉的寫(xiě)入方法的實(shí)現(xiàn)步驟如下(1)進(jìn)入體交叉存儲(chǔ)例程后,首先檢查Flash剩余的連續(xù)空間是否足夠存放當(dāng)前的文件;如果最大的連續(xù)空間不夠存放當(dāng)前的文件,但是剩余的物理空間足夠,則需要進(jìn)行碎片整理;如果整理完后的連續(xù)空間仍然不夠,則表示又產(chǎn)生了一些新的無(wú)效塊,然后返回空間不足的錯(cuò)誤,退出;(2)如果第一次檢查后發(fā)現(xiàn)剩余連續(xù)空間足夠,或者碎片整理完后,空間足夠存放當(dāng)前文件,則開(kāi)始分割文件;(3)將文件按盡量相等地原則順序的分割為2部分,并開(kāi)始以頁(yè)為單位發(fā)送數(shù)據(jù)(4)發(fā)送時(shí)交替發(fā)送分割后的文件1和2的數(shù)據(jù),直到發(fā)送完畢所說(shuō)的讀取操作也分為體交叉讀和普通讀,該普通讀入操作進(jìn)行一次,體交叉讀進(jìn)行兩次讀操作,先讀完位于Flash1中的文件,然后讀取位于Flash2中的文件,最后將讀到的兩個(gè)文件簡(jiǎn)單的合并;所說(shuō)的文件的刪除操作為釋放所說(shuō)的引導(dǎo)分區(qū)中該文件占用的塊信息;所說(shuō)的文件的重命名操作為更新文件頭中的文件名稱;所說(shuō)的碎片整理是將重新安排所有文件的位置,使文件之間不存在空閑區(qū)域。全文摘要本發(fā)明屬于計(jì)算機(jī)
技術(shù)領(lǐng)域:
,包括由硬件電路構(gòu)成的移動(dòng)存儲(chǔ)器插板,嵌入PC主機(jī)端的控制軟件和PC主機(jī)端中的驅(qū)動(dòng)程序兩部分組成;其中,移動(dòng)存儲(chǔ)器插板包括微處理器CPU及與其相連的兩個(gè)Flash存儲(chǔ)器、一個(gè)備選EEPROM存儲(chǔ)器、與PC主機(jī)進(jìn)行連接的USB接口,晶振及電源。本發(fā)明大大提高了USB接口的傳輸速度和數(shù)據(jù)的存儲(chǔ)速度;且對(duì)數(shù)據(jù)的傳輸和攜帶具有可靠、方便攜式而廉價(jià)的優(yōu)點(diǎn)。文檔編號(hào)G06F13/38GK1299096SQ0110054公開(kāi)日2001年6月13日申請(qǐng)日期2001年1月12日優(yōu)先權(quán)日2001年1月12日發(fā)明者常促宇申請(qǐng)人:常促宇