專(zhuān)利名稱(chēng):與存儲(chǔ)器傳輸數(shù)據(jù)的裝置及其傳輸數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲(chǔ)器的控制器領(lǐng)域,特別涉及一種與存儲(chǔ)器傳輸數(shù)據(jù)的裝置及其傳輸數(shù)據(jù)的方法。
背景技術(shù):
目前主流的NANDFLASH(與非型非易失性存儲(chǔ)器)裝置,讀寫(xiě)操作一般都是以頁(yè)(page)為單位。不同的NAND FLASH,每個(gè)頁(yè)的大小也可能不同。具體來(lái)說(shuō),目前用來(lái)存放數(shù)據(jù)的 NAND FLASH 頁(yè)大小有 512Bytes、2Kbytes、4Kbytes 和 8Kbytes 這幾種。NAND FLASH每一頁(yè)的物理存儲(chǔ)單元,除了要存放用戶(hù)的數(shù)據(jù)以外,還要存放糾錯(cuò)碼(ECC)的信息和文件系統(tǒng)信息等。一般地,這一部分非用戶(hù)數(shù)據(jù)(稱(chēng)作冗余區(qū),或sparearea)被統(tǒng)一地分配到用戶(hù)數(shù)據(jù)區(qū)(稱(chēng)作主區(qū),或main area)頁(yè)地址以后。例如,某款NANDFLASH頁(yè)的大小是4KBytes,那么其主區(qū)地址為0x0000 0x1000,冗余區(qū)從0x1000地址起始,冗余區(qū)大小根據(jù)NAND FLASH的廠商和類(lèi)型,有所不同。由于其本身的結(jié)構(gòu)性質(zhì),NAND FLASH中存儲(chǔ)的數(shù)據(jù)容易出錯(cuò)。在實(shí)際的讀寫(xiě)操作中,NAND FLASH控制器都會(huì)伴隨著ECC糾錯(cuò)的過(guò)程:寫(xiě)數(shù)據(jù)時(shí),用戶(hù)數(shù)據(jù)被存入主區(qū)的同時(shí),還要做ECC編碼,并產(chǎn)生校驗(yàn)碼存放在NAND FLASH冗余區(qū);讀數(shù)據(jù)時(shí),控制器將主區(qū)的用戶(hù)數(shù)據(jù)和冗余區(qū)的校驗(yàn)碼經(jīng)過(guò)ECC解碼,自動(dòng)糾正出錯(cuò)的數(shù)據(jù),還原用戶(hù)數(shù)據(jù)??刂破髯鯡CC編碼、解碼操作,是以扇區(qū)(sector)為單位的,按照目前ECC類(lèi)型,扇區(qū)大小有512Bytes和IKbytes等類(lèi)型??刂破饕胱x寫(xiě)整個(gè)頁(yè)內(nèi)的數(shù)據(jù),必須以讀寫(xiě)多個(gè)扇區(qū)的方式來(lái)完成。以圖1的NAND FLASH為例,每個(gè)扇區(qū)大小為lKBytes。4KB用戶(hù)數(shù)據(jù)按扇區(qū)劃分,共成4個(gè)扇區(qū)(主區(qū)O 主區(qū)3),每個(gè)扇區(qū)1KB。冗余區(qū)O 3分別存放主區(qū)O 3的校驗(yàn)碼和其它信息標(biāo)志位,每個(gè)扇區(qū)的冗余區(qū)長(zhǎng)度假設(shè)m字節(jié)。從頁(yè)內(nèi)的整個(gè)主區(qū)看,4KB用戶(hù)數(shù)據(jù)是連續(xù)存放的(主區(qū)O 主區(qū)3),但每個(gè)扇區(qū)的主區(qū)數(shù)據(jù)和對(duì)應(yīng)的校驗(yàn)碼不連續(xù)(主區(qū)O和冗余區(qū)0,主區(qū)I和冗余區(qū)I等)。NAND FLASH控制器讀寫(xiě)整個(gè)頁(yè)的順序是從扇區(qū)O
讀/寫(xiě)到扇區(qū)3,即有以下順序:主區(qū)0,冗余區(qū)0,主區(qū)1,冗余區(qū)1,......,主區(qū)3,冗余區(qū)
3。從地址來(lái)看,NAND FLASH控制器讀寫(xiě)完整頁(yè),頁(yè)內(nèi)地址(即列地址,column address)要跳 8 次:0x0000,0x1000,0x400,0xl000+m,......,OxOcOO, 0x1000+3 Xm。以上文所述的頁(yè)大小4KB的NAND FLASH為例,對(duì)于NAND FLASH裝置來(lái)說(shuō),如果要進(jìn)行一次整頁(yè)寫(xiě)/讀操作,至少需要配置并啟動(dòng)8次狀態(tài)機(jī)。每個(gè)扇區(qū)的主區(qū)或冗余區(qū)傳輸時(shí),不但要重新啟動(dòng)狀態(tài)機(jī),還要預(yù)先更新一遍頁(yè)內(nèi)地址、主區(qū)/冗余區(qū)選擇等信息。目前,NAND FLASH裝置進(jìn)行數(shù)據(jù)讀寫(xiě)時(shí),進(jìn)行的軟件累加、配置主區(qū)列地址和冗余區(qū)列地址的過(guò)程都是由單層狀態(tài)機(jī)完成的。由于單層狀態(tài)機(jī)要重復(fù)地進(jìn)行軟件配置和啟動(dòng)狀態(tài)機(jī)的過(guò)程,過(guò)多的軟件干預(yù),使整個(gè)系統(tǒng)的工作效率大大降低,造成NAND FLASH控制器的速度和效率無(wú)法達(dá)到最優(yōu)。在NAND FLASH控制器不斷提速、優(yōu)化效率的背景下,單層狀態(tài)機(jī)無(wú)法滿足NAND FLASH控制器的需求。
綜上所述,目前的單層狀態(tài)機(jī)會(huì)造成NAND FLASH控制器的速度和效率下降,無(wú)法滿足NAND FLASH控制器的需求。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供的一種與存儲(chǔ)器傳輸數(shù)據(jù)的裝置及其傳輸數(shù)據(jù)的方法,用以解決現(xiàn)有技術(shù)中存在的單層狀態(tài)機(jī)會(huì)造成NAND FLASH控制器的速度和效率下降,無(wú)法滿足NAND FLASH控制器需求的問(wèn)題。本發(fā)明實(shí)施例提供的一種與存儲(chǔ)器傳輸數(shù)據(jù)的裝置,包括:觸發(fā)狀態(tài)機(jī),用于根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址,在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟,其中若本次數(shù)據(jù)傳輸為首次傳輸,所述上次傳輸數(shù)據(jù)的地址是所述操作信息中需要傳輸?shù)牡谝粋€(gè)扇區(qū)中的主區(qū)的起始地址和第一個(gè)扇區(qū)中的冗余區(qū)的起始地址;傳輸狀態(tài)機(jī),用于根據(jù)所述觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù)。較佳地,所述觸發(fā)狀態(tài)機(jī)還用于:根據(jù)所述操作信息中的錯(cuò)誤糾正碼ECC類(lèi)型,分別確定每個(gè)需要傳輸?shù)纳葏^(qū)的主區(qū)和冗余區(qū)的大??;根據(jù)上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,確定本次需要傳輸?shù)闹鲄^(qū)的地址;以及根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,確定本次需要傳輸?shù)娜哂鄥^(qū)的地址。較佳地,所述觸發(fā)狀態(tài)機(jī)具體用于:根據(jù)所述操作信息中需要傳輸?shù)纳葏^(qū)數(shù)量,判斷數(shù)據(jù)是否傳輸完畢;若已傳輸?shù)纳葏^(qū)數(shù)量等于需要傳輸?shù)纳葏^(qū)數(shù)量,確定數(shù)據(jù)傳輸完畢;否則,確定數(shù)據(jù)未傳輸完畢。較佳地,所述傳輸狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī);所述傳輸狀態(tài)機(jī)具體用于:根據(jù)本次需要傳輸?shù)闹鲄^(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);以及根據(jù)本次需要傳輸?shù)娜哂鄥^(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù);所述傳輸狀態(tài)機(jī)包括一個(gè)上層狀態(tài)機(jī)和至少一個(gè)底層狀態(tài)機(jī);所述上層狀態(tài)機(jī)具體用于:將本次需要傳輸?shù)闹鲄^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī),以及將本次需要傳輸?shù)娜哂鄥^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī);收到主區(qū)的地址的底層狀態(tài)機(jī)具體用于:根據(jù)收到主區(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);收到冗余區(qū)的地址的底層狀態(tài)機(jī)具體用于:根據(jù)收到冗余區(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。較佳地,所述裝置還包括:指令發(fā)送狀態(tài)機(jī);所述觸發(fā)狀態(tài)機(jī)具體用于:觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令,在所述指令發(fā)送狀態(tài)機(jī)發(fā)送指令之后,觸發(fā)所述傳輸狀態(tài)機(jī)進(jìn)行數(shù)據(jù)傳輸以及ECC操作;
所述指令發(fā)送狀態(tài)機(jī)具體用于:向所述存儲(chǔ)器發(fā)送傳輸命令和傳輸?shù)刂?。較佳地,所述指令發(fā)送狀態(tài)機(jī)包括多個(gè)狀態(tài)機(jī)。較佳地,所述裝置還包括:處理狀態(tài)機(jī);所述觸發(fā)狀態(tài)機(jī)具體用于:在所述傳輸狀態(tài)機(jī)完成數(shù)據(jù)傳輸之后,觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn);所述處理狀態(tài)機(jī)用于:與所述存儲(chǔ)器進(jìn)行狀態(tài)確認(rèn)。本發(fā)明實(shí)施例提供的一種根據(jù)本發(fā)明實(shí)施例與存儲(chǔ)器傳輸數(shù)據(jù)的裝置進(jìn)行數(shù)據(jù)傳輸?shù)姆椒?,包?觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址,其中若本次數(shù)據(jù)傳輸為首次傳輸,所述上次傳輸數(shù)據(jù)的地址是所述操作信息中需要傳輸?shù)牡谝粋€(gè)扇區(qū)中的主區(qū)的起始地址和第一個(gè)扇區(qū)中的冗余區(qū)的起始地址;傳輸狀態(tài)機(jī)根據(jù)所述觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù);所述觸發(fā)狀態(tài)機(jī)在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟。較佳地,所述觸發(fā)狀態(tài)機(jī)確定本次需要傳輸數(shù)據(jù)的地址包括:所述觸發(fā)狀態(tài)機(jī)根據(jù)所述操作信息中的ECC類(lèi)型,分別確定每個(gè)需要傳輸?shù)纳葏^(qū)的主區(qū)和冗余區(qū)的大??;所述觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,確定本次需要傳輸?shù)闹鲄^(qū)的地址;以及根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,確定本次需要傳輸?shù)娜哂鄥^(qū)的地址。較佳地,所述傳輸狀態(tài)機(jī)判斷數(shù)據(jù)是否傳輸完畢包括:所述觸發(fā)狀態(tài)機(jī)根據(jù)所述操作信息中需要傳輸?shù)纳葏^(qū)數(shù)量,判斷數(shù)據(jù)是否傳輸完畢;若已傳輸?shù)纳葏^(qū)數(shù)量等于需要傳輸?shù)纳葏^(qū)數(shù)量,確定數(shù)據(jù)傳輸完畢;否則,確定數(shù)據(jù)未傳輸完畢。較佳地,所述傳輸狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī);所述傳輸狀態(tài)機(jī)傳輸數(shù)據(jù)包括:所述傳輸狀態(tài)機(jī)根據(jù)本次需要傳輸?shù)闹鲄^(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);以及根據(jù)本次需要傳輸?shù)娜哂鄥^(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù);所述傳輸狀態(tài)機(jī)包括一個(gè)上層狀態(tài)機(jī)和至少一個(gè)底層狀態(tài)機(jī);所述傳輸狀態(tài)機(jī)傳輸數(shù)據(jù)包括:所述上層狀態(tài)機(jī)將本次需要傳輸?shù)闹鲄^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī),以及將本次需要傳輸?shù)娜哂鄥^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī);收到主區(qū)的地址的底層狀態(tài)機(jī)根據(jù)收到主區(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);收到冗余區(qū)的地址的底層狀態(tài)機(jī)根據(jù)收到冗余區(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。較佳地,所述傳輸狀態(tài)機(jī)進(jìn)行首次數(shù)據(jù)傳輸之前還包括:所述觸發(fā)狀態(tài)機(jī)觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令;所述指令發(fā)送狀態(tài)機(jī)向所述存儲(chǔ)器發(fā)送傳輸命令和傳輸?shù)刂罚?br>
所述觸發(fā)狀態(tài)機(jī)在所述指令發(fā)送狀態(tài)機(jī)發(fā)送指令之后,觸發(fā)所述傳輸狀態(tài)機(jī)進(jìn)行數(shù)據(jù)傳輸以及ECC操作。較佳地,所述傳輸狀態(tài)機(jī)完成數(shù)據(jù)傳輸之后還包括:所述觸發(fā)狀態(tài)機(jī)觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn);所述處理狀態(tài)機(jī)與所述存儲(chǔ)器進(jìn)行狀態(tài)確認(rèn)。本發(fā)明實(shí)施例有如下有益效果:由于采用多層狀態(tài)機(jī)完成軟件累加、配置主區(qū)列地址和冗余區(qū)列地址的過(guò)程,從而提高了 NAND FLASH控制器的速度和效率,滿足NAND FLASH控制器需求。
圖1為FLASH頁(yè)內(nèi)數(shù)據(jù)結(jié)構(gòu)示意圖;圖2A為本發(fā)明實(shí)施例與存儲(chǔ)器傳輸數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;圖2B為本發(fā)明實(shí)施例與存儲(chǔ)器傳輸數(shù)據(jù)的方法流程示意圖;圖3為本發(fā)明實(shí)施例兩層狀態(tài)機(jī)中觸發(fā)狀態(tài)機(jī)的工作流程示意圖;圖4為本發(fā)明實(shí)施例兩層狀態(tài)機(jī)中傳輸狀態(tài)機(jī)的工作流程示意圖;圖5為本發(fā)明實(shí)施例三層狀態(tài)機(jī)中傳輸狀態(tài)機(jī)中的上層狀態(tài)機(jī)的工作流程示意圖;圖6為本發(fā)明實(shí)施例三層狀態(tài)機(jī)中傳輸狀態(tài)機(jī)中的底層狀態(tài)機(jī)的工作流程示意圖。
具體實(shí)施例方式針對(duì)現(xiàn)有技術(shù)中存在的單層狀態(tài)機(jī)會(huì)造成NAND FLASH控制器的速度和效率下降,無(wú)法滿足NAND FLASH控制器需求的問(wèn)題,本發(fā)明實(shí)施例采用多層狀態(tài)機(jī)的方式由觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址;由傳輸狀態(tài)機(jī)根據(jù)觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù);由觸發(fā)狀態(tài)機(jī)在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟。由于采用多層狀態(tài)機(jī)完成軟件累加、配置主區(qū)列地址和冗余區(qū)列地址的過(guò)程,從而提高了 NAND FLASH控制器的速度和效率,滿足NAND FLASH控制器需求。其中,本發(fā)明實(shí)施例的有多少層狀態(tài)機(jī),以及每層狀態(tài)機(jī)的數(shù)量可以根據(jù)需要進(jìn)行設(shè)定。下面結(jié)合說(shuō)明書(shū)附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)描述。如圖2A所示,本發(fā)明實(shí)施例傳輸數(shù)據(jù)的裝置包括:觸發(fā)狀態(tài)機(jī)10和傳輸狀態(tài)機(jī)20。觸發(fā)狀態(tài)機(jī)10,用于根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址,在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟以確定下次需要傳輸數(shù)據(jù)的地址;傳輸狀態(tài)機(jī)20,用于根據(jù)觸發(fā)狀態(tài)機(jī)10確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù)。較佳地,觸發(fā)狀態(tài)機(jī)10根據(jù)操作信息中的ECC類(lèi)型,分別確定每個(gè)需要傳輸?shù)纳葏^(qū)的主區(qū)和冗余區(qū)的大小;根據(jù)上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,確定本次需要傳輸?shù)闹鲄^(qū)的地址;以及根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,確定本次需要傳輸?shù)娜哂鄥^(qū)的地址。較佳地,觸發(fā)狀態(tài)機(jī)10根據(jù)操作信息中需要傳輸?shù)纳葏^(qū)數(shù)量,判斷數(shù)據(jù)是否傳輸完畢;若已傳輸?shù)纳葏^(qū)數(shù)量等于需要傳輸?shù)纳葏^(qū)數(shù)量,確定數(shù)據(jù)傳輸完畢;否則,確定數(shù)據(jù)未傳輸完畢。若傳輸狀態(tài)機(jī)20包括單個(gè)狀態(tài)機(jī);較佳地,傳輸狀態(tài)機(jī)20根據(jù)本次需要傳輸?shù)闹鲄^(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);以及根據(jù)本次需要傳輸?shù)娜哂鄥^(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。若傳輸狀態(tài)機(jī)20包括多個(gè)狀態(tài)機(jī),比如包括一個(gè)上層狀態(tài)機(jī)和至少一個(gè)底層狀態(tài)機(jī);較佳地,上層狀態(tài)機(jī)將本次需要傳輸?shù)闹鲄^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī),以及將本次需要傳輸?shù)娜哂鄥^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī);收到主區(qū)的地址的底層狀態(tài)機(jī)具體用于:根據(jù)收到主區(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);收到冗余區(qū)的地址的底層狀態(tài)機(jī)具體用于:根據(jù)收到冗余區(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。較佳地,本發(fā)明實(shí)施例的裝置還可以進(jìn)一步包括:指令發(fā)送狀態(tài)機(jī)30 ;觸發(fā)狀態(tài)機(jī)10觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令,在指令發(fā)送狀態(tài)機(jī)發(fā)送指令之后,觸發(fā)傳輸狀態(tài)機(jī)進(jìn)行數(shù)據(jù)傳輸;指令發(fā)送狀態(tài)機(jī)30向存儲(chǔ)器發(fā)送傳輸命令和傳輸?shù)刂?。較佳地,指令發(fā)送狀態(tài)機(jī)30包括多個(gè)狀態(tài)機(jī)。較佳地,若本次數(shù)據(jù)傳輸為首次傳輸,上次傳輸數(shù)據(jù)的地址是操作信息中需要傳輸?shù)牡谝粋€(gè)扇區(qū)中的主區(qū)的起始地址和第一個(gè)扇區(qū)中的冗余區(qū)的起始地址。較佳地,本發(fā)明實(shí)施例的裝置還可以進(jìn)一步包括:處理狀態(tài)機(jī)40。觸發(fā)狀態(tài)機(jī)10在傳輸狀態(tài)機(jī)完成數(shù)據(jù)傳輸之后,觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn);處理狀態(tài)機(jī)40與存儲(chǔ)器進(jìn)行狀態(tài)確認(rèn)。較佳地,處理狀態(tài)機(jī)40包括多個(gè)狀態(tài)機(jī)。如圖2B所示,本發(fā)明實(shí)施例傳輸數(shù)據(jù)的方法包括下列步驟:步驟201、觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址;步驟202、傳輸狀態(tài)機(jī)根據(jù)觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù);步驟203、觸發(fā)狀態(tài)機(jī)在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟。其中,在傳輸數(shù)據(jù)之前,軟件會(huì)配置針對(duì)整個(gè)傳輸數(shù)據(jù)的操作信息,包括但不限于下列信息中的至少一種:主區(qū)的起始地址、冗余區(qū)地起始地址、需要傳輸?shù)纳葏^(qū)數(shù)目、ECC類(lèi)型(即確定每個(gè)扇區(qū)傳輸?shù)闹鲄^(qū)和冗余區(qū)的大小)、必要的命令參數(shù)和狀態(tài)機(jī)所有步驟分別使能與否(比如說(shuō)在讀取數(shù)據(jù)時(shí),在第一個(gè)扇區(qū)被讀之前,需要判斷存儲(chǔ)器的狀態(tài),之后的扇區(qū)則不需要,那么狀態(tài)機(jī)的功能步驟使能是不同的)。本發(fā)明實(shí)施例在在傳輸數(shù)據(jù)之前,只需要軟件配置一次操作信息,后續(xù)就不需要軟件再進(jìn)行配置了。在實(shí)施中,具體一次能傳輸多少數(shù)據(jù)是根據(jù)傳輸狀態(tài)機(jī)的配置決定的。本發(fā)明實(shí)施例的傳輸狀態(tài)機(jī)可以在不同的傳輸場(chǎng)景下,設(shè)定不同的傳輸量,比如可以設(shè)置一次傳輸IK的數(shù)據(jù);還比如,不關(guān)心ECC的存儲(chǔ)器。較佳地,可以根據(jù)主區(qū)的大小進(jìn)行設(shè)定,比如設(shè)定一次傳輸?shù)臄?shù)據(jù)量等于主區(qū)的大小。其中,觸發(fā)狀態(tài)機(jī)處于傳輸狀態(tài)機(jī)的上層。較佳地,步驟201中,觸發(fā)狀態(tài)機(jī)根據(jù)操作信息中的ECC(Error Correct Code,錯(cuò)誤糾正碼)類(lèi)型,分別確定每個(gè)需要傳輸?shù)纳葏^(qū)的主區(qū)和冗余區(qū)的大?。桓鶕?jù)上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,確定本次需要傳輸?shù)闹鲄^(qū)的地址;以及根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,確定本次需要傳輸?shù)娜哂鄥^(qū)的地址。由于每個(gè)扇區(qū)中的主區(qū)和冗余區(qū)都會(huì)按照?qǐng)D1的方式排列,所以知道了上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,就可以推算出本次需要傳輸?shù)闹鲄^(qū)的地址;同理,根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,就可以推算出本次需要傳輸?shù)娜哂鄥^(qū)的地址。若本次數(shù)據(jù)傳輸為首次傳輸,上次傳輸數(shù)據(jù)的地址是操作信息中需要傳輸?shù)牡谝粋€(gè)扇區(qū)中的主區(qū)的起始地址和第一個(gè)扇區(qū)中的冗余區(qū)的起始地址。較佳地,觸發(fā)狀態(tài)機(jī)將確定的地址傳輸給傳輸狀態(tài)機(jī);相應(yīng)的,步驟202中,傳輸狀態(tài)機(jī)根據(jù)收到的地址與存儲(chǔ)器傳輸數(shù)據(jù)。其中,傳輸狀態(tài)機(jī)可以是單個(gè)狀態(tài)機(jī),還可以包括多個(gè)狀態(tài)機(jī),下面分別進(jìn)行介紹。方式一、傳輸狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī)。較佳地,步驟202中,傳輸狀態(tài)機(jī)根據(jù)本次需要傳輸?shù)闹鲄^(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);以及根據(jù)本次需要傳輸?shù)娜哂鄥^(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。方式二、傳輸狀態(tài)機(jī)包括一個(gè)上層狀態(tài)機(jī)和至少一個(gè)底層狀態(tài)機(jī)。具體傳輸狀態(tài)機(jī)是幾層狀態(tài)機(jī)以及每層有多少個(gè)狀態(tài)機(jī)可以根據(jù)需要確定。較佳地,步驟202中,上層狀態(tài)機(jī)將本次需要傳輸?shù)闹鲄^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī),以及將本次需要傳輸?shù)娜哂鄥^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī);收到主區(qū)的地址的底層狀態(tài)機(jī)根據(jù)收到主區(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);收到冗余區(qū)的地址的底層狀態(tài)機(jī)根據(jù)收到冗余區(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。較佳地,步驟203中,觸發(fā)狀態(tài)機(jī)對(duì)傳輸狀態(tài)機(jī)進(jìn)行監(jiān)控,在本次傳輸結(jié)束后,觸發(fā)狀態(tài)機(jī)根據(jù)操作信息中需要傳輸?shù)纳葏^(qū)數(shù)量,判斷數(shù)據(jù)是否傳輸完畢;若已傳輸?shù)纳葏^(qū)數(shù)量等于需要傳輸?shù)纳葏^(qū)數(shù)量,確定數(shù)據(jù)傳輸完畢;否則,確定數(shù)據(jù)未傳輸完畢。較佳地,步驟201之前還可以進(jìn)一步包括:
觸發(fā)狀態(tài)機(jī)觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令;指令發(fā)送狀態(tài)機(jī)向存儲(chǔ)器發(fā)送傳輸命令和傳輸?shù)刂?;觸發(fā)狀態(tài)機(jī)在指令發(fā)送狀態(tài)機(jī)發(fā)送指令之后,觸發(fā)傳輸狀態(tài)機(jī)進(jìn)行數(shù)據(jù)傳輸。其中,傳輸命令是指要對(duì)存儲(chǔ)器進(jìn)行讀或?qū)懟蚱渌僮鳌鬏數(shù)刂肥侵敢L問(wèn)存儲(chǔ)器的詳細(xì)位置。較佳地,指令發(fā)送狀態(tài)機(jī)與傳輸狀態(tài)機(jī)可以處于同一層。指令發(fā)送狀態(tài)機(jī)可以與傳輸狀態(tài)機(jī)在結(jié)構(gòu)上類(lèi)似,即指令發(fā)送狀態(tài)機(jī)可以是單個(gè)狀態(tài)機(jī)或包括多個(gè)狀態(tài)機(jī)。如果包括多個(gè)狀態(tài)機(jī),比如一個(gè)上層狀態(tài)和一個(gè)下層狀態(tài),則上層狀態(tài)機(jī)可以將需要發(fā)送的傳輸命令和傳輸?shù)刂钒错樞?比如按照發(fā)送信息的時(shí)間順序)分發(fā)給對(duì)應(yīng)的下層狀態(tài)機(jī);而下層狀態(tài)機(jī)將收到消息的發(fā)送給存儲(chǔ)器。其中,上層狀態(tài)機(jī)可以監(jiān)控下層狀態(tài)機(jī)。比如有三個(gè)下層狀態(tài)機(jī),可以將需要發(fā)送的第一條命令發(fā)送給第一個(gè)下層狀態(tài)機(jī),并在下層狀態(tài)機(jī)發(fā)送后再將需要發(fā)送的第二條命令發(fā)送給第二個(gè)下層狀態(tài)機(jī),依次類(lèi)推;也可以將需要發(fā)送的第一條命令發(fā)送給第一個(gè)下層狀態(tài)機(jī),間隔一個(gè)很短的時(shí)間后再將需要發(fā)送的第二條命令發(fā)送給第二個(gè)下層狀態(tài)機(jī),依次類(lèi)推。不管采用什么方式,只需要保證需要一起發(fā)的消息同時(shí)下發(fā)給下層狀態(tài)機(jī);不需要一起發(fā)的消息,分時(shí)下發(fā)給下層狀態(tài)機(jī)。較佳地,步驟203之后還可以進(jìn)一步包括:觸發(fā)狀態(tài)機(jī)觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn);處理狀態(tài)機(jī)與存儲(chǔ)器進(jìn)行狀態(tài)確認(rèn)。較佳地,處理狀態(tài)機(jī)與傳輸狀態(tài)機(jī)可以處于同一層。處理狀態(tài)機(jī)可以與傳輸狀態(tài)機(jī)在結(jié)構(gòu)上類(lèi)似,即處理狀態(tài)機(jī)可以是單個(gè)狀態(tài)機(jī)或包括多個(gè)狀態(tài)機(jī)。其中,處理狀態(tài)機(jī)包括多個(gè)狀態(tài)機(jī)的處理方式與指令發(fā)送狀態(tài)機(jī)包括多個(gè)狀態(tài)機(jī)的處理方式類(lèi)似,在此不再贅述。下面以?xún)蓪雍腿龑訝顟B(tài)機(jī)為例分別對(duì)本發(fā)明的方案進(jìn)行說(shuō)明。例一:兩層狀態(tài)機(jī)。例一的兩層狀態(tài)機(jī)包括處于外層的觸發(fā)狀態(tài)機(jī)和處于內(nèi)層的指令發(fā)送狀態(tài)機(jī)(FSMO)、傳輸狀態(tài)機(jī)(FSMl)和處理狀態(tài)機(jī)(FSM2)。在啟動(dòng)整個(gè)狀態(tài)機(jī)前,軟件配置好主區(qū)的起始地址,冗余區(qū)地起始地址,傳輸?shù)纳葏^(qū)數(shù)目,ECC類(lèi)型(即確定每個(gè)扇區(qū)傳輸?shù)闹鲄^(qū)和冗余區(qū)的大小),必要的命令參數(shù),以及狀態(tài)機(jī)所有步驟分別使能與否。外層狀態(tài)機(jī)按順序執(zhí)行FSMO,F(xiàn)SMl和FSM2三個(gè)獨(dú)立可配的內(nèi)層狀態(tài)機(jī)。其中,F(xiàn)SMl可以循環(huán)多次,每次循環(huán),地址信息會(huì)根據(jù)之前配置的地址和冗余區(qū)大小等信息的自動(dòng)累加。FSMO,F(xiàn)SMl和FSM2三個(gè)內(nèi)層狀態(tài)機(jī)結(jié)構(gòu)相同,可以完全單獨(dú)配置,其具體實(shí)現(xiàn)和工作流程參見(jiàn)附圖3。如圖3所示,本發(fā)明實(shí)施例兩層狀態(tài)機(jī)中觸發(fā)狀態(tài)機(jī)的工作流程包括下列步驟:步驟301、觸發(fā)狀態(tài)機(jī)觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令;步驟302、觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址,并傳輸給FSMl ;
步驟303、觸發(fā)狀態(tài)機(jī)在FSMl完成本次傳輸后判斷是否需要繼續(xù)循環(huán)FSM1,如果需要,則返回步驟302 ;否則,執(zhí)行步驟304 ;步驟304、觸發(fā)狀態(tài)機(jī)觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn)。內(nèi)層狀態(tài)機(jī)(FSM0,F(xiàn)SM1和FSM2),通過(guò)軟件的配置可發(fā)送多個(gè)不同的命令,2組不同的地址(主區(qū)地址和冗余區(qū)地址),一次等待RB ready的操作,以及扇區(qū)內(nèi)主區(qū)數(shù)據(jù)傳輸和扇區(qū)內(nèi)冗余區(qū)數(shù)據(jù)傳輸?shù)葍纱螌?duì)NAND FLASH的寫(xiě)/讀操作。所有NAND FLASH需要的操作,如復(fù)位,讀寫(xiě),配置等,均可通過(guò)內(nèi)層狀態(tài)機(jī)實(shí)現(xiàn)。特別地,一個(gè)扇區(qū)內(nèi)的主區(qū)和冗余區(qū)的完整讀寫(xiě)操作,包括發(fā)送讀寫(xiě)命令、地址以及數(shù)據(jù)有效,可以由一個(gè)內(nèi)層狀態(tài)機(jī)一次性完成。具體FSMl的操作流程可以參見(jiàn)圖4。如圖4所示,本發(fā)明實(shí)施例兩層狀態(tài)機(jī)中傳輸狀態(tài)機(jī)的工作流程包括下列步驟:步驟401、FSMl在收到來(lái)自觸發(fā)狀態(tài)機(jī)的地址后,發(fā)送命令CMD0。步驟402、FSMl 發(fā)送地址 ADDRO。步驟403、FSMl 發(fā)送命令 CMDI。步驟404、FSM1判斷是否等待RB Ready,若是,則等待RB后執(zhí)行步驟405 ;否則,直接執(zhí)行步驟405。其中,如果步驟401 步驟403為讀取存儲(chǔ)器的物理頁(yè)面的數(shù)據(jù)到自己的buffer,再?gòu)腷uffer中讀取數(shù)據(jù),則需要等待RB ready,若步驟401 步驟403為直接讀取存儲(chǔ)器的buffer中的數(shù)據(jù),貝U不需要等待RB ready。在等待判斷存儲(chǔ)器的狀態(tài),也即等待RB信號(hào)由高到低,再由低到高的一個(gè)跳變變化,并等到連續(xù)內(nèi)部采樣N(比如2)次RB信號(hào)均為高之后,就可以開(kāi)始執(zhí)行405,N是正整數(shù)。假設(shè)進(jìn)行讀操作(寫(xiě)操作與讀操作類(lèi)似,在此不再贅述):步驟405、FSMl根據(jù)主區(qū)地址,讀存儲(chǔ)器中的一個(gè)扇區(qū)中的主區(qū)數(shù)據(jù)給buffer。步驟406、FSMl 發(fā)送命令 CMD2。步驟407、FSMl 發(fā)送地址 ADDRl。步驟408、FSMl 發(fā)送命令 CMD3。步驟409、FSMl根據(jù)冗余區(qū)地址,讀存儲(chǔ)器中的一個(gè)扇區(qū)中的冗余區(qū)數(shù)據(jù)給buffer。其中,CMDO I和ADDRO訪問(wèn)的是存儲(chǔ)器的主區(qū)命令和地址;CMD2 3和ADDRl訪問(wèn)的是存儲(chǔ)器的冗余區(qū)命令和地址。上述內(nèi)容可以看出,整個(gè)狀態(tài)機(jī)需要完成讀寫(xiě)操作時(shí),F(xiàn)SMO通常發(fā)送讀寫(xiě)所必須的命令和行地址;FSM1可做循環(huán),循環(huán)次數(shù)由軟件配置為本次傳輸?shù)纳葏^(qū)數(shù)目,每執(zhí)行一次FSM1,可以完成一次扇區(qū)讀寫(xiě)工作,并且隨后地址會(huì)自動(dòng)累加,執(zhí)行下一次FSM1,直到完成所有的扇區(qū)操作;FSM2 —般完成某些操作必要的后續(xù)命令,如寫(xiě)操作的確認(rèn)命令(0x10)等。在這種狀態(tài)機(jī)結(jié)構(gòu)的幫助下,軟件一次配置,并啟動(dòng)一次硬件狀態(tài)機(jī),本來(lái)很復(fù)雜的整頁(yè)讀寫(xiě)操作,可以一次性完成。當(dāng)然,除了讀寫(xiě)操作,NAND FLASH的其它所有操作,都能通過(guò)對(duì)FSM0,F(xiàn)SM1,F(xiàn)SM2的不同配置,一次完成。這種兩層狀態(tài)機(jī)結(jié)構(gòu),減少在對(duì)NAND FLASH操作時(shí)的軟件干預(yù),大大提高了工作效率和讀寫(xiě)速度。例一中,外層狀態(tài)機(jī)包含多個(gè)內(nèi)層狀態(tài)機(jī),完成對(duì)內(nèi)層狀態(tài)機(jī)的調(diào)用和循環(huán),并做地址累加的工作;內(nèi)層狀態(tài)機(jī)包括發(fā)送命令、地址、傳輸扇區(qū)數(shù)據(jù)等基本操作。兩層狀態(tài)機(jī)結(jié)構(gòu)的NAND FLASH控制器,可通過(guò)靈活的配置多個(gè)內(nèi)層狀態(tài)機(jī)的各種參數(shù),一次性地完成對(duì)NAND FLASH整頁(yè)數(shù)據(jù)的讀寫(xiě)及其它復(fù)雜操作。例二:三層狀態(tài)機(jī)。例二的三層狀態(tài)機(jī)包括處于外層的觸發(fā)狀態(tài)機(jī),處于中層的三個(gè)上層狀態(tài)機(jī)(FSMO、FSMl和FSM2),處于底層的12個(gè)底層狀態(tài)機(jī)。其中,每個(gè)上層狀態(tài)機(jī)對(duì)應(yīng)四個(gè)底層狀態(tài)機(jī)。一個(gè)上層狀態(tài)機(jī)和對(duì)應(yīng)的四個(gè)底層狀態(tài)機(jī)為一組,一共有三組。這三組相當(dāng)于上面描述的指令發(fā)送狀態(tài)、傳輸狀態(tài)機(jī)和處理狀態(tài)機(jī)。當(dāng)然,根據(jù)需要指令發(fā)送狀態(tài)機(jī)和/或處理狀態(tài)機(jī)也可以是單個(gè)狀態(tài)機(jī),即不需要對(duì)應(yīng)的底層狀態(tài)機(jī)。若指令發(fā)送狀態(tài)機(jī)或處理狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī),則底層狀態(tài)機(jī)就是8個(gè);若指令發(fā)送狀態(tài)機(jī)和處理狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī),則底層狀態(tài)機(jī)就是4個(gè)。在實(shí)施中,可以固定底層狀態(tài)機(jī)的數(shù)量,比如就是12個(gè)。在啟動(dòng)整個(gè)狀態(tài)機(jī)前,軟件配置好主區(qū)的起始地址,冗余區(qū)地起始地址,傳輸?shù)纳葏^(qū)數(shù)目,ECC類(lèi)型(即確定每個(gè)扇區(qū)傳輸?shù)闹鲄^(qū)和冗余區(qū)的大小),必要的命令參數(shù),以及狀態(tài)機(jī)所有步驟分別使能與否。外層狀態(tài)機(jī)按順序執(zhí)行FSMO,F(xiàn)SMl和FSM2三個(gè)獨(dú)立可配的內(nèi)層狀態(tài)機(jī)。其中,F(xiàn)SMl可以循環(huán)多次,每次循環(huán),地址信息會(huì)根據(jù)之前配置的地址和冗余區(qū)大小等信息的自動(dòng)累加。FSMO,F(xiàn)SMl和FSM2三個(gè)內(nèi)層狀態(tài)機(jī)結(jié)構(gòu)相同,可以完全單獨(dú)配置,其具體實(shí)現(xiàn)和工作流程參見(jiàn)附圖3,在此不再贅述。中層狀態(tài)機(jī)FSMx (X = 0,1,2)(即上層狀態(tài)機(jī))實(shí)質(zhì)是依次運(yùn)行4個(gè)內(nèi)層狀態(tài)機(jī)(FSMxy, y = 0,12,3)(即底層狀態(tài)機(jī))。當(dāng)然,這4個(gè)內(nèi)層狀態(tài)機(jī)都是獨(dú)立配置,可任意使能或取消。FSMO, FSMl和FSM2的區(qū)別在于傳遞給對(duì)應(yīng)底層狀態(tài)機(jī)的信息不同,比如FSMO傳遞的就是命令;FSM1就是地址。如圖5為本發(fā)明實(shí)施例三層狀態(tài)機(jī)中傳輸狀態(tài)機(jī)中的上層狀態(tài)機(jī)的工作流程包括下列步驟:步驟501、FSMx判斷是否觸發(fā)底層狀態(tài)機(jī),若是,則執(zhí)行步驟502,否則執(zhí)行步驟503。步驟502、FSMx向?qū)?yīng)的第一個(gè)底層狀態(tài)機(jī)發(fā)送信息。步驟503、FSMx將已執(zhí)行的底層狀態(tài)機(jī)數(shù)量增加I。步驟504、FSMx判斷已執(zhí)行的底層狀態(tài)機(jī)數(shù)量是否等于4,若是,則跳出本流程;否貝U,返回步驟501。底層狀態(tài)機(jī)FSMxy(x = 0,12 ;y = 0,1,2,3)每個(gè)都獨(dú)立配置,可以完成一些基本操作。每一個(gè)底層狀態(tài)機(jī)FSMxy最多可以發(fā)一個(gè)命令,一組地址(行地址,主區(qū)列地址或冗余區(qū)列地址,行地址+列地址三者選一),一次等待RB ready和一次扇區(qū)主區(qū)或冗余區(qū)傳輸。具體負(fù)責(zé)傳輸數(shù)據(jù)的底層狀態(tài)機(jī)的操作流程可以參見(jiàn)圖6。如圖6所示,本發(fā)明實(shí)施例三層狀態(tài)機(jī)中傳輸狀態(tài)機(jī)中的底層狀態(tài)機(jī)的工作流程包括下列步驟:步驟601、FSMxy在收到來(lái)自觸發(fā)狀態(tài)機(jī)的地址后,發(fā)送命令CMDxy。步驟602、FSMxy 發(fā)送地址 ADDRxy。步驟603、FSMxy 發(fā)送命令 CMDxy。步驟604、FSMxy判斷是否等待RB Ready,若是,則等待RB后執(zhí)行步驟605 ;否則,直接執(zhí)行步驟605。假設(shè)進(jìn)行讀操作(寫(xiě)操作與讀操作類(lèi)似,在此不再贅述):步驟605、FSMxy根據(jù)主區(qū)(或冗余區(qū))地址,讀存儲(chǔ)器中的一個(gè)扇區(qū)中的主區(qū)(或冗余區(qū))數(shù)據(jù)給ROM。上述內(nèi)容可以看出,無(wú)論多復(fù)雜的扇區(qū)讀寫(xiě)操作,都可以由中層狀態(tài)機(jī)的4個(gè)具有不同配置的內(nèi)層狀態(tài)機(jī)完成。在寫(xiě)操作時(shí),4個(gè)內(nèi)層狀態(tài)機(jī)可如此配置:第I個(gè)狀態(tài)機(jī)發(fā)送選擇地址命令(0x85)和主區(qū)列地址,第2個(gè)狀態(tài)機(jī)傳輸主區(qū)數(shù)據(jù),第3個(gè)狀態(tài)機(jī)發(fā)送選擇地址命令(0x85)和冗余區(qū)列地址,第4個(gè)狀態(tài)機(jī)傳輸冗余區(qū)數(shù)據(jù);在讀操作時(shí),4個(gè)內(nèi)層狀態(tài)機(jī)可如此配置:第I個(gè)狀態(tài)機(jī)發(fā)送第一個(gè)選擇地址命令(0x05)和主區(qū)列地址,第2個(gè)狀態(tài)機(jī)發(fā)送第二個(gè)選擇地址命令(OxeO),然后傳輸主區(qū)數(shù)據(jù),第3個(gè)狀態(tài)機(jī)發(fā)送第一個(gè)選擇地址命令(0x05)和冗余區(qū)列地址,第4個(gè)狀態(tài)機(jī)發(fā)送第二個(gè)選擇地址命令(OxeO),然后傳輸冗余區(qū)數(shù)據(jù)。和例一相似,外層狀態(tài)機(jī)的FSMl循環(huán),并累加主區(qū)和冗余區(qū)列地址,可完成整頁(yè)數(shù)據(jù)的讀寫(xiě)操作,F(xiàn)SMO和FSM2 —般用來(lái)發(fā)送一些初始和結(jié)束的命令或地址。例二與例一相比,前者配置更加靈活,核心(內(nèi)層)狀態(tài)機(jī)更簡(jiǎn)便。例二中,外層狀態(tài)機(jī)包含多個(gè)中層狀態(tài)機(jī),完成對(duì)中層狀態(tài)機(jī)的調(diào)用和循環(huán),并做地址累加的工作;每個(gè)中層狀態(tài)機(jī)包含4個(gè)內(nèi)層狀態(tài)機(jī),完成對(duì)內(nèi)層狀態(tài)機(jī)的調(diào)用;每個(gè)內(nèi)層狀態(tài)機(jī)包括發(fā)送命令、地址、傳輸扇區(qū)數(shù)據(jù)等基本操作。三層狀態(tài)機(jī)結(jié)構(gòu)的NAND FLASH控制器,可通過(guò)靈活的配置其外層、中層、內(nèi)層等多個(gè)狀態(tài)機(jī)的參數(shù),一次性地完成對(duì)NAND FLASH整頁(yè)數(shù)據(jù)的讀寫(xiě)及其它復(fù)雜操作。利用多層狀態(tài)機(jī)架構(gòu),自動(dòng)累加地址,循環(huán)嵌套狀態(tài)機(jī)某些操作等方法,來(lái)實(shí)現(xiàn)對(duì)NAND FLASH裝置多個(gè)扇區(qū)(sector)或整個(gè)頁(yè)(page)操作的思想,也是本發(fā)明的權(quán)利要求。其中,本發(fā)明三層以上狀態(tài)機(jī)的工作方式與上述兩層和三層類(lèi)似,在此不再贅述?;谕话l(fā)明構(gòu)思,本發(fā)明實(shí)施例中還提供了一種傳輸數(shù)據(jù)的裝置,由于傳輸數(shù)據(jù)的裝置解決問(wèn)題的原理與傳輸數(shù)據(jù)的方法相似,因此傳輸數(shù)據(jù)的裝置的實(shí)施可以參見(jiàn)方法的實(shí)施,重復(fù)之處不再贅述。以上的兩層,三層狀態(tài)機(jī)結(jié)構(gòu),僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明。其它的基于多層(兩層或兩層以上)狀態(tài)機(jī)結(jié)構(gòu)的NAND FLASH控制器,也應(yīng)在本發(fā)明的權(quán)利要求之類(lèi),凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。從上述內(nèi)容可以看出:1、由于采用多層狀態(tài)機(jī)完成軟件累加、配置主區(qū)列地址和冗余區(qū)列地址的過(guò)程,從而提高了 NAND FLASH控制器的速度和效率,滿足NAND FLASH控制器需求;2、采用多層狀態(tài)機(jī)操作NAND FLASH控制器中的多扇區(qū)或整頁(yè)數(shù)據(jù),期間無(wú)需軟件干預(yù),節(jié)省了 CPU開(kāi)銷(xiāo)的同時(shí),提高NAND FLASH控制器的整體讀寫(xiě)速度;3、多層狀態(tài)機(jī)中的每一項(xiàng)操作都靈活可配,隨著NAND FLASH控制器的裝置命令操作的多樣化和復(fù)雜化,這種基于多層狀態(tài)機(jī)的NAND FLASH控制器可滿足不同的操作時(shí)序。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種與存儲(chǔ)器傳輸數(shù)據(jù)的裝置,其特征在于,該裝置包括: 觸發(fā)狀態(tài)機(jī),用于根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址,在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟,其中若本次數(shù)據(jù)傳輸為首次傳輸,所述上次傳輸數(shù)據(jù)的地址是所述操作信息中需要傳輸?shù)牡谝粋€(gè)扇區(qū)中的主區(qū)的起始地址和第一個(gè)扇區(qū)中的冗余區(qū)的起始地址; 傳輸狀態(tài)機(jī),用于根據(jù)所述觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù)。
2.如權(quán)利要求1所述的裝置,其特征在于,所述觸發(fā)狀態(tài)機(jī)還用于: 根據(jù)所述操作信息中的錯(cuò)誤糾正碼ECC類(lèi)型,分別確定每個(gè)需要傳輸?shù)纳葏^(qū)的主區(qū)和冗余區(qū)的大?。桓鶕?jù)上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,確定本次需要傳輸?shù)闹鲄^(qū)的地址;以及根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,確定本次需要傳輸?shù)娜哂鄥^(qū)的地址。
3.如權(quán)利要求1或2所述的裝置,其特征在于,所述觸發(fā)狀態(tài)機(jī)具體用于: 根據(jù)所述操作信息中需要傳輸?shù)纳葏^(qū)數(shù)量,判斷數(shù)據(jù)是否傳輸完畢;若已傳輸?shù)纳葏^(qū)數(shù)量等于需要傳輸?shù)纳葏^(qū)數(shù)量,確定數(shù)據(jù)傳輸完畢;否則,確定數(shù)據(jù)未傳輸完畢。
4.如權(quán)利要求2所述的裝置,其特征在于,所述傳輸狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī); 所述傳輸狀態(tài)機(jī)具體用于: 根據(jù)本次需要傳輸?shù)闹鲄^(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);以及根據(jù)本次需要傳輸?shù)娜哂鄥^(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù); 所述傳輸狀態(tài)機(jī)包括一個(gè)上層狀態(tài)機(jī)和至少一個(gè)底層狀態(tài)機(jī); 所述上層狀態(tài)機(jī)具體用于: 將本次需要傳輸?shù)闹鲄^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī),以及將本次需要傳輸?shù)娜哂鄥^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī); 收到主區(qū)的地址的底層狀態(tài)機(jī)具體用于:根據(jù)收到主區(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù); 收到冗余區(qū)的地址的底層狀態(tài)機(jī)具體用于:根據(jù)收到冗余區(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。
5.如權(quán)利要求1或2所述的裝置,其特征在于,所述裝置還包括:指令發(fā)送狀態(tài)機(jī); 所述觸發(fā)狀態(tài)機(jī)具體用于: 觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令,在所述指令發(fā)送狀態(tài)機(jī)發(fā)送指令之后,觸發(fā)所述傳輸狀態(tài)機(jī)進(jìn)行數(shù)據(jù)傳輸以及ECC操作; 所述指令發(fā)送狀態(tài)機(jī)具體用于:向所述存儲(chǔ)器發(fā)送傳輸命令和傳輸?shù)刂贰?br>
6.如權(quán)利要求5所述的裝置,其特征在于,所述指令發(fā)送狀態(tài)機(jī)包括多個(gè)狀態(tài)機(jī)。
7.如權(quán)利要求1或2所述的裝置,其特征在于,所述裝置還包括:處理狀態(tài)機(jī); 所述觸發(fā)狀態(tài)機(jī)具體用于:在所述傳輸狀態(tài)機(jī)完成數(shù)據(jù)傳輸之后,觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn); 所述處理狀態(tài)機(jī)用于:與所述存儲(chǔ)器進(jìn)行狀態(tài)確認(rèn)。
8.一種根據(jù)權(quán)利要求1所述的裝置進(jìn)行數(shù)據(jù)傳輸?shù)姆椒?,其特征在于,該方法包?觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址,其中若本次數(shù)據(jù)傳輸為首次傳輸,所述上次傳輸數(shù)據(jù)的地址是所述操作信息中需要傳輸?shù)牡谝粋€(gè)扇區(qū)中的主區(qū)的起始地址和第一個(gè)扇區(qū)中的冗余區(qū)的起始地址; 傳輸狀態(tài)機(jī)根據(jù)所述觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù); 所述觸發(fā)狀態(tài)機(jī)在本次傳輸結(jié)束 后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟。
9.如權(quán)利要求8所述的方法,其特征在于,所述觸發(fā)狀態(tài)機(jī)確定本次需要傳輸數(shù)據(jù)的地址包括: 所述觸發(fā)狀態(tài)機(jī)根據(jù)所述操作信息中的ECC類(lèi)型,分別確定每個(gè)需要傳輸?shù)纳葏^(qū)的主區(qū)和冗余區(qū)的大??; 所述觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸?shù)闹鲄^(qū)的地址和本次需要傳輸?shù)闹鲄^(qū)的大小,確定本次需要傳輸?shù)闹鲄^(qū)的地址;以及根據(jù)上次傳輸?shù)娜哂鄥^(qū)的地址和本次需要傳輸?shù)娜哂鄥^(qū)的大小,確定本次需要傳輸?shù)娜哂鄥^(qū)的地址。
10.如權(quán)利要求8或9所述的方法,其特征在于,所述傳輸狀態(tài)機(jī)判斷數(shù)據(jù)是否傳輸完畢包括: 所述觸發(fā)狀態(tài)機(jī)根據(jù)所述操作信息中需要傳輸?shù)纳葏^(qū)數(shù)量,判斷數(shù)據(jù)是否傳輸完畢;若已傳輸?shù)纳葏^(qū)數(shù)量等于需要傳輸?shù)纳葏^(qū)數(shù)量,確定數(shù)據(jù)傳輸完畢;否則,確定數(shù)據(jù)未傳輸完畢。
11.如權(quán)利要求9所述的方法,其特征在于,所述傳輸狀態(tài)機(jī)是單個(gè)狀態(tài)機(jī);所述傳輸狀態(tài)機(jī)傳輸數(shù)據(jù)包括: 所述傳輸狀態(tài)機(jī)根據(jù)本次需要傳輸?shù)闹鲄^(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù);以及根據(jù)本次需要傳輸?shù)娜哂鄥^(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù); 所述傳輸狀態(tài)機(jī)包括一個(gè)上層狀態(tài)機(jī)和至少一個(gè)底層狀態(tài)機(jī);所述傳輸狀態(tài)機(jī)傳輸數(shù)據(jù)包括: 所述上層狀態(tài)機(jī)將本次需要傳輸?shù)闹鲄^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī),以及將本次需要傳輸?shù)娜哂鄥^(qū)的地址,發(fā)送給對(duì)應(yīng)的一個(gè)底層狀態(tài)機(jī); 收到主區(qū)的地址的底層狀態(tài)機(jī)根據(jù)收到主區(qū)的地址,讀或?qū)憣?duì)應(yīng)主區(qū)的數(shù)據(jù); 收到冗余區(qū)的地址的底層狀態(tài)機(jī)根據(jù)收到冗余區(qū)的地址,讀或?qū)憣?duì)應(yīng)冗余區(qū)的數(shù)據(jù)。
12.如權(quán)利要求8或9所述的方法,其特征在于,所述傳輸狀態(tài)機(jī)進(jìn)行首次數(shù)據(jù)傳輸之前還包括: 所述觸發(fā)狀態(tài)機(jī)觸發(fā)指令發(fā)送狀態(tài)機(jī)發(fā)送指令; 所述指令發(fā)送狀態(tài)機(jī)向所述存儲(chǔ)器發(fā)送傳輸命令和傳輸?shù)刂罚? 所述觸發(fā)狀態(tài)機(jī)在所述指令發(fā)送狀態(tài)機(jī)發(fā)送指令之后,觸發(fā)所述傳輸狀態(tài)機(jī)進(jìn)行數(shù)據(jù)傳輸以及ECC操作。
13.如權(quán)利要求8或9所述的方法,其特征在于,所述傳輸狀態(tài)機(jī)完成數(shù)據(jù)傳輸之后還包括: 所述觸發(fā)狀態(tài)機(jī)觸發(fā)處理狀態(tài)機(jī)進(jìn)行指令確認(rèn); 所述處理狀態(tài)機(jī)與所述存儲(chǔ)器進(jìn)行狀態(tài)確認(rèn)。
全文摘要
本發(fā)明實(shí)施例涉及存儲(chǔ)器的控制器領(lǐng)域,特別涉及一種與存儲(chǔ)器傳輸數(shù)據(jù)的裝置及其傳輸數(shù)據(jù)的方法,用以解決現(xiàn)有技術(shù)中存在的單層狀態(tài)機(jī)會(huì)造成NAND FLASH控制器的速度和效率下降,無(wú)法滿足NAND FLASH控制器需求的問(wèn)題。本發(fā)明實(shí)施例的方法包括觸發(fā)狀態(tài)機(jī)根據(jù)上次傳輸數(shù)據(jù)的地址和預(yù)先配置的操作信息,確定本次需要傳輸數(shù)據(jù)的地址;傳輸狀態(tài)機(jī)根據(jù)觸發(fā)狀態(tài)機(jī)確定的本次需要傳輸數(shù)據(jù)的地址與存儲(chǔ)器傳輸數(shù)據(jù);觸發(fā)狀態(tài)機(jī)在本次傳輸結(jié)束后,根據(jù)預(yù)先配置的操作信息判斷數(shù)據(jù)是否傳輸完畢,并在確定數(shù)據(jù)傳輸未完畢后,返回到確定本次需要傳輸數(shù)據(jù)的地址的步驟。采用本發(fā)明能夠提高NAND FLASH控制器的速度和效率,滿足控制器需求。
文檔編號(hào)G06F13/16GK103164361SQ20111040685
公開(kāi)日2013年6月19日 申請(qǐng)日期2011年12月8日 優(yōu)先權(quán)日2011年12月8日
發(fā)明者阮航, 李永斌, 龐成章, 唐杰 申請(qǐng)人:炬力集成電路設(shè)計(jì)有限公司