0依照邏輯儲(chǔ)存地址的順序,儲(chǔ)存每一邏輯儲(chǔ)存地址的數(shù)據(jù)實(shí)際儲(chǔ)存于儲(chǔ)存單元180中的哪個(gè)實(shí)體位置的信息。邏輯儲(chǔ)存地址可以邏輯區(qū)塊地址(LBA, Logical Block Address)表示,每一個(gè)邏輯區(qū)塊地址對(duì)應(yīng)到一個(gè)固定大小的實(shí)體儲(chǔ)存空間,例如256K、512K或1024Κ比特組(Bytes)。例如,實(shí)體儲(chǔ)存對(duì)照表300依序儲(chǔ)存由LBA0至LBA65535的實(shí)體位置信息。固定數(shù)目的連續(xù)邏輯區(qū)塊的實(shí)體位置信息310可以4個(gè)比特組表示,其中的2個(gè)比特組310a記錄區(qū)塊編號(hào)(block number),而另2個(gè)比特組310b記錄單元編號(hào)(unit number)。例如,此4個(gè)比特組可指示連續(xù)八個(gè)實(shí)體區(qū)塊的起始區(qū)塊編號(hào)以及起始單元編號(hào),而這八個(gè)實(shí)體區(qū)塊又可統(tǒng)稱為一個(gè)主頁(yè)面(host page)。舉例來說,儲(chǔ)存對(duì)照表300所需要的空間從64M到1G比特組不等。由于NAND快閃裝置并非隨機(jī)存取裝置,為了提升寫入的效率,主裝置160需要提供至少一個(gè)邏輯區(qū)塊的連續(xù)性數(shù)據(jù),例如512比特組的數(shù)據(jù),使得儲(chǔ)存裝置180可以有效率的方式擺放到儲(chǔ)存單元180。當(dāng)主裝置160寫入數(shù)據(jù)到不同的邏輯區(qū)塊時(shí),例如寫入邏輯區(qū)塊地址LBAO、LBA1000、LBA4500、LBA10000,儲(chǔ)存于動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器180中的實(shí)體儲(chǔ)存對(duì)照表300中的相應(yīng)實(shí)體位置信息也要隨著更新。為了避免動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器180中儲(chǔ)存的實(shí)體儲(chǔ)存對(duì)照表300因斷電而消失,需要一種方法有效率地將實(shí)體儲(chǔ)存對(duì)照表300中已更新的實(shí)體位置信息寫入到儲(chǔ)存單元180中。如果每次主裝置160寫入一個(gè)邏輯區(qū)塊的數(shù)據(jù)(例如512K比特組)就相應(yīng)地更新儲(chǔ)存單元180中的實(shí)體位置信息(例如2比特組),將使得存取介面170因頻繁寫入而不具效率。所以,于一些實(shí)施例中,可將實(shí)體儲(chǔ)存對(duì)照表300切分成η個(gè)群組(groups),做為更新至儲(chǔ)存單元180的最小單位。第4圖是依據(jù)本發(fā)明實(shí)施例的實(shí)體儲(chǔ)存對(duì)照表的切分示意圖。實(shí)體儲(chǔ)存對(duì)照表300分為群組400_0至400_n,每一個(gè)群組包含4096個(gè)邏輯區(qū)塊的實(shí)體位置信息(例如2K比特組)。
[0045]圖5是依據(jù)本發(fā)明實(shí)施例的更新實(shí)體儲(chǔ)存對(duì)照表的狀態(tài)圖。處理單元110依據(jù)不同的觸發(fā)事件來進(jìn)入不同的狀態(tài),并執(zhí)行每個(gè)狀態(tài)中所需要的操作。處理單元110初始處于閑置狀態(tài)(idle state) 510,并且在經(jīng)由存取介面150接收到主裝置160所發(fā)出的寫入命令后進(jìn)入數(shù)據(jù)寫入狀態(tài)(data programming state) 530o于數(shù)據(jù)寫入狀態(tài)中,處理單元110執(zhí)行如下所示的一連串的操作,用以將數(shù)據(jù)寫入儲(chǔ)存單元180并更新動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器180中儲(chǔ)存的實(shí)體儲(chǔ)存對(duì)照表300。圖6是依據(jù)本發(fā)明實(shí)施例的執(zhí)行于數(shù)據(jù)寫入狀態(tài)中的方法流程圖。處理單元110透過存取介面150取得一或多個(gè)邏輯區(qū)塊地址(LBA)以及待寫入的數(shù)據(jù)后(步驟S611),驅(qū)動(dòng)存取介面170將數(shù)據(jù)寫入到儲(chǔ)存單元180中的有效區(qū)塊(active block)中的單元(unit)(步驟S613)。有效區(qū)塊以及寫入單元分別以區(qū)塊編號(hào)及單元編號(hào)表示。接著,更新動(dòng)態(tài)存取存儲(chǔ)器180中儲(chǔ)存的實(shí)體儲(chǔ)存對(duì)照表300,用以更新取得的邏輯區(qū)塊地址的實(shí)體位置信息(步驟S615),以及更新未儲(chǔ)存群組隊(duì)列(unsavedgroup queue)(步驟S617)。未儲(chǔ)存群組隊(duì)列可記錄于動(dòng)態(tài)存取存儲(chǔ)器180中,用以儲(chǔ)存實(shí)體儲(chǔ)存對(duì)照表300中的那些群組已經(jīng)更新但尚未寫入儲(chǔ)存單元180的信息。假設(shè),實(shí)體儲(chǔ)存對(duì)照表300的群組切分如圖4所示。處理單元110將邏輯區(qū)塊地址LBAO、LBA1000、LBA4500、LBA10000的數(shù)據(jù)寫入至儲(chǔ)存單元180,并據(jù)以更新動(dòng)態(tài)存取存儲(chǔ)器180中實(shí)體儲(chǔ)存對(duì)照表300的邏輯區(qū)塊地址LBA0、LBA1000、LBA4500、LBA10000的實(shí)體位置信息。邏輯區(qū)塊地址LBAO、LBA 1000、LBA4500、LBA 10000的實(shí)體位置信息分別屬于第0個(gè)、第0個(gè)、第1個(gè)及第2個(gè)群組。處理單元110會(huì)檢查未儲(chǔ)存群組隊(duì)列是否包含這些群組編號(hào),如果沒有,則將缺少的群組編號(hào)加入未儲(chǔ)存群組隊(duì)列。例如,當(dāng)未儲(chǔ)存群組隊(duì)列只包含第0個(gè)、第1個(gè)、第8個(gè)及第10個(gè)群組的編號(hào)時(shí),則將第2個(gè)群組的編號(hào)加入至未儲(chǔ)存群組隊(duì)列。接著,處理單元110判斷是否已寫入超過指定數(shù)目的邏輯區(qū)塊的數(shù)據(jù),例如7680個(gè)(步驟S631)。若是,進(jìn)入實(shí)體儲(chǔ)存對(duì)照表寫入狀態(tài)(Storage-mapping-table Programming State) 550(步驟S651);否則,回到閑置狀態(tài)(Idle State) 510 (步驟S671)。步驟S631的判斷可經(jīng)由檢查一個(gè)寫入計(jì)數(shù)器完成。此寫入計(jì)數(shù)器可在每寫入一個(gè)邏輯區(qū)塊的數(shù)據(jù)后加一,并且在每次執(zhí)行完實(shí)體儲(chǔ)存對(duì)照表寫入狀態(tài)550中的處理時(shí)重設(shè)為0。值得注意的是,經(jīng)由步驟S631的判斷,可于寫入指定數(shù)目的邏輯區(qū)塊的數(shù)據(jù)后再將更新過的群組寫入至儲(chǔ)存單元180,用以避免如上所述的因頻繁寫入更新后的實(shí)體位置信息而造成存取介面170的使用不具效率的問題。
[0046]圖7是依據(jù)本發(fā)明實(shí)施例的執(zhí)行于實(shí)體儲(chǔ)存對(duì)照表寫入狀態(tài)中的方法流程圖。此方法流程反復(fù)執(zhí)行一個(gè)回圈,直到未儲(chǔ)存群組隊(duì)列中所指示的實(shí)體儲(chǔ)存對(duì)照表300的所有群組都寫入儲(chǔ)存單元180為止(步驟S711至S721)。圖8是依據(jù)本發(fā)明實(shí)施例的未儲(chǔ)存群組隊(duì)列示意圖。未儲(chǔ)存群組隊(duì)列800為一個(gè)陣列(array),包含多個(gè)儲(chǔ)存格(cells),每一儲(chǔ)存格存放儲(chǔ)存實(shí)體儲(chǔ)存對(duì)照表300中的特定群組已經(jīng)更新但尚未寫入儲(chǔ)存單元180的信息。例如,”G1”代表實(shí)體儲(chǔ)存對(duì)照表300中的第0個(gè)群組;”G8”代表實(shí)體儲(chǔ)存對(duì)照表300中的第8個(gè)群組,依此類推。于每一回合的執(zhí)行中,處理單元110從未儲(chǔ)存群組隊(duì)列800中取得一個(gè)群組編號(hào)(步驟S711),以及驅(qū)動(dòng)存取介面170將實(shí)體儲(chǔ)存對(duì)照表300中的相應(yīng)群組寫入儲(chǔ)存單元(步驟S713)。于此須注意的是,儲(chǔ)存單元180會(huì)設(shè)置一或多個(gè)指定的區(qū)塊來儲(chǔ)存實(shí)體儲(chǔ)存對(duì)照表300的數(shù)據(jù),例如,區(qū)塊10至17,并且存取介面170會(huì)將此群組的數(shù)據(jù)寫入至一個(gè)可用的單元(spare unit)上,而不會(huì)覆寫掉以前儲(chǔ)存的數(shù)據(jù)。這些群組可依寫入時(shí)間的先后依序儲(chǔ)存。就算于數(shù)據(jù)寫入狀態(tài)530中僅更新此群組中的一個(gè)邏輯區(qū)塊的實(shí)體位置信息,處理單元110還是會(huì)將一整個(gè)群組中所有的實(shí)體位置信息寫入儲(chǔ)存單元180。接著,處理單元110更新儲(chǔ)存于動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器120中的群組對(duì)照表(groupmapping table,又稱為G2F Group-to-Flash表),用以指出實(shí)體儲(chǔ)存對(duì)照表300中的每個(gè)群組的最新數(shù)據(jù)實(shí)際存放于儲(chǔ)存單元180中的哪個(gè)位置(步驟S715),以及將此群組編號(hào)從未儲(chǔ)存群組隊(duì)列中移除(步驟S717)。圖9是依據(jù)本發(fā)明實(shí)施例的群組對(duì)照表示意圖。群組對(duì)照表900為一個(gè)陣列,依照群組編號(hào)的順序使用多個(gè)儲(chǔ)存格900_0至900_n來儲(chǔ)存每一群組的最新數(shù)據(jù)實(shí)際儲(chǔ)存于儲(chǔ)存單元180中的哪個(gè)實(shí)體位置的信息。例如,群組對(duì)照900依序儲(chǔ)存從群組G0至Gn的實(shí)體位置信息。每一個(gè)儲(chǔ)存格使用2個(gè)比特組記錄一個(gè)單元編號(hào)。例如,群組對(duì)照900中指出群組G0、G1及G2的最新數(shù)據(jù)實(shí)際存放在第100、200及300個(gè)單元上。當(dāng)一個(gè)群組所對(duì)應(yīng)到的所有邏輯區(qū)塊還沒有數(shù)據(jù)存放于儲(chǔ)存單元180,相應(yīng)的儲(chǔ)存格會(huì)儲(chǔ)存空值(null value),空值可設(shè)定為”0xFF”。例如,第9圖中以斜線表示的儲(chǔ)存格900_3儲(chǔ)存空值,表示群組G3所對(duì)應(yīng)到的所有邏輯區(qū)塊都還沒有數(shù)據(jù)存放于儲(chǔ)存單元180。接著,處理單元110判斷是否已寫入所有群組的數(shù)據(jù)(步驟S721),若是,回到閑置狀態(tài)510;否則,回到步驟S711,用以處理下一個(gè)未寫入的群組。于步驟S721中,當(dāng)處理單元110發(fā)現(xiàn)未儲(chǔ)存群組隊(duì)列為一個(gè)空隊(duì)列時(shí),則判斷已寫入所有群組的數(shù)據(jù)。
[0047]然而,未寫入的群組越多則占用越多時(shí)間將動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器120中的數(shù)據(jù)儲(chǔ)存至儲(chǔ)存單元180。若處理單元110透過存取介面150由主裝置160接收到讀取或?qū)懭朊?,但卻礙于正在寫入大量的群組數(shù)據(jù)至儲(chǔ)存單元180而無法處理接收的命令,可能會(huì)造成接收到的讀取或?qū)懭朊钣鈺r(shí)無時(shí)處理。在另一些實(shí)施例中,處理單元110可限制群組數(shù)據(jù)的寫入操作不超過一段既定的時(shí)間,用以避免如上所述的問題。第10圖是依據(jù)本發(fā)明實(shí)施例的執(zhí)行于實(shí)體儲(chǔ)存對(duì)照表寫入狀態(tài)中的方法流程圖。為了讓說明書簡(jiǎn)潔易懂,步驟S1011至S1017、S1031以及S1041的詳細(xì)內(nèi)容可分別參考圖7中步驟S711至S717、S721以及S731的說明。處理單元110可于進(jìn)入實(shí)體儲(chǔ)存對(duì)照表寫入狀態(tài)550時(shí),啟動(dòng)一個(gè)計(jì)時(shí)器(timer),而此計(jì)時(shí)器會(huì)在一段時(shí)間后逾時(shí)(expired),例如35ms (milliseconds)。每回合的群組數(shù)據(jù)寫入后(步驟S1011至S1017),處理單元110更判斷是否超過既定的時(shí)間(步驟S1021)。若是,不管有沒有寫完所有的群組數(shù)據(jù),強(qiáng)制回到閑置狀態(tài)(步驟S1041);否則,繼續(xù)進(jìn)行步驟S1031的判斷。于步驟S1021中,當(dāng)處理單元110發(fā)現(xiàn)計(jì)時(shí)器已逾時(shí),則判斷超過既定的時(shí)間。
[0048]參考回圖5,處理單元110處于閑置狀態(tài)(idle state) 510并且接收到即時(shí)待命(standby immediate)命令時(shí),進(jìn)入群組對(duì)照表寫入狀態(tài)(group-ma