專利名稱:通用串行總線架構快閃存儲器儲存裝置的制作方法
技術領域:
本發(fā)明涉及一種存儲器,尤其是可以通過通用串行總線架構(USB)連接的一種通用串行總線架構快閃存儲器儲存裝置。
快閃存儲器為非揮發(fā)性的,這表示即使電源被關閉了它還是保有已儲存的數(shù)據(jù),這比標準的隨機存取存儲器(RAM)更加進步,而隨機存取存儲器為揮發(fā)性的,因此當電源被關閉時,就會遺失已儲存的數(shù)據(jù)。
隨著可移動型、便攜式或掌上型裝置的增加,快閃存儲器也逐漸受到青睞,最普遍的快閃存儲器類型為可移除式的存儲器卡,此種存儲器卡讓快閃存儲器的內(nèi)容得以輕易地在電子裝置或電腦之間進行傳輸。
然而,在電子裝置之間移動快閃存儲器時需要額外的匯流排介面或轉(zhuǎn)接器,以便讓主機得以和快閃存儲器卡進行通訊,許多電子裝置可能沒有內(nèi)建與快閃存儲器卡連接的能力,因此就必須在主機內(nèi)安裝一個特殊的轉(zhuǎn)接器或卡,除此之外,其匯流排的結構便可能會限制主機和快閃存儲器儲存裝置之間數(shù)據(jù)的傳輸速度。
因此,人們需要一個可以不需特殊纜線或轉(zhuǎn)接器就可以直接與主機連接的快閃存儲器儲存裝置。
通用串行總線架構(以下簡稱為USB)已成為標準的序列介面,它讓數(shù)據(jù)得以快速地儲存于USB快閃存儲器儲存裝置以及快速地從快閃存儲器儲存裝置中讀取數(shù)據(jù),因此,結合快閃存儲器儲存裝置的優(yōu)點以及USB的速度將非常有利,除此之外,通過設計搭配USB介面的快閃存儲器儲存裝置,可使快閃存儲器儲存裝置成為標準的USB儲存裝置,來讓主機和快閃存儲器儲存裝置可以輕易地相連和互動。
為實現(xiàn)上述目的,本發(fā)明的通用串行總線架構快閃存儲器儲存裝置,至少包含有一個通用串行總線架構連接器,用以將快閃存儲器儲存裝置連接至具通用串行總線架構連接器的主機;至少一個快閃存儲器模組或陣列以儲存數(shù)據(jù);及一個控制器,用以控制主機和快閃存儲器儲存裝置之間的命令和數(shù)據(jù),以及管理至少一快閃存儲器模組中的數(shù)據(jù)。
具體而言,快閃存儲器儲存裝置的主電路板包含了一個控制器以及至少一個快閃存儲器,而USB連接器將快閃存儲器儲存裝置與具USB的主機相連接,主電路板上的快閃存儲器至少包含了一個快閃存儲器晶片,如上所述,此快閃存儲器儲存裝置的存儲器容量可以輕易地擴展。
控制器為裝置的一項主要組件,此控制器控制了快閃存儲器儲存快閃存儲器儲存裝置與主機之間的命令和數(shù)據(jù),并管理快閃存儲器陣列或模組中的數(shù)據(jù),控制器最好是一個不需要隨機存取存儲器(RAM)或只讀存儲器(ROM)的單晶片設計。
本發(fā)明還包括調(diào)節(jié)器為可調(diào)節(jié)快閃存儲器儲存裝置的電壓,一般而言,快閃存儲器需要3.3伏特或5.0伏特電壓,一些快閃存儲器儲存裝置通過切換的方式視快閃存儲器的需要在3.3伏特或5.0伏特之間進行切換,然而,本發(fā)明的快閃存儲器儲存裝置的一項優(yōu)點為此快閃存儲器儲存裝置只需要3.3伏特,因此,不論主機發(fā)出的是5.0伏特或是3.3伏特,調(diào)節(jié)器都會確保電壓為3.3伏特供USB收發(fā)器使用,而不需要進行偵測和轉(zhuǎn)換電壓。
時脈產(chǎn)生器,如結晶,為針對快閃存儲器儲存裝置的控制器產(chǎn)生了一個時脈信號。
本發(fā)明具體表現(xiàn)的快閃存儲器儲存裝置為進一步地包含了一個指示器(例如LED指示器),用以指示存儲器儲存裝置的狀態(tài)為使用中或待機狀態(tài)。
快閃存儲器儲存裝置的主電路板也可以有一個機架連接器,用以連接附屬電路板與主電路板,以便利用快閃存儲器陣列來延伸存儲器大小,而附屬電路板至少包含一個額外的快閃存儲器模組或陣列,它也可以連接多個附屬電路板,以便無限地擴展存儲器使用。
寫入保護開關為一個防止主機寫入數(shù)據(jù)的開關,此開關至少有兩個位置,一個讓主機正常地可以讀取和寫入,另一個位置則是防護寫入,當開關位于寫入防護的位置時,主機就只能讀取數(shù)據(jù),但無法寫入或擦除數(shù)據(jù)。
本發(fā)明的快閃存儲器儲存裝置的控制器具有無數(shù)的功能,這些功能中有一項為控制USB介面,控制器在實體和邏輯協(xié)定方面遵照USB規(guī)范,控制器進一步包含了一個FIFO控制器緩沖區(qū),使控制器接收來自具USB的主機的命令和參數(shù)進行封包,此封包隨后被儲存在一個由控制器定義的特殊暫存器中,而控制器同時也負責控制與主機之間的數(shù)據(jù)傳輸,除此之外,控制器亦提供狀態(tài)數(shù)據(jù)給主機。
當主機發(fā)出一個寫入命令時,就會產(chǎn)生岔斷并發(fā)送給控制器及微處理器,以便通知微處理器該項命令以及命令的位置,該微處理器(例如一個8或16-bit的微處理器)為控制器的一項主要組件,而微處理器從暫存器中讀取USB的命令和參數(shù),此外,而微處理器也執(zhí)行具參數(shù)的命令,微處理器一方面管理和映射USB FIFO地址至控制器緩沖區(qū),一方面接收來自具USB的主機的數(shù)據(jù)以及將數(shù)據(jù)傳輸至主機上,此外,微處理器也為快閃存儲器陣列管理,例如擦除、程序或讀取等命令,除此之外,微處理器也依據(jù)控制器的演算法執(zhí)行地址方法。
只讀存儲器(ROM)將已內(nèi)建在控制器中的控制器程序代碼加以儲存,而微處理器控制器在執(zhí)行USB命令或快閃演算法時所使用的一個系統(tǒng)隨機存取存儲器(RAM),由于它不需要離開晶片存儲器,因此降低了系統(tǒng)的成本。
用以緩沖USB介面和快閃存儲器陣列介面的系統(tǒng)緩沖區(qū)被當成快取使用,它同時也是USB協(xié)定的FIFO以及到緩沖區(qū)的方向圖,微處理器管理此緩沖區(qū)的地址,若有需要,緩沖區(qū)可以通過位元組或文字進行存取。
本發(fā)明的快閃存儲器儲存裝置進一步地包含了一硬件狀態(tài)機器,以建立主機和快閃存儲器之間系統(tǒng)緩沖區(qū)的讀取和寫入時序,快閃介面和電路控制了到快閃存儲器陣列的讀取和寫入命令,在本發(fā)明的具體表現(xiàn)中,這是一個純硬件電路。
除此之外,當緩沖區(qū)快取的數(shù)據(jù)寫入至快閃存儲器陣列時,ECC電路將編碼ECC代碼,而當讀取快閃存儲器陣列的數(shù)據(jù)至緩沖區(qū)快取時,ECC電路則將ECC代碼解碼,若發(fā)生ECC錯誤,ECC電路會判讀緩沖區(qū)快取中的文字或位元組并訂正錯誤。
USB命令實際包含了接收主機的命令和參數(shù)的控制器,并將命令和參數(shù)儲存于控制器所定義的暫存器中,并且會產(chǎn)生和發(fā)出岔斷,以通知微處理器已接收到命令。
控制器依據(jù)USB邏輯和實體規(guī)范來接收主機的數(shù)據(jù)以及將數(shù)據(jù)發(fā)送給主機,地址方法包含了管理快閃存儲器的擦除、讀取和寫入命令以及管理實體至邏輯的映射。
當主機將命令和參數(shù)寫入存儲器儲存裝置中時,控制器會將其儲存在一特定的暫存器中,數(shù)據(jù)隨后會被微處理器讀取為來自主機的信息,根據(jù)標準的USB規(guī)范,要求參數(shù)為包含了7個位元,BmRequestType D6-D5位元指定了命令協(xié)定的類型,種類包括標準、等級以及廠商,本發(fā)明的快閃存儲器儲存裝置這三種類型的協(xié)定都支援,標準型為標準的裝置要求,這是普通的命令,如USB_Get_Status or USB_set_Feature等。
本發(fā)明的快閃存儲器儲存裝置在具體形式上利用了搭配bulk/控制/岔斷傳輸?shù)腢SB mass storage class。
由于快閃存儲器實體上的限制,在執(zhí)行寫入命令之前必須先執(zhí)行擦除命令,一般的快閃存儲器需經(jīng)過大的100萬次的擦除之后才可以正常運作,所以,減少擦除的步驟以延長快閃存儲器的使用壽命是非常重要的,因此,本發(fā)明提供了一個邏輯和實體地址映射表,以及一個母/子架構來達到此項目標。
以下是邏輯和實體地址映射表的使用說明,當啟動快閃存儲器時,所有的區(qū)塊都會被搜尋,而搜尋到的實體和邏輯區(qū)塊之間的關系記錄就會成為連絡表,與此同時,未使用的實體區(qū)塊則放入備用區(qū)塊讓FIFO隊列使用,接著,邏輯和實體地址映射表中的邏輯區(qū)塊會被用來尋找對應的實體區(qū)塊地址,如此一來,就可以精確地寫入或擷取與特定實體區(qū)塊相關連的數(shù)據(jù)了。
將數(shù)據(jù)寫入快閃存儲器時,可能需要一個經(jīng)過擦除的區(qū)塊(新的區(qū)塊)來取代舊區(qū)塊,然后將數(shù)據(jù)寫入新的區(qū)塊中,最后將未曾更改過的數(shù)據(jù)從舊區(qū)塊移至新區(qū)塊,這個步驟完成了寫入一頁數(shù)據(jù)的動作。
若有好幾頁數(shù)據(jù)持寫入的話,就會重復以上的步驟,然而,如果數(shù)據(jù)不斷重復地寫入同一區(qū)塊中的話,就會產(chǎn)生許多不必要的擦除和遷移動作,此舉不僅浪費時間,同時也會縮短快閃存儲器的使用壽命,因此,在本發(fā)明的快閃存儲器儲存裝置中,當數(shù)據(jù)重復地寫入同一區(qū)塊時,它會避免擦除的動作,而遷移動作也只有在更換區(qū)塊時才會執(zhí)行,使用此種方法不僅延長了快閃存儲器的壽命,同時也提高了快閃存儲器儲存裝置的效率。
以下是一個寫入數(shù)據(jù)范例,需將32個小區(qū)塊(sector)的數(shù)據(jù)寫入以0/0區(qū)塊/頁開始的快閃存儲器中,總實體區(qū)塊/邏輯區(qū)塊為I024/992,F(xiàn)IFO的總備用區(qū)塊為32個,無一區(qū)塊有瑕疵,每一區(qū)塊有32頁,起始指標(Headpointer)所指的子區(qū)塊03E0h取自FIFO備用區(qū)域,然后,起始指標會增加,而32頁的數(shù)據(jù)則寫入子區(qū)塊中,將子區(qū)塊第03E0h填入邏輯和實體地址映射表中母區(qū)塊的邏輯區(qū)塊地址0000h中,母區(qū)塊0000h被擦除掉而尾端指標增加,然后,母區(qū)塊第0000h則填入備用區(qū)域中的尾端指標所指的地址中。
以下是依據(jù)本發(fā)明具體形式的寫入程序敘述。
主機將對應的寫入命令和地址參數(shù)寫入快閃存儲器儲存裝置中,快閃存儲器儲存裝置隨后開始執(zhí)行程序快閃演算法,然后,主機的邏輯地址會被轉(zhuǎn)換成快閃存儲器實體區(qū)塊和頁區(qū)塊,控制器會檢查子區(qū)塊是否存在。
如果子區(qū)塊不存在的話,它會從FIFO隊列中取出一個干凈的區(qū)塊為現(xiàn)有的寫入?yún)^(qū)塊建立一個子區(qū)塊,然后檢查現(xiàn)有的快閃存儲器邏輯頁碼,看待寫入的是否等于「0」,若等于「0」,從主機至快閃存儲器的數(shù)據(jù)就會寫入緩沖區(qū),而小區(qū)塊的計數(shù)會減少,此程序會一直重復直到小區(qū)塊計數(shù)等于「0」為止,若待寫入的不等于「0」時,母區(qū)塊(干凈的)的數(shù)據(jù)就會移至「寫入的最后一頁」和「現(xiàn)有寫入頁」之間的子區(qū)塊上,然后,從主機至快閃存儲器的數(shù)據(jù)會寫入緩沖區(qū)中,而小區(qū)塊的計數(shù)會減少,此程序會一直重復直到小區(qū)塊計數(shù)等于「0」為止。
如果子區(qū)塊存在的話,就會檢查現(xiàn)有快閃存儲器的邏輯區(qū)塊,看待寫入的是否等于最后一個寫入的快閃存儲器邏輯區(qū)塊,若不相等,母區(qū)塊的數(shù)據(jù)就會移至寫入的最后一頁和「此區(qū)塊的最后一頁」之間的子區(qū)塊,然后再將母區(qū)塊擦除,更新控制器中的邏輯和實體地址映射表,以子區(qū)塊地址代替原有的母區(qū)塊地址,然后,將被擦除的母區(qū)塊放回FIFO隊列中成為干凈的區(qū)塊,若待寫入的等于最后一個寫入的快閃存儲器邏輯區(qū)塊的話,就會檢查現(xiàn)有的快閃存儲器邏輯頁碼,看待寫入的是否大于最后一個寫入的快閃存儲器頁,若大于,將檢查現(xiàn)有的寫入頁碼,看它是否等于所寫的最后一頁加1,若是,從主機至快閃存儲器的數(shù)據(jù)就會寫入緩沖區(qū),而小區(qū)塊的計數(shù)會減少,此程序會一直重復直到小區(qū)塊計數(shù)等于「0」為止,若現(xiàn)有的寫入頁碼不等于所寫的最后一頁加1時,母區(qū)塊(干凈的)的數(shù)據(jù)就會移至「寫入的最后一頁和「現(xiàn)有寫入頁」之間的子區(qū)塊上。
若待寫入的不大于最后一個寫入的快閃存儲器邏輯頁時,母區(qū)塊的數(shù)據(jù)就會被移至「寫入的最后一頁」和「此區(qū)塊的最后一頁」之間的子區(qū)塊,然后再將母區(qū)塊擦除,更新控制器中的邏輯和實體地址映射表,以子區(qū)塊地址代替原有的母區(qū)塊地址,然后,將被擦除的母區(qū)塊放回FIFO隊列中成為干凈的區(qū)塊。
若持寫入的大于最后一個寫入的快閃存儲器邏輯頁時,母區(qū)塊的數(shù)據(jù)就會被移至「寫入的最后一頁」和「現(xiàn)有寫入頁」之間的子區(qū)塊,從主機至快閃存儲器的數(shù)據(jù)就會寫入緩沖區(qū),而小區(qū)塊的計數(shù)會減少,數(shù)據(jù)會寫入直到小區(qū)塊計數(shù)等于「0」為止。
至于依據(jù)本發(fā)明具體形式的快閃存儲器儲存裝置讀取程序方面,主機的邏輯地址會被轉(zhuǎn)換成快閃存儲器實體區(qū)塊和頁地址,然后,檢查現(xiàn)有的快閃存儲器邏輯區(qū)塊,看待讀取是否等于最后一個被讀取的快閃存儲器邏輯區(qū)塊,若不是的話,快閃存儲器實體區(qū)塊和頁的數(shù)據(jù)就會被讀取,而小區(qū)塊的計數(shù)就會減少,此程序會一直重復直到小區(qū)塊計數(shù)等于「0」為止,若待讀取的等于最后一個被讀取到的快閃存儲器邏輯區(qū)塊的話,它會檢查現(xiàn)有的快閃存儲器邏輯頁,看待讀取的是否大于最后一個寫入的快閃存儲器邏輯頁。
若是,快閃存儲器實體區(qū)塊和頁的數(shù)據(jù)就會被讀取,而小區(qū)塊計數(shù)就會減少,此程序會一直重復直到小區(qū)塊計數(shù)等于「0」為止,若待讀取的不大于最后一個寫入的快閃存儲器邏輯頁的話,子區(qū)塊實體區(qū)塊和頁的數(shù)據(jù)就會被讀取,而小區(qū)塊計數(shù)就會減少,此程序會一直重復直到小區(qū)塊計數(shù)等于「0」為止。
當微處理器開始執(zhí)行命令時,快閃存儲器儲存裝置會從主機下載它的參數(shù),例如讀取或?qū)懭胍粡S商命令封包,系統(tǒng)會通過裝置/啟始位元組的第6個位元來判斷地址模式,本發(fā)明的快閃存儲器儲存裝置同時支援邏輯區(qū)塊地址(LBA)和圓柱體啟始小區(qū)塊(CHS)模式,若主機利用LBA模式提供地址的話,快閃存儲器儲存裝置會將它轉(zhuǎn)換成CHS模式,然后將CHS模式改成實體地址。
當快閃存儲器儲存裝置執(zhí)行讀取命令時,控制器首先會將快閃存儲器的數(shù)據(jù)一個小區(qū)塊一個小區(qū)塊的讀取到控制器的緩沖區(qū)(512位元組)中,然后USB引擎會將小區(qū)塊送至主機,當送至主機的小區(qū)塊數(shù)量等于主機欲讀取的小區(qū)塊數(shù)目時,整個命令就完成了。
當快閃存儲器儲存裝置執(zhí)行寫入命令時,控制器會通過USB引擎將主機的數(shù)據(jù)一個小區(qū)塊一個小區(qū)塊的讀取到控制器的緩沖區(qū)(512位元組),然后此小區(qū)塊就會被儲存在快閃存儲器中,當送至快閃存儲器的小區(qū)塊數(shù)量等于主機欲寫入的小區(qū)塊數(shù)目時,整個命令就完成了。
快閃存儲器儲存裝置可以支援一個以上的快閃存儲器,本發(fā)明中提供了多個晶片選取腳,當啟動快閃存儲器儲存裝置時,它會檢查板上所使用的快閃存儲器類型(容量),以及系統(tǒng)有多少個晶片,快閃存儲器儲存裝置會將所有的存儲器晶片加起來,找出總容量,當主機需要這一類的數(shù)據(jù)時,快閃存儲器儲存裝置就會提供總容量給主機,而不是單一晶片的容量。
當主機發(fā)出某一地址(邏輯)給快閃存儲器儲存裝置時,快閃存儲器儲存裝置會執(zhí)行計算,找出主機想要的存取的確切晶片,以及對應的地址,然后,快閃存儲器儲存裝置會使用計算出來的地址,并啟動晶片選取腳。
圖1A依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置布局示意圖;圖1B依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置中附屬電路板布局示意圖;圖2依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置控制器示意圖;圖3依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置的系統(tǒng)架構區(qū)塊示意圖;圖4依據(jù)本發(fā)明具體形式顯示出來的各式各樣作業(yè)系統(tǒng)的USB協(xié)定應用流程示意圖;圖5依據(jù)本發(fā)明具體形式顯示出來實作于快閃存儲器儲存裝置中USB協(xié)定的表列參數(shù);圖6依據(jù)本發(fā)明具體形式顯示出來快閃存儲器儲存裝置的寫入程序流程;圖7依據(jù)本發(fā)明具體形式顯示出來快閃存儲器儲存裝置的讀取程序流程;圖8依據(jù)本發(fā)明具體形式顯示出來將數(shù)據(jù)寫入新區(qū)塊的區(qū)塊示意圖;圖9依據(jù)本發(fā)明具體形式顯示出來寫入額外頁次的數(shù)據(jù)的區(qū)塊示意圖;圖10依據(jù)本發(fā)明具體形式顯示母和子技術的區(qū)塊示意圖;圖11依據(jù)本發(fā)明具體形式顯示邏輯和實體地址映射表的示意圖;圖12依據(jù)本發(fā)明具體形式顯示起始指標和尾端指標作業(yè)的示意圖;圖13依據(jù)本發(fā)明具體形式顯示未寫入之前的邏輯和實體地址映射表示意圖;圖14依據(jù)本發(fā)明具體形式顯示起始指標和尾端指標作業(yè)的示意圖;圖15依據(jù)本發(fā)明具體形式顯示的命令封包架構示意圖。
具體實施例方式
特此說明,前文的一般敘述以及以下的詳細敘述皆為范例,并且將進一步解釋所述的發(fā)明。
附圖是為了讓人們可以更加了解本發(fā)明,且編入并成為本發(fā)明的一部分,圖片具體表現(xiàn)了本發(fā)明,配合文字敘述進而解釋了發(fā)明的原理,在圖片中,優(yōu)先具體表現(xiàn)的敘述。
請參閱圖1A、1B所示,為依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置布局示意圖及附屬電路板布局示意圖,于圖中揭示快閃存儲器儲存裝置5的主電路板100包含了一個控制器40和至少一個快閃存儲器晶片50,而USB連接器10連接于快閃存儲器儲存裝置5與具USB的主機之間,且主電路板100上至少包含了一個快閃存儲器晶片50,而快閃存儲器儲存裝置5則進一步地包含了一個延伸機架連接器20,可讓附屬電路板150上的快閃存儲器120陣列或模組數(shù)量得以延伸,且延伸機架連接器20可對接于附屬電路板150上的機架連接器110,以利用機架連接器110來使快閃存儲器120陣列或模組與主電路板100上的控制器40形成連接,如此一來,快閃存儲器儲存裝置5的存儲器容量就可以視實際需要輕易地加以擴充了。
再者,其控制器40為該快閃存儲器儲存裝置5的主要組件,此控制器40控制USB與具USB的主機之間的命令和數(shù)據(jù),并管理快閃存儲器120陣列或模組中的數(shù)據(jù),而控制器40最好是一個不需要外部隨機存取存儲器(RAM)或只讀存儲器(ROM)的單晶片設計。
另,調(diào)節(jié)器90負責調(diào)節(jié)快閃存儲器儲存裝置5的電壓,一般而言,該快閃存儲器需要3.3伏特或5.0伏特的電壓,一些快閃存儲器儲存裝置5視快閃存儲器120的需要利用轉(zhuǎn)換的方式在3.3伏特或5.0伏特之間進行切換,然而,本發(fā)明的快閃存儲器儲存裝置5的一項優(yōu)點為此快閃存儲器儲存裝置5只需要3.3伏特,因此,不論主機發(fā)出的是5.0伏特或是3.3伏特,其調(diào)節(jié)器90都會確保電壓為3.3伏特供應快閃存儲器儲存裝置5使用,而不需要偵測和轉(zhuǎn)換電壓。
時脈產(chǎn)生器80,如結晶,針對快閃存儲器儲存裝置5的控制器40產(chǎn)生了一個時脈信號。
本發(fā)明具體表現(xiàn)的快閃存儲器儲存裝置5進一步地包含了一個指示器70(例如LED指示器),可指示快閃存儲器儲存裝置5的狀態(tài)為使用或待機狀態(tài)中。
快閃存儲器儲存裝置5的主電路板100也可以有一個機架連接器20,用以連接附屬電路板150與主電路板100,以便利用額外的快閃存儲器120陣列或模組依實際需要延伸存儲器大小,而附屬電路板150至少包含一個額外的快閃存儲器120陣列或模組,它也可以連接多個附屬電路板150,以便視實際需要擴展存儲器數(shù)量。
防護開關30為一個可防止主機寫入數(shù)據(jù)的開關,防護開關30至少有兩個位置,一個讓主機正常地可以進行讀取和寫入使用,另一個位置則是防止寫入,當開關30位于防止寫入的位置時,主機就只能讀取數(shù)據(jù),而無法寫入或擦除數(shù)據(jù)。
該快閃存儲器儲存裝置5進一步包含一指示器70(例如LED指示器),用以指示存儲器儲存裝置5的狀態(tài)為使用中或待機狀態(tài)。
請參閱圖2所示,為依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置控制器示意圖,本發(fā)明的快閃存儲器儲存裝置的控制器200具有無數(shù)的功能,這些功能中有一項為控制USB介面210。
上述控制器200在實體和邏輯協(xié)定方面遵照USB規(guī)范,且控制器200進一步包含了一個系統(tǒng)緩沖區(qū)250或FIFO控制器緩沖區(qū)。
控制器200接收來自主機的命令和參數(shù)封包,此封包隨后被儲存在一個由控制器200定義的系統(tǒng)緩沖區(qū)250中,而控制器200同時也負責控制與USB主機之間的數(shù)據(jù)傳輸,除此之外,控制器200亦提供狀態(tài)數(shù)據(jù)給主機。
當主機發(fā)出一個寫入命令時,就會產(chǎn)生岔斷并發(fā)送給控制器內(nèi)的微處理器220,以便通知微處理器220該項命令以及命令的位置。
微處理器220(例如一個8或16-bit的微處理器)為控制器200中的一項主要組件,此微處理器220從系統(tǒng)緩沖區(qū)250中讀取USB的命令和參數(shù),此外,微處理器220也執(zhí)行具參數(shù)的命令。
微處理器220一方面管理和映射USB FIFO地址至系統(tǒng)緩沖區(qū)250,一方面接收來自主機的數(shù)據(jù),以及將數(shù)據(jù)傳輸至主機上。
此外,微處理器220也為快閃存儲器陣列管理(例如擦除、程序或讀取等命令),除此之外,微處理器220也依據(jù)控制器200的演算法執(zhí)行地址方法。
只讀存儲器(ROM)230將已內(nèi)建在控制器200中的控制器200程序代碼加以儲存,隨機存取存儲器(RAM)240為控制器200在執(zhí)行USB命令或快閃演算法時所使用的一個系統(tǒng)隨機存取存儲器(RAM),由于它不需要離開晶片存儲器,因此降低了系統(tǒng)的成本。
用以緩沖USB介面210和快閃存儲器陣列介面260的系統(tǒng)緩沖區(qū)250被當成快取使用,它同時也是USB協(xié)定的FIFO以及到緩沖區(qū)的方向圖,而微處理器220管理此緩沖區(qū)的地址,若有需要,緩沖區(qū)可以通過位元組或文字存取。
本發(fā)明的快閃存儲器儲存裝置進一步地包含了一硬件狀態(tài)機器,以建立主機和快閃存儲器之間系統(tǒng)緩沖區(qū)250的讀取和寫入時序。
快閃存儲器陣列介面260控制快閃存儲器陣列的讀取和寫入命令,在本發(fā)明的具體表現(xiàn)中,這是一個純硬件電路。
當系統(tǒng)緩沖區(qū)250快取的數(shù)據(jù)寫入至快閃存儲器陣列介面260時,ECC電路270將編碼ECC代碼,而當讀取快閃存儲器陣列的數(shù)據(jù)至系統(tǒng)緩沖區(qū)250快取時,ECC電路270則將ECC代碼解碼,若發(fā)生ECC錯誤,ECC電路270會判讀系統(tǒng)緩沖區(qū)250快取中的文字或位元組并訂正錯誤。
輸入/輸出控制介面280,提供系統(tǒng)需要進行其它的輸入/輸出控制。
請參閱圖3所示,為依據(jù)本發(fā)明具體形式顯示出來的快閃存儲器儲存裝置的系統(tǒng)架構區(qū)塊示意圖,在某些具USB的主機300的作業(yè)系統(tǒng)(如windows ME和Windows 2000等)中包含了預設的USB裝置驅(qū)動器,其他的作業(yè)系統(tǒng)可能需要在主機安裝一個USB裝置驅(qū)動器,而USB命令實作320包含了通過USB連接器310來接收主機300和參數(shù)控制器305的命令,并將命令和參數(shù)儲存于控制器305所定義的暫存器中,并且會產(chǎn)生和發(fā)出岔斷,以通知微處理器已接收到命令。
參數(shù)控制器305依據(jù)USB邏輯和實體規(guī)范來接收主機300的數(shù)據(jù)以及將數(shù)據(jù)發(fā)送至主機300。
地址方法330包含了管理快閃存儲器340的擦除、讀取和寫入命令,以及管理實體至邏輯的映射。
請參閱圖4所示,為依據(jù)本發(fā)明具體形式顯示出來的各式各樣作業(yè)系統(tǒng)的USB協(xié)定應用流程示意圖,當主機在步驟410將命令和參數(shù)寫入快閃存儲器儲存裝置中時,控制器會儲存在一特定的暫存器中,并在步驟420時產(chǎn)生一個岔斷至微處理器,數(shù)據(jù)隨后會在步驟430時被微處理器讀取來自主機的信息。
在步驟440中,微處理器依據(jù)參數(shù)開始執(zhí)行命令,如果命令為寫入命令,緩沖區(qū)的快取就會在步驟450收到具USB的主機的數(shù)據(jù)。
微處理器隨后在步驟460中將邏輯地址轉(zhuǎn)換至快閃存儲器的實體地址,在步驟470中,微處理器將讀取快閃存儲器的數(shù)據(jù)或是將數(shù)據(jù)寫入快閃存儲器中,如果命令為讀取命令,數(shù)據(jù)會在步驟480中傳輸至具USB的主機。
根據(jù)標準的USB規(guī)范,要求參數(shù)包含了7個位元,復請參閱圖5所示,BmRequest Type的D6-D5位元指定了命令協(xié)定的類型,其種類包括標準、等級以及廠商,本發(fā)明的快閃存儲器儲存裝置這三種類型的協(xié)定都支援,標準型為標準的裝置要求,這是普通的命令,如USB_Get_Status or USB_set_Feature等。
本發(fā)明的快閃存儲器儲存裝置在具體形式上利用了搭配bulk/控制/岔斷傳輸?shù)腢SB mass storage class。
由于快閃存儲器的實體限制,在完成寫入命令之前必須先執(zhí)行擦除命令,一般的快閃存儲器需經(jīng)過大約100萬次的擦除之后才可以正常運作,所以,減少擦除的步驟,以延長快閃存儲器的使用壽命是非常重要的,因此本發(fā)明提供了一個邏輯和實體地址映射表,以及一個母/子架構來達到此項目標。
以下是邏輯和實體地址映射表的使用說明,當啟動快閃時,所有的區(qū)塊都會被搜尋,而搜尋到的實體和邏輯區(qū)塊之間的關系記錄就會成為連絡表,于此同時,未使用的實體區(qū)塊則放入備用區(qū)塊讓FIFO隊列使用。
接著,邏輯和實體地址映射表中的邏輯區(qū)塊會被用來尋找對應的實體區(qū)塊地址,如此一來,就可以精確地寫入或擷取與特定實體區(qū)塊相關連的數(shù)據(jù)了。
請參閱圖8所示,為依據(jù)本發(fā)明具體形式顯示出來將數(shù)據(jù)寫入新區(qū)塊的區(qū)塊示意圖,將數(shù)據(jù)寫入快閃存儲器時,可能需要一個經(jīng)過擦除的區(qū)塊(新的區(qū)塊)810來取代舊區(qū)塊800,然后將數(shù)據(jù)寫入新的區(qū)塊810中,最后將未曾更改過的數(shù)據(jù)從舊區(qū)塊800移至新區(qū)塊810,這個步驟完成了寫入一頁數(shù)據(jù)的動作。
若有好幾頁數(shù)據(jù)待寫入的話,就會重復以上的步驟,請參閱圖9所示,為依據(jù)本發(fā)明具體形式顯示出來寫入額外頁次的數(shù)據(jù)的區(qū)塊示意圖,這是依據(jù)本發(fā)明具體形式顯示出來寫入額外頁次的數(shù)據(jù)的區(qū)塊示意圖,將數(shù)據(jù)寫入新區(qū)塊910中,而未曾更改過的數(shù)據(jù)從舊區(qū)塊900移至新區(qū)塊910。
然而,如果數(shù)據(jù)不斷重復地寫入同一區(qū)塊中的話,就會產(chǎn)生許多不必要的擦除和遷移動作,此舉不僅浪費時間同時也會縮短快閃存儲器的使用壽命。
請參閱圖10所示,為依據(jù)本發(fā)明具體形式顯示母和子技術的區(qū)塊示意圖,這是依據(jù)本發(fā)明具體形式顯示母和子技術的區(qū)塊示意圖,因此,在本發(fā)明的快閃存儲器儲存裝置中,當數(shù)據(jù)重復地寫入同一區(qū)塊時,它會避免擦除的動作,而遷移動作也只有當更換區(qū)塊時才會執(zhí)行,所有的數(shù)據(jù)都先寫入新區(qū)塊(子區(qū)塊)1010中,然后未曾更改過的數(shù)據(jù)則從舊區(qū)塊(母區(qū)塊)1000寫入新區(qū)塊1010中,使用此種方法不僅延長了快閃存儲器的壽命,同時也提高了快閃存儲器儲存裝置的效率。
請參閱圖11所示,為依據(jù)本發(fā)明具體形式顯示邏輯和實體地址映射表的示意圖,以下是一個寫入數(shù)據(jù)范例,其邏輯和實體地址映射表鏈結了一個實體區(qū)塊地址1100和一個邏輯區(qū)塊地址1110,需將320個小區(qū)塊(Sector)的數(shù)據(jù)寫入以0/0區(qū)塊/頁開始的快閃存儲器中,總實體區(qū)塊/邏輯區(qū)塊為1024/992,F(xiàn)IFO的總備用區(qū)塊為32個,無一區(qū)塊有瑕疵,每一區(qū)塊有32頁。
請參閱圖12、13和14所示,為依據(jù)本發(fā)明具體形式顯示起始指標和尾端指標作業(yè)的示意圖,顯示未寫入之前的邏輯和實體地址映射表示意圖,及顯示起始指標和尾端指標作業(yè)的示意圖,在此范例中,起始指標1210所指的子區(qū)塊1300的地址03E0h取自FIFO備用區(qū)域1200,然后,起始指標1210的地址會增加,變?yōu)槠鹗贾笜?410,而32頁的數(shù)據(jù)則寫入子區(qū)塊1300中。
再將子區(qū)塊1300地址03E0h填入邏輯和實體地址映射表中母區(qū)塊1310的邏輯區(qū)塊地址0000h中,母區(qū)塊1310地址0000h被擦除掉,而尾端指標1220增加,然后,母區(qū)塊地址0000h則填入備用區(qū)域中的尾端指標1420所指的地址中。
現(xiàn)在將依據(jù)本發(fā)明的具體表現(xiàn),制作寫入程序的敘述參考。
主機將相對應的寫入命令和地址參數(shù)寫入快閃存儲器儲存裝置中,而此快閃存儲器儲存裝置隨后開始執(zhí)行程序快閃演算法。
請參閱圖6所示,為依據(jù)本發(fā)明具體形式顯示出來快閃存儲器儲存裝置的寫入程序流程,首先,在步驟601中,將主機發(fā)出的邏輯地址轉(zhuǎn)換成快閃存儲器實體區(qū)塊和頁地址。
然后在步驟602中,控制器會檢查看子區(qū)塊是否存在,若子區(qū)塊不存在的話,則跳至步驟605,若子區(qū)塊存在,在步驟603中會檢查現(xiàn)有快閃存儲器的邏輯區(qū)塊,看寫入的是否等于最后一個寫入的存儲器邏輯區(qū)塊,若不相等,則跳至步驟611。
若相等,在步驟604中會檢查現(xiàn)有的快閃存儲器邏輯頁碼,看寫入的是否大于最后一個寫入的快閃存儲器邏輯頁,若是,則繼續(xù)步驟610,若否,則跳至步驟611。
步驟605從FIFO隊列中取一干凈的區(qū)塊為現(xiàn)有的寫入命令建立一個子區(qū)塊。
在步驟606檢查現(xiàn)有的快閃存儲器邏輯頁碼,看寫入的是否等于「0」,若等于「0」,繼續(xù)步驟608。
若不等于「0」,在步驟607中,母區(qū)塊的數(shù)據(jù)會被移至「寫入的最后一頁」和「現(xiàn)有寫入頁」之間的子區(qū)塊。
在步驟608,將主機至快閃存儲器的數(shù)據(jù)寫入緩沖區(qū)中,而小區(qū)塊的計數(shù)會減少。
在步驟609,若小區(qū)塊的計數(shù)等于「0」,則前進至「終點」,若否,則繼續(xù)步驟608。
在步驟610,若現(xiàn)有的寫入頁碼等于最后寫入頁碼加1,則繼續(xù)步驟608,若否,則繼續(xù)步驟607。
在步驟611,母區(qū)塊的數(shù)據(jù)會被移至「寫入的最后一頁」和「此區(qū)塊的最后一頁」之間的子區(qū)塊,并擦除母區(qū)塊,且更新控制器中的邏輯和實體地址映射表,以子區(qū)塊地址代替母區(qū)塊地址,同時將被擦除的母區(qū)塊放回至FIFO隊列中當成干凈的區(qū)塊。
請參閱圖7所示,為依據(jù)本發(fā)明具體形式顯示出來快閃存儲器儲存裝置的讀取程序流程,這是依據(jù)本發(fā)明具體形式顯示出來快閃存儲器儲存裝置的讀取程序流程。
在步驟701,為將具USB的主機的邏輯地址轉(zhuǎn)換成快閃存儲器實體和頁地址。
在步驟702中檢查現(xiàn)有的快閃存儲器,看待讀取的是否等于最后一個讀取的快閃存儲器邏輯區(qū)塊,若是,則跳至步驟705,若否,繼續(xù)步驟703。
在步驟703中讀取快閃存儲器實體區(qū)塊和頁的數(shù)據(jù)而小區(qū)塊的計數(shù)會減少。
在步驟704中檢查小區(qū)塊計數(shù),看它是否等于「0」,若等于「0」,則前進至「終點」,若否,則回到步驟703。
在步驟705中檢查現(xiàn)有的存儲器邏輯頁,看待讀取的是否大于最后寫入的快閃存儲器邏輯頁,若是,回到步驟703,若否,前進至步驟706。
在步驟706中讀取子區(qū)塊實體區(qū)塊和頁的數(shù)據(jù),而小區(qū)塊的計數(shù)會減少。
在步驟707中檢查小區(qū)塊計數(shù),看它是否等于「0」,若等于「0」,則前進至「終點」,若否,則回到步驟705。
請參閱圖15所示,為依據(jù)本發(fā)明具體形式顯示的命令封包架構示意圖,當微處理器開始執(zhí)行命令時,USB快閃存儲器儲存裝置會從主機中下載其參數(shù),例如讀取或?qū)懭耄瑘D中顯示了廠商命令封包。
系統(tǒng)會通過裝置/啟始位元組來判斷地址模式,本發(fā)明的快閃存儲器儲存裝置同時支援邏輯區(qū)塊地址(LBA)和圓柱體啟始小區(qū)塊(CHS)模式。
若主機利用LBA模式提供地址的話,快閃存儲器儲存裝置會將它轉(zhuǎn)換成CHS模式,然后將CHS模式改成實體地址。
當快閃存儲器儲存裝置執(zhí)行讀取命令時,控制器首先會將快閃存儲器的數(shù)據(jù)一個小區(qū)塊一個小區(qū)塊的讀取到控制器的緩沖區(qū)(512位元組)中,然后USB引擎會將小區(qū)塊送至主機,當送至主機的小區(qū)塊數(shù)量等于主機欲讀取的小區(qū)塊數(shù)目時,整個命令就完成了。
當快閃存儲器儲存裝置執(zhí)行寫入命令時,控制器會通過USB引擎將主機的數(shù)據(jù)一個小區(qū)塊一個小區(qū)塊的讀取到控制器的緩沖區(qū)(512位元組),然后此小區(qū)塊就會被儲存在快閃存儲器中,當送至快閃存儲器的小區(qū)塊數(shù)量等于主機欲寫入的小區(qū)塊數(shù)目時,整個命令就完成了。
快閃存儲器儲存裝置可以支援一個以上的快閃存儲器,本發(fā)明中提供了多個晶片選取腳,當啟動快閃存儲器儲存裝置時,它會檢查板上所使用的快閃存儲器類型(容量)以及系統(tǒng)有多少個晶片,快閃存儲器儲存裝置會將所有的存儲器晶片加起來,找出總容量,當主機需要這一類的數(shù)據(jù)時,快閃存儲器儲存裝置就會提供總容量給主機,而不是單一晶片的容量。
當主機發(fā)出某一地址(邏輯)給快閃存儲器儲存裝置時,快閃存儲器儲存裝置會執(zhí)行計算,找出主機想要的存取的確切晶片,以及對應的地址,然后,快閃存儲器儲存裝置會使用計算出來的地址,并啟動晶片選取腳。
此外,本發(fā)明中所述及的快閃存儲器、控制器為一單晶片設計,用以縮小快閃存儲器儲存裝置的整體體積,且不需要外部隨機存取存儲器(RAM)或只讀存儲器(ROM)的設計。
以上所述實施例僅為說明本發(fā)明的技術思想及特點,其目的在使熟習此項技藝的人士能夠了解本發(fā)明的內(nèi)容并據(jù)以實施,當不能以其限定本發(fā)明的專利范圍,即大凡依本發(fā)明所揭示的精神所作的均等變化或修飾,仍應涵蓋在本發(fā)明的權利要求范圍內(nèi)。
權利要求
1.一種通用串行總線架構快閃存儲器儲存裝置,其特征是其至少包含有一個通用串行總線架構連接器,將該快閃存儲器儲存裝置連接至具通用串行總線架構連接器的主機;至少一個儲存數(shù)據(jù)的快閃存儲器模組或陣列;及一個用以控制主機和快閃存儲器儲存裝置之間的命令和數(shù)據(jù)并管理至少一快閃存儲器模組中的數(shù)據(jù)的控制器。
2.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步包含一指示該快閃存儲器儲存裝置的狀態(tài)的指示器。
3.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步包含一個防止寫入該快閃存儲器裝置或是將數(shù)據(jù)擦除的寫入保護開關。
4.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步地包含了一個延伸該快閃存儲器儲存裝置的存儲器大小的附屬電路板,至少包括一快閃存儲器模組。
5.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步地包含了一系統(tǒng)緩沖區(qū),提供主機和快閃存儲器裝置之間的緩沖。
6.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步地包含了一個為系統(tǒng)緩沖區(qū)建立讀取和寫入時序的狀態(tài)機器。
7.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步地包含了輸入/輸出控制介面,提供該快閃存儲器儲存裝置需要進行其它的輸入/輸出控制。
8.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步地包含了一個錯誤更正代碼(ECC)電路,在數(shù)據(jù)寫入該快閃存儲器儲存裝置時編碼ECC,以及當讀取該快閃存儲器儲存裝置的數(shù)據(jù)時解碼ECC。
9.如權利要求8所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該ECC電路進一步地包含了當發(fā)生并更正錯誤時,無效數(shù)據(jù)地址的判斷。
10.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步地包含了一快閃存儲器介面,控制送到至少一快閃存儲器模組的讀取和寫入命令。
11.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該快閃存儲器儲存裝置中進一步包含了一執(zhí)行主機具有參數(shù)的命令的微處理器。
12.如權利要求1所述的通用串行總線架構快閃存儲器儲存裝置,其特征是該控制器為一不需要外部隨機存取存儲器(RAM)或只讀存儲器(ROM)的單晶片。
全文摘要
本發(fā)明為一種通用串行總線架構快閃存儲器儲存裝置,至少包含有一個通用串行總線架構連接器,用以將快閃存儲器儲存裝置連接至具通用串行總線架構連接器的主機;至少一個快閃存儲器模組或陣列以儲存數(shù)據(jù);及一個控制器,用以控制主機和快閃存儲器儲存裝置之間的命令和數(shù)據(jù),以及管理至少一快閃存儲器模組中的數(shù)據(jù);本發(fā)明可以通過通用串行總線架構與主機連接,使主機可快速地將數(shù)據(jù)儲存至本裝置或讀取本裝置內(nèi)的數(shù)據(jù),讓主機和本裝置得以輕易地相連和互動。
文檔編號G06F13/14GK1448847SQ0210824
公開日2003年10月15日 申請日期2002年3月28日 優(yōu)先權日2002年3月28日
發(fā)明者黃意翔, 林祐鋒, 潘健成 申請人:群聯(lián)電子股份有限公司