本文涉及但不限于存儲(chǔ)技術(shù),尤指一種快閃記憶體(Nand Flash)控制器和終端以及控制Nand Flash的方法。
背景技術(shù):
快閃記憶體(Nand Flash)在手機(jī)、移動(dòng)存儲(chǔ)卡等大容量存儲(chǔ)設(shè)備中得到了廣泛的使用。如圖1所示,為了保證數(shù)據(jù)讀出時(shí)能進(jìn)行誤碼檢測和糾正,通常都是在數(shù)據(jù)寫入Nand Flash時(shí),需要按一定規(guī)則寫入一部分冗余數(shù)據(jù),用糾錯(cuò)編解碼電路進(jìn)行錯(cuò)誤檢查和糾正(ECC,Error Code Correction)控制。
相關(guān)的技術(shù)方案:
相關(guān)用于Nand Flash控制器的糾錯(cuò)編解碼電路對(duì)于ECC的糾錯(cuò)能力不可配置,適應(yīng)性會(huì)受到影響,隨著糾錯(cuò)能力增加,糾錯(cuò)編解碼電路的面積也會(huì)增加許多,這個(gè)時(shí)候Nand Flash控制器的功耗產(chǎn)生的影響會(huì)比較明顯。
對(duì)于功耗較大的問題,可以通過時(shí)鐘降頻,時(shí)鐘反向等方式降低Nand Flash控制器的功耗,但是對(duì)于數(shù)據(jù)容量較大,糾錯(cuò)能力較強(qiáng)的ECC算法,降頻會(huì)影響到編解碼的時(shí)間,從而影響到讀寫速度,而相關(guān)提出的Nand Flash控制器都是功耗低,面積小,對(duì)應(yīng)的ECC能力也比較弱。
目前國內(nèi)外關(guān)于Nand Flash控制器電路的研究和設(shè)計(jì)存在以下幾個(gè)缺陷:
第一,可擴(kuò)展性差,這是因?yàn)榻^大多數(shù)的Nand Flash控制器中的糾錯(cuò)編解碼電路都是基于某一個(gè)具體的應(yīng)用系統(tǒng)或者某一款具體的Nand Flash來設(shè)計(jì)的。
第二,適應(yīng)性差,有些Nand Flash控制器沒有數(shù)據(jù)校驗(yàn)功能,或者ECC校驗(yàn)?zāi)芰^低,不能滿足較大容量的Nand Flash糾錯(cuò)要求。
第三,功耗高,這主要是因?yàn)楹芏郋CC的設(shè)計(jì)為了追求功能而使用了大量的寄存器,同時(shí)又不注意降低功耗。
第四,傳輸速度慢。有些控制器的設(shè)計(jì)在低功耗設(shè)計(jì)中采用了降頻等方式,以速度為代價(jià)換取了功耗的降低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提出了一種Nand Flash控制器和終端以及控制Nand Flash的方法,能夠提高Nand Flash控制器的可擴(kuò)展性。
本發(fā)明實(shí)施例提出了一種快閃記憶體Nand Flash控制器,包括:
第一寄存器,用于存儲(chǔ)CPU存入的命令;
第三寄存器,用于存儲(chǔ)需要寫入Nand Flash的數(shù)據(jù);
Nand Flash狀態(tài)機(jī)電路,用于解析第一寄存器中的命令,當(dāng)解析得到的命令為寫入命令時(shí),將第三寄存器中需要寫入Nand Flash的數(shù)據(jù)寫入雙口隨機(jī)存取存儲(chǔ)器DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中;
DPRAM信號(hào)輸入輸出電路,用于存儲(chǔ)Nand Flash狀態(tài)機(jī)電路寫入的數(shù)據(jù);
ECC產(chǎn)生模塊包括編碼子模塊和寄存器組;
編碼子模塊,用于在Nand Flash狀態(tài)機(jī)電路將DPRAN信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash的過程中,根據(jù)預(yù)先配置的糾錯(cuò)能力對(duì)需要寫入Nand Flash的數(shù)據(jù)進(jìn)行編碼運(yùn)算得到冗余碼,將計(jì)算得到的冗余碼存入寄存器組;
寄存器組,用于存儲(chǔ)編碼子模塊寫入的冗余碼。
可選的,所述Nand Flash控制器還包括:
第二寄存器,用于存取CPU存入讀取的數(shù)據(jù)的地址;
所述Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)所述解析得到的命令為讀取命令時(shí),根據(jù)所述第二寄存器中的地址以第三預(yù)設(shè)長度為單位依次讀取Nand Flash中需要讀取的數(shù)據(jù)及對(duì)應(yīng)的冗余碼,并將讀取的數(shù)據(jù)和冗余碼寫入DPRAM信號(hào)輸入輸出電路中,直到將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中;當(dāng)接收到編碼子模塊的糾正完成的信號(hào),控制系統(tǒng)接口及中斷電路產(chǎn)生中斷信號(hào);當(dāng)CPU從第三寄存器中讀取數(shù)據(jù)時(shí),將DPRAM信號(hào)輸入輸出電路中糾正后的數(shù)據(jù)寫入第三寄存器中;
所述ECC產(chǎn)生模塊還包括解碼子模塊;
所述解碼子模塊,用于根據(jù)DPRAM信號(hào)輸入輸出電路中的冗余碼對(duì)讀取的第二預(yù)設(shè)長度的數(shù)據(jù)進(jìn)行糾正,向Nand Flash狀態(tài)機(jī)電路發(fā)送糾正完成的信號(hào)。
可選的,所述Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)所述解析得到的命令為寫入命令時(shí),控制所述ECC產(chǎn)生模塊中的解碼子模塊為非工作狀態(tài);
當(dāng)所述解析得到的命令為讀取命令時(shí),控制所述ECC產(chǎn)生模塊中的編碼子模塊為非工作狀態(tài)。
可選的,所述寄存器組的個(gè)數(shù)為N個(gè);N為大于或等于1的整數(shù);
所述Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)所述解析得到的命令為寫入命令時(shí),根據(jù)預(yù)先配置的糾錯(cuò)能力確定需要的寄存器組的個(gè)數(shù),將需要的寄存器組設(shè)置為工作狀態(tài),將其他的寄存器組設(shè)置為非工作狀態(tài)。
可選的,所述Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)所述解析得到的命令為設(shè)置指令時(shí),根據(jù)設(shè)置指令設(shè)置對(duì)應(yīng)的參數(shù)。
可選的,所述Nand Flash狀態(tài)機(jī)電路具體用于:
解析所述第一寄存器中的命令,當(dāng)所述解析得到的命令為寫入命令時(shí),將所述第三寄存器中需要寫入Nand Flash的數(shù)據(jù)中長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入所述DPRAM信號(hào)輸入輸出電路中,并將所述DPRAM信號(hào)輸入輸出電路中長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)中第二預(yù)設(shè)長度的數(shù)據(jù)以第三預(yù)設(shè)長度為單位依次寫入所述Nand Flash中;
在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入所述Nand Flash后,讀取所述ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將所述冗余碼寫入到所述Nand Flash中;
繼續(xù)執(zhí)行將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)中下一個(gè)第二預(yù)設(shè)長度的數(shù)據(jù)以第三預(yù)設(shè)長度為單位依次寫入Nand Flash中的步驟,直到將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)及其對(duì)應(yīng)的冗余碼全部寫入Nand Flash;
繼續(xù)執(zhí)行將需要寫入Nand Flash的數(shù)據(jù)中下一個(gè)長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中的步驟,直到將需要寫入Nand Flash的數(shù)據(jù)全部寫入DPRAM信號(hào)輸入輸出電路中。
可選的,所述Nand Flash狀態(tài)機(jī)電路具體用于:
以第一預(yù)設(shè)長度為單位依次將需要寫入Nand Flash的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)以第三預(yù)設(shè)長度為單位依次寫入Nand Flash中;
在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中;
繼續(xù)執(zhí)行以第一預(yù)設(shè)長度為單位依次將需要寫入Nand Flash的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中的步驟,直到將需要寫入Nand Flash的數(shù)據(jù)全部寫入DPRAM信號(hào)輸入輸出電路中。
可選的,所述糾錯(cuò)能力包括:
512字節(jié)Bytes數(shù)據(jù)糾正4比特bits或8bits或15bits錯(cuò)誤,或1K Bytes數(shù)據(jù)糾正24bits或40bits或60bits錯(cuò)誤。
本發(fā)明實(shí)施例還提出了一種終端,包括:上述任意一個(gè)快閃記憶體Nand Flash控制器;
還包括:
Nand Flash,用于存儲(chǔ)CPU寫入的數(shù)據(jù);
CPU,用于將命令存入第一寄存器;當(dāng)存入的命令為寫入命令時(shí),將需要寫入Nand Flash的數(shù)據(jù)存入第三寄存器;當(dāng)存入的命令為讀取命令時(shí),將讀取的數(shù)據(jù)的地址存入第二寄存器。
可選的,所述CPU還用于:
檢測到系統(tǒng)接口及中斷電路產(chǎn)生的中斷信號(hào)后,從所述第三寄存器中讀取數(shù)據(jù)。
可選的,所述CPU還用于:
接收到來自用戶的設(shè)置指令,將設(shè)置指令存入所述第一寄存器。
本發(fā)明實(shí)施例還提出了一種控制快閃記憶體Nand Flash的方法,包括:
CPU將寫入命令存入Nand Flash控制器的第一寄存器,將需要寫入Nand Flash的數(shù)據(jù)存入Nand Flash控制器的第三寄存器;
Nand Flash控制器的Nand Flash狀態(tài)機(jī)電路解析第一寄存器中的命令,當(dāng)解析得到的命令為寫入命令時(shí),將第三寄存器中需要寫入Nand Flash的數(shù)據(jù)寫入雙口隨機(jī)存取存儲(chǔ)器DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中;
Nand Flash控制器的ECC產(chǎn)生模塊的編碼子模塊在Nand Flash狀態(tài)機(jī)電路將DPRAN信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash的過程中,根據(jù)預(yù)先配置的糾錯(cuò)能力對(duì)需要寫入Nand Flash的數(shù)據(jù)進(jìn)行編碼運(yùn)算得到冗余碼,將計(jì)算得到的冗余碼存入ECC產(chǎn)生模塊的寄存器組。
可選的,還包括:
所述CPU將讀取命令存入Nand Flash控制器的第一寄存器,將讀取的數(shù)據(jù)的地址存入Nand Flash控制器的第二寄存器;
所述Nand Flash狀態(tài)機(jī)電路解析第一寄存器中的命令,當(dāng)所述解析得到的命令為讀取命令時(shí),根據(jù)所述第二寄存器中的地址以第三預(yù)設(shè)長度為單位依次讀取Nand Flash中需要讀取的數(shù)據(jù)及對(duì)應(yīng)的冗余碼,并將讀取的數(shù)據(jù)和冗余碼寫入DPRAM信號(hào)輸入輸出電路中,直到將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中;
所述Nand Flash控制器的ECC產(chǎn)生模塊的解碼子模塊根據(jù)DPRAM信號(hào)輸入輸出電路中的冗余碼對(duì)讀取的第二預(yù)設(shè)長度的數(shù)據(jù)進(jìn)行糾正,向Nand Flash狀態(tài)機(jī)電路發(fā)送糾正完成的信號(hào);
當(dāng)所述Nand Flash狀態(tài)機(jī)電路接收到編碼子模塊的糾正完成的信號(hào),控制系統(tǒng)接口及中斷電路產(chǎn)生中斷信號(hào);
所述CPU檢測到所述Nand Flash控制器的系統(tǒng)接口及中斷電路產(chǎn)生的中斷信號(hào)后,從所述第三寄存器中讀取數(shù)據(jù);
當(dāng)CPU從第三寄存器中讀取數(shù)據(jù)時(shí),所述Nand Flash狀態(tài)機(jī)電路將DPRAM信號(hào)輸入輸出電路中糾正后的數(shù)據(jù)寫入所述第三寄存器中。
與相關(guān)技術(shù)相比,本發(fā)明實(shí)施例的技術(shù)方案包括:第一寄存器,用于存儲(chǔ)CPU存入的命令;第三寄存器,用于存儲(chǔ)需要寫入Nand Flash的數(shù)據(jù);Nand Flash狀態(tài)機(jī)電路,用于解析第一寄存器中的命令,當(dāng)解析得到的命令為寫入命令時(shí),將第三寄存器中需要寫入Nand Flash的數(shù)據(jù)寫入雙口隨機(jī)存取存儲(chǔ)器DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中;DPRAM信號(hào)輸入輸出電路,用于存儲(chǔ)Nand Flash狀態(tài)機(jī)電路寫入的數(shù)據(jù);ECC產(chǎn)生模塊包括編碼子模塊和寄存器組;編碼子模塊,用于在Nand Flash狀態(tài)機(jī)電路將DPRAN信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash的過程中,根據(jù)預(yù)先配置的糾錯(cuò)能力對(duì)需要寫入Nand Flash的數(shù)據(jù)進(jìn)行編碼運(yùn)算得到冗余碼,將計(jì)算得到的冗余碼存入寄存器組;寄存器組,用于存儲(chǔ)編碼子模塊寫入的冗余碼。通過本發(fā)明實(shí)施例的方案,ECC產(chǎn)生模塊的糾錯(cuò)能力可配置,從而提高了Nand Flash控制器的可擴(kuò)展性。
可選的,通過控制解碼子模塊和編碼子模塊不同時(shí)工作,降低了Nand Flash控制器的功耗。
可選的,通過控制部分寄存器組處于工作狀態(tài),其他寄存器組處于非工作狀態(tài),進(jìn)一步降低了Nand Flash控制器的功耗。
可選的,在CPU將需要寫入Nand Flash的數(shù)據(jù)存入第三寄存器的過程中,Nand Flash控制器同時(shí)將數(shù)據(jù)寫入Nand Flash中,從而提高了寫入的速度。
可選的,Nand Flash控制器最高可支持1K Bytes糾正60bits,提高了Nand Flash控制器的糾錯(cuò)能力。
附圖說明
下面對(duì)本發(fā)明實(shí)施例中的附圖進(jìn)行說明,實(shí)施例中的附圖是用于對(duì)本發(fā)明的進(jìn)一步理解,與說明書一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限制。
圖1為相關(guān)技術(shù)Nand Flash控制器的結(jié)構(gòu)組成示意圖;
圖2為本發(fā)明實(shí)施例Nand Flash控制器的結(jié)構(gòu)組成示意圖;
圖3為本發(fā)明實(shí)施例Nand Flash狀態(tài)機(jī)電路控制寄存器組的工作狀態(tài)的示意圖;
圖4為本發(fā)明實(shí)施例終端的結(jié)構(gòu)組成示意圖;
圖5為本發(fā)明實(shí)施例控制Nand Flash的方法的流程圖。
具體實(shí)施方式
為了便于本領(lǐng)域技術(shù)人員的理解,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的描述,并不能用來限制本發(fā)明的保護(hù)范圍。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的各種方式可以相互組合。
參見圖2,本發(fā)明實(shí)施例提出了一種Nand Flash控制器,包括:
第一寄存器、第三寄存器、系統(tǒng)接口及中斷電路、Nand Flash狀態(tài)機(jī)電路、雙口隨機(jī)存取存儲(chǔ)器(DPRAM,Double Port Random Access Memory)信號(hào)輸入輸出電路、ECC產(chǎn)生模塊。
其中,第一寄存器用于存儲(chǔ)CPU存入的命令。
其中,CPU存入的命令如重置(reset)、讀取(read)、檫除(erase)、寫入(write)等。
其中,當(dāng)CPU存入的命令為寫入時(shí),CPU可以先將寫入開始命令存入第一寄存器,然后將需要寫入的數(shù)據(jù)存入第三寄存器,在CPU將所有需要寫入的數(shù)據(jù)存入第三寄存器后,CPU將寫入結(jié)束命令存入第一寄存器。
其中,需要寫入的數(shù)據(jù)的長度可以由用戶設(shè)置,也可以設(shè)置為固定值。用戶設(shè)置的需要寫入的數(shù)據(jù)的長度不能超過Nand Flash一頁的長度,不同規(guī)格的Nand Flash一頁的長度不相同。
其中,CPU可以一次性將需要寫入的數(shù)據(jù)存入第三寄存器中,也可以將需要寫入的數(shù)據(jù)以第一預(yù)設(shè)長度為單位依次存入第三寄存器中,以提高寫入速率。
其中,第一預(yù)設(shè)長度可以由用戶進(jìn)行設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將第一預(yù)設(shè)長度設(shè)置為32比特(bit),當(dāng)然,第一預(yù)設(shè)長度也可以是其他的值,本發(fā)明實(shí)施例對(duì)此不作限定。
當(dāng)CPU存入的命令為讀取時(shí),CPU還將讀取的數(shù)據(jù)的地址存入第二寄存器。
其中,第三寄存器用于存儲(chǔ)需要寫入Nand Flash的數(shù)據(jù)和/或從Nand Flash讀取的數(shù)據(jù)。
其中,Nand Flash狀態(tài)機(jī)電路,用于解析第一寄存器中的命令,當(dāng)解析得到的命令為寫入命令時(shí),將第三寄存器中需要寫入Nand Flash的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中。
其中,第二預(yù)設(shè)長度可以由用戶進(jìn)行設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將第二預(yù)設(shè)長度設(shè)置為2n字節(jié)(byte),例如,1k byte或512byte等。
其中,當(dāng)CPU一次性將需要寫入的數(shù)據(jù)存入第三寄存器中時(shí),Nand Flash狀態(tài)機(jī)電路具體用于:
解析第一寄存器中的命令,當(dāng)解析得到的命令為寫入命令時(shí),將第三寄存器中需要寫入Nand Flash的數(shù)據(jù)中長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)中第二預(yù)設(shè)長度的數(shù)據(jù)以第三預(yù)設(shè)長度為單位依次寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中;繼續(xù)執(zhí)行將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)中下一個(gè)第二預(yù)設(shè)長度的數(shù)據(jù)以第三預(yù)設(shè)長度為單位依次寫入Nand Flash中的步驟,直到將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)及其對(duì)應(yīng)的冗余碼全部寫入Nand Flash;繼續(xù)執(zhí)行將需要寫入Nand Flash的數(shù)據(jù)中下一個(gè)長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中的步驟,直到將需要寫入Nand Flash的數(shù)據(jù)全部寫入DPRAM信號(hào)輸入輸出電路中。
其中,第三預(yù)設(shè)長度可以由用戶設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將第三預(yù)設(shè)長度設(shè)置為8bits或者16bits。
當(dāng)CPU將需要寫入的數(shù)據(jù)以第一預(yù)設(shè)長度為單位依次存入第三寄存器中時(shí),Nand Flash狀態(tài)機(jī)電路具體用于:
以第一預(yù)設(shè)長度為單位依次將需要寫入Nand Flash的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)以第三預(yù)設(shè)長度為單位依次寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中;繼續(xù)執(zhí)行以第一預(yù)設(shè)長度為單位依次將需要寫入Nand Flash的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中的步驟,直到將需要寫入Nand Flash的數(shù)據(jù)全部寫入DPRAM信號(hào)輸入輸出電路中。
其中,Nand Flash狀態(tài)機(jī)電路將冗余碼寫入到Nand Flash中時(shí),可以將冗余碼寫到Nand Flash中與第二預(yù)設(shè)長度的數(shù)據(jù)相鄰的位置。
其中,DPRAM信號(hào)輸入輸出電路,用于存儲(chǔ)Nand Flash狀態(tài)機(jī)電路寫入的數(shù)據(jù)。
其中,ECC產(chǎn)生模塊包括編碼子模塊和寄存器組。
其中,編碼子模塊用于在Nand Flash狀態(tài)機(jī)電路將DPRAN信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash的過程中,根據(jù)預(yù)先配置的糾錯(cuò)能力對(duì)需要寫入Nand Flash的數(shù)據(jù)進(jìn)行編碼運(yùn)算得到冗余碼,將計(jì)算得到的冗余碼存入寄存器組。
其中,糾錯(cuò)能力可以由用戶進(jìn)行設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將糾錯(cuò)能力設(shè)置為512Bytes數(shù)據(jù)糾正4bits或8bits或15bits錯(cuò)誤,或1K Bytes數(shù)據(jù)糾正24bits或40bits或60bits錯(cuò)誤,當(dāng)然,糾錯(cuò)能力也可以是其他值,本發(fā)明實(shí)施例對(duì)此不作限定。
對(duì)于不同的糾錯(cuò)能力,用于進(jìn)行編碼運(yùn)算的編碼電路是獨(dú)立的,而512Bytes共用一個(gè)解碼電路,1K Bytes共用一個(gè)解碼電路。
寄存器組,用于存儲(chǔ)編碼子模塊寫入的冗余碼。
其中,編碼子模塊可以以第四預(yù)設(shè)長度為單位依次對(duì)需要寫入Nand Flash的數(shù)據(jù)進(jìn)行編碼運(yùn)算,每一次編碼運(yùn)算得到的數(shù)據(jù)寫入寄存器組中;下一次繼續(xù)根據(jù)寄存器組中的數(shù)據(jù)對(duì)長度為第四預(yù)設(shè)長度的數(shù)據(jù)進(jìn)行編碼計(jì)算,直到對(duì)長度為第二預(yù)設(shè)長度的數(shù)據(jù)進(jìn)行編碼計(jì)算完成,寫入寄存器組中的數(shù)據(jù)即為第二預(yù)設(shè)長度的數(shù)據(jù)的冗余碼。
其中,第四預(yù)設(shè)長度可以由用戶進(jìn)行設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將第四預(yù)設(shè)長度設(shè)置為16bit,當(dāng)然,第四預(yù)設(shè)長度也可以是其他的值,本發(fā)明實(shí)施例對(duì)此不作限定。
可選的,Nand Flash控制器還包括第二寄存器,用于存取CPU存入的讀取的數(shù)據(jù)的地址。
Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)解析得到的命令為讀取命令時(shí),根據(jù)第二寄存器中的地址以第三預(yù)設(shè)長度為單位依次讀取Nand Flash中需要讀取的數(shù)據(jù)及對(duì)應(yīng)的冗余碼,并將讀取的數(shù)據(jù)和冗余碼寫入DPRAM信號(hào)輸入輸出電路中,直到將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中;當(dāng)接收到編碼子模塊的糾正完成的信號(hào),控制系統(tǒng)接口及中斷電路產(chǎn)生中斷信號(hào);當(dāng)CPU從第三寄存器中讀取數(shù)據(jù)時(shí),將DPRAM信號(hào)輸入輸出電路中糾正后的數(shù)據(jù)寫入第三寄存器中。
ECC產(chǎn)生模塊還包括解碼子模塊,解碼子模塊用于根據(jù)DPRAM信號(hào)輸入輸出電路中的冗余碼對(duì)讀取的第二預(yù)設(shè)長度的數(shù)據(jù)進(jìn)行糾正,向Nand Flash狀態(tài)機(jī)電路發(fā)送糾正完成的信號(hào)。
第三預(yù)設(shè)長度可以由用戶設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將第三預(yù)設(shè)長度設(shè)置為8bit或16bit,當(dāng)然,第三預(yù)設(shè)長度也可以取其他的值,本發(fā)明實(shí)施例對(duì)此不作限定。
其中,CPU檢測到系統(tǒng)接口及中斷電路產(chǎn)生的中斷信號(hào)后,從第三寄存器中讀取數(shù)據(jù)。
可選的,Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)解析得到的命令為寫入命令時(shí),控制ECC產(chǎn)生模塊中的解碼子模塊為非工作狀態(tài);當(dāng)解析得到的命令為讀取命令時(shí),控制ECC產(chǎn)生模塊中的編碼子模塊為非工作狀態(tài)。
其中,Nand Flash狀態(tài)機(jī)電路可以通過控制解碼子模塊的工作時(shí)鐘來控制解碼子模塊為非工作狀態(tài),例如,將解碼子模塊的工作時(shí)鐘設(shè)置為低電平,使得解碼子模塊處于非工作狀態(tài)。
Nand Flash狀態(tài)機(jī)電路可以通過控制編碼子模塊的工作時(shí)鐘來控制編碼子模塊為非工作狀態(tài),例如,將編碼子模塊的工作時(shí)鐘設(shè)置為低電平,使得解碼子模塊處于非工作狀態(tài)。
通過對(duì)Nand Flash控制器進(jìn)行功耗仿真可知,Nand Flash控制器的瞬態(tài)峰值功耗為1.76瓦(W),平均功耗電流為60毫安(mA),并且Nand Flash控制器的大功耗主要在ECC產(chǎn)生模塊工作期間產(chǎn)生,因此,本發(fā)明實(shí)施例中Nand Flash狀態(tài)機(jī)電路通過控制編碼子模塊和解碼子模塊的工作狀態(tài)使得編碼子模塊和解碼子模塊不同時(shí)工作,從而降低了Nand Flash控制器的功耗。
采用上述方法后再次對(duì)Nand Flash控制器進(jìn)行功耗仿真后,瞬態(tài)峰值功耗降為0.9W,平均功耗電流降為40mA。
可選的,寄存器組的個(gè)數(shù)為N個(gè),N為大于或等于1的整數(shù)。
每一組寄存器的存儲(chǔ)空間可以根據(jù)實(shí)際需求進(jìn)行配置,本發(fā)明實(shí)施例對(duì)此不作限定。例如,當(dāng)寄存器組的個(gè)數(shù)為6個(gè)時(shí),可以配置第一組寄存器的存儲(chǔ)空間為52bits,第二組寄存器的存儲(chǔ)空間為52bits,第三組寄存器的存儲(chǔ)空間為91bits,第四組寄存器的存儲(chǔ)空間為141bits,第五組寄存器的存儲(chǔ)空間為224bits,第六組寄存器的存儲(chǔ)空間為280bits。
Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)解析得到的命令為寫入命令時(shí),根據(jù)預(yù)先配置的糾錯(cuò)能力確定需要的寄存器組的個(gè)數(shù),將需要的寄存器組設(shè)置為工作狀態(tài),將其他的寄存器組設(shè)置為非工作狀態(tài)。
例如,如圖3所示,通過多路選擇器(MUX,multiplexer)電路來控制寄存器組的工作狀態(tài),MUX電路實(shí)際上是一個(gè)與門電路,當(dāng)解析得到的命令為寫入命令時(shí),編碼子模塊處于工作狀態(tài),即編碼子模塊的時(shí)鐘為有效時(shí)鐘,這時(shí)候,如果置位寄存器組的使能端,則寄存器組處于工作狀態(tài),如果不置位寄存器組的使能端,則寄存器組處于非工作狀態(tài)。
上述方法中,通過設(shè)置多個(gè)寄存器組來滿足不同的糾錯(cuò)能力,并且通過控制不需要的寄存器組為非工作狀態(tài),從而降低了Nand Flash控制器的功耗。
可選的,當(dāng)CPU接收到來自用戶的設(shè)置指令時(shí),CPU將設(shè)置指令存入第一寄存器。
Nand Flash狀態(tài)機(jī)電路還用于:
當(dāng)解析得到的命令為設(shè)置指令時(shí),根據(jù)設(shè)置指令設(shè)置對(duì)應(yīng)的參數(shù)。
其中,設(shè)置指令中包括:設(shè)置的參數(shù)、該參數(shù)的取值。
其中,設(shè)置的參數(shù)可以是第一預(yù)設(shè)長度、第二預(yù)設(shè)長度、第三預(yù)設(shè)長度、需要寫入的數(shù)據(jù)的長度、第四預(yù)設(shè)長度、糾錯(cuò)能力中的任意一個(gè)或多個(gè)。
例如,需要寫入的數(shù)據(jù)的長度的取值可以為小于或等于Nand Flash一頁的長度,第一預(yù)設(shè)長度的取值可以為32bit,第二預(yù)設(shè)長度的取值可以為2nbyte,第三預(yù)設(shè)長度的取值可以為8bits或者16bits,糾錯(cuò)能力的取值可以為512Bytes數(shù)據(jù)糾正4bits或8bits或15bits錯(cuò)誤,或1K Bytes數(shù)據(jù)糾正24bits或40bits或60bits,第四預(yù)設(shè)長度可以為16bits。
當(dāng)然,上述取值僅僅是一個(gè)示例,本發(fā)明實(shí)施例對(duì)具體的取值沒有限定。
參見圖4,本發(fā)明實(shí)施例還提出了一種終端,包括:
上述任意一個(gè)Nand Flash控制器;
終端還包括:
Nand Flash,用于存儲(chǔ)CPU寫入的數(shù)據(jù);
CPU,用于將命令存入第一寄存器;當(dāng)存入的命令為寫入命令時(shí),將需要寫入Nand Flash的數(shù)據(jù)存入第三寄存器;當(dāng)存入的命令為讀取命令時(shí),將讀取的數(shù)據(jù)的地址存入第二寄存器。
可選的,CPU還用于:
檢測到系統(tǒng)接口及中斷電路產(chǎn)生的中斷信號(hào)后,從所述第三寄存器中讀取數(shù)據(jù)。
可選的,CPU還用于:
接收到來自用戶的設(shè)置指令,將設(shè)置指令存入所述第一寄存器。
參見圖5,本發(fā)明實(shí)施例還提出了一種控制Nand Flash的方法,包括:
步驟500、CPU將寫入命令存入Nand Flash控制器的第一寄存器,將需要寫入Nand Flash的數(shù)據(jù)存入Nand Flash控制器的第三寄存器。
本步驟中,CPU可以一次性將需要寫入的數(shù)據(jù)存入第三寄存器中,也可以將需要寫入的數(shù)據(jù)以第一預(yù)設(shè)長度為單位依次存入第三寄存器中,以提高寫入速率。
其中,第一預(yù)設(shè)長度可以由用戶進(jìn)行設(shè)置,也可以設(shè)置為固定值。例如,用戶可以將第一預(yù)設(shè)長度設(shè)置為32比特(bit),當(dāng)然,第一預(yù)設(shè)長度也可以是其他的值,本發(fā)明實(shí)施例對(duì)此不作限定。
步驟501、Nand Flash控制器的Nand Flash狀態(tài)機(jī)電路解析第一寄存器中的命令,當(dāng)解析得到的命令為寫入命令時(shí),將第三寄存器中需要寫入Nand Flash的數(shù)據(jù)寫入雙口隨機(jī)存取存儲(chǔ)器DPRAM信號(hào)輸入輸出電路中,并將DPRAM信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash中;在將第二預(yù)設(shè)長度的數(shù)據(jù)寫入Nand Flash后,讀取ECC產(chǎn)生模塊中的寄存器組中的冗余碼,將冗余碼寫入到Nand Flash中。
步驟502、Nand Flash控制器的ECC產(chǎn)生模塊的編碼子模塊在Nand Flash狀態(tài)機(jī)電路將DPRAN信號(hào)輸入輸出電路中需要寫入Nand Flash的數(shù)據(jù)寫入Nand Flash的過程中,根據(jù)預(yù)先配置的糾錯(cuò)能力對(duì)需要寫入Nand Flash的數(shù)據(jù)進(jìn)行編碼運(yùn)算得到冗余碼,將計(jì)算得到的冗余碼存入ECC產(chǎn)生模塊的寄存器組。
可選的,該方法還包括:
所述CPU將讀取命令存入Nand Flash控制器的第一寄存器,將讀取的數(shù)據(jù)的地址存入Nand Flash控制器的第二寄存器;
所述Nand Flash狀態(tài)機(jī)電路解析第一寄存器中的命令,當(dāng)所述解析得到的命令為讀取命令時(shí),根據(jù)所述第二寄存器中的地址以第三預(yù)設(shè)長度為單位依次讀取Nand Flash中需要讀取的數(shù)據(jù)及對(duì)應(yīng)的冗余碼,并將讀取的數(shù)據(jù)和冗余碼寫入DPRAM信號(hào)輸入輸出電路中,直到將長度為第二預(yù)設(shè)長度的整數(shù)倍的數(shù)據(jù)寫入DPRAM信號(hào)輸入輸出電路中;
所述Nand Flash控制器的ECC產(chǎn)生模塊的解碼子模塊根據(jù)DPRAM信號(hào)輸入輸出電路中的冗余碼對(duì)讀取的第二預(yù)設(shè)長度的數(shù)據(jù)進(jìn)行糾正,向Nand Flash狀態(tài)機(jī)電路發(fā)送糾正完成的信號(hào);
當(dāng)所述Nand Flash狀態(tài)機(jī)電路接收到編碼子模塊的糾正完成的信號(hào),控制系統(tǒng)接口及中斷電路產(chǎn)生中斷信號(hào);
所述CPU檢測到所述Nand Flash控制器的系統(tǒng)接口及中斷電路產(chǎn)生的中斷信號(hào)后,從所述第三寄存器中讀取數(shù)據(jù);
當(dāng)CPU從第三寄存器中讀取數(shù)據(jù)時(shí),所述Nand Flash狀態(tài)機(jī)電路將DPRAM信號(hào)輸入輸出電路中糾正后的數(shù)據(jù)寫入所述第三寄存器中。
可選的,該方法還包括:
當(dāng)Nand Flash狀態(tài)機(jī)電路解析得到的命令為寫入命令時(shí),Nand Flash狀態(tài)機(jī)電路控制ECC產(chǎn)生模塊中的解碼子模塊為非工作狀態(tài);當(dāng)Nand Flash狀態(tài)機(jī)電路解析得到的命令為讀取命令時(shí),Nand Flash狀態(tài)機(jī)電路控制ECC產(chǎn)生模塊中的編碼子模塊為非工作狀態(tài)。
可選的,當(dāng)寄存器組的個(gè)數(shù)大于或等于2時(shí),該方法還包括:
當(dāng)Nand Flash狀態(tài)機(jī)電路解析得到的命令為寫入命令時(shí),Nand Flash狀態(tài)機(jī)電路根據(jù)預(yù)先配置的糾錯(cuò)能力確定需要的寄存器組的個(gè)數(shù),將需要的寄存器組設(shè)置為工作狀態(tài),將其他的寄存器組設(shè)置為非工作狀態(tài)。
可選的,該方法之前還包括:
當(dāng)CPU接收到來自用戶的設(shè)置指令時(shí),CPU將設(shè)置指令存入第一寄存器;當(dāng)Nand Flash狀態(tài)機(jī)電路解析得到的命令為設(shè)置指令時(shí),根據(jù)設(shè)置指令設(shè)置對(duì)應(yīng)的參數(shù)。
需要說明的是,以上所述的實(shí)施例僅是為了便于本領(lǐng)域的技術(shù)人員理解而已,并不用于限制本發(fā)明的保護(hù)范圍,在不脫離本發(fā)明的發(fā)明構(gòu)思的前提下,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明所做出的任何顯而易見的替換和改進(jìn)等均在本發(fā)明的保護(hù)范圍之內(nèi)。