專利名稱::一種大容量flash固存控制器的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于FLASH存儲(chǔ)器領(lǐng)域,涉及一種大容量FLASH固態(tài)存儲(chǔ)器的控制器。
背景技術(shù):
:快速擦寫存儲(chǔ)器FLASH是目前性能價(jià)格比和可靠性最高的可擦寫、非易失存儲(chǔ)器。大容量FLASH固存是一類非常復(fù)雜的存儲(chǔ)器件,其復(fù)雜性體現(xiàn)在存儲(chǔ)體結(jié)構(gòu)復(fù)雜和功能時(shí)序復(fù)雜。常用的大容量FLASH固存,其存儲(chǔ)體往往由數(shù)據(jù)字節(jié)、信息字節(jié)、半頁(yè)、頁(yè)、塊等不同層次的存儲(chǔ)結(jié)構(gòu)構(gòu)成;其功能一般包括全片擦除、塊擦除、頁(yè)編程、讀狀態(tài)、讀ID、讀數(shù)據(jù)、讀信息等;其時(shí)序基本上由命令操作、地址操作、數(shù)據(jù)操作、等待操作、查詢操作等步驟組成。更特殊的是,由于存儲(chǔ)容量大,F(xiàn)LASH供應(yīng)商不保證出廠的芯片沒有缺陷,而需要使用者在應(yīng)用過程中自行識(shí)別有缺陷的存儲(chǔ)區(qū),并做出相應(yīng)的處理。由于大容量FLASH是以塊為最高的存儲(chǔ)區(qū)單位(整個(gè)存儲(chǔ)體由若干存儲(chǔ)塊組成,每個(gè)存儲(chǔ)塊包括若干個(gè)存儲(chǔ)頁(yè),每個(gè)存儲(chǔ)頁(yè)含有如干存儲(chǔ)字節(jié)),所以一般對(duì)有缺陷的存儲(chǔ)區(qū)也是按塊來處理。因此,壞塊管理是大容量FLASH應(yīng)用中的一個(gè)重點(diǎn)和難點(diǎn)。現(xiàn)有的FLASH固存控制器主要由主機(jī)接口(包括命令寄存器、地址緩存等)、CPU、數(shù)據(jù)存儲(chǔ)器(包括ROM和RAM)以及FLASH接口組成,這些FLASH固存控制器往往都只注重兼容多種主機(jī)通信協(xié)議、支持多種FLASH接口,卻忽視了數(shù)據(jù)傳輸中產(chǎn)生的錯(cuò)誤以及FLASH本身出現(xiàn)的缺陷,如專利號(hào)為US2008086631,名稱為FLASHMEMORYCONTROLLERCONTROLLINGVARIOUSFLASHMEMORYCELLS的美國(guó)專利公開的一種FLASH固存控制器,該種固存控制器數(shù)據(jù)糾錯(cuò)能力差,且對(duì)FLASH固存本身存在的缺陷無法處理,容易發(fā)生數(shù)據(jù)錯(cuò)誤,不能滿足航天軍工的高可靠性要求。
發(fā)明內(nèi)容本發(fā)明的技術(shù)解決問題是克服現(xiàn)有技術(shù)的不足,提供了一種糾錯(cuò)能力強(qiáng)、且能夠自動(dòng)處理FLASH壞塊的高可靠性大容量FLASH固存控制器。本發(fā)明的技術(shù)解決方案是一種大容量FLASH固存控制器,包括微控制器接口、FLASH接口、數(shù)據(jù)緩存單元、校驗(yàn)碼緩存單元、校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元,還包括壞塊自動(dòng)處理單元和雙緩存控制單元,其中微控制器接口與微控制器進(jìn)行數(shù)據(jù)通信;FLASH接口與FLASH進(jìn)行數(shù)據(jù)通信;數(shù)據(jù)緩存單元存儲(chǔ)需要傳輸?shù)臄?shù)據(jù);校驗(yàn)碼緩存單元存儲(chǔ)與數(shù)據(jù)緩存單元存儲(chǔ)的數(shù)據(jù)相對(duì)應(yīng)的校驗(yàn)碼;校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元經(jīng)微控制器接口接收外部微控制器傳來的數(shù)據(jù),根據(jù)傳來的數(shù)據(jù)產(chǎn)生校驗(yàn)碼,并將所述數(shù)據(jù)和校驗(yàn)碼送至雙緩存控制單元;對(duì)雙緩存控制單元傳來的數(shù)據(jù)進(jìn)行糾檢錯(cuò)后經(jīng)微控制器接口送至外部微控制器;壞塊自動(dòng)處理單元自動(dòng)識(shí)別片外FLASH存儲(chǔ)器出現(xiàn)的壞存儲(chǔ)塊并為其分配替換塊,保證對(duì)片外FLASH存儲(chǔ)器的正常讀寫才喿作,無需用戶方進(jìn)行任何操作;雙緩存控制單元與微控制器接口、FLASH接口或壞塊自動(dòng)處理單元通信,實(shí)現(xiàn)對(duì)數(shù)據(jù)緩存單元和校驗(yàn)碼緩存單元的數(shù)據(jù)寫入或讀取操作。所述的雙緩存控制單元的工作方式為當(dāng)面向微控制器進(jìn)行數(shù)據(jù)操作時(shí),該單元同時(shí)對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存進(jìn)行操作;當(dāng)面向片夕卜FLASH存儲(chǔ)器進(jìn)行正常數(shù)據(jù)操作時(shí),該單元對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存依次順序操作;當(dāng)面向片外FLASH存儲(chǔ)器進(jìn)行壞塊處理時(shí),該單元只對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存中的一個(gè)進(jìn)行操作。所述的壞塊自動(dòng)處理單元對(duì)外部FLASH存儲(chǔ)器出現(xiàn)的壞塊進(jìn)行處理的方法為(1)建立壞塊信息表,用于記錄壞塊和替換塊的地址映射關(guān)系;(2)設(shè)置壞塊信息記錄指針,用于指示當(dāng)前遇到的壞塊記錄位置,起始指向?yàn)閴膲K信息表的首記錄;設(shè)置壞塊信息操作指針,用于指示當(dāng)前正在使用的壞塊及與其對(duì)應(yīng)的替換塊,起始指向與壞塊信息記錄指針的起始指向相同;設(shè)置最新替換塊寄存器,用于保存最新分配的替換塊的地址;(3)當(dāng)存儲(chǔ)器出現(xiàn)壞塊時(shí),記錄該壞塊的地址,同時(shí)為該壞塊指定替換塊,將壞塊及其替換塊的地址添加至壞塊信息表中,最新替換塊寄存器指示所述替換塊的地址;替換塊的分配從存儲(chǔ)器的最高的塊地址開始向最低的塊地址依次遞減;(4)若所述替換塊也為壞塊,則跳過所述替換塊重新分配新的替換塊,替換塊為壞塊的不再添加至壞塊信息表中,最新替換塊寄存器指示所述新替換塊的地址并用其替換壞塊信息表中的相應(yīng)記錄;(5)壞塊信息記錄指針指向下一記錄位置,壞塊信息操作指針指向當(dāng)前遇到的壞塊及其替換塊的記錄位置,若當(dāng)前操作塊未出現(xiàn)在壞塊信息表的記錄中,則壞塊信息操作指針保留當(dāng)前指示位置。(6)當(dāng)壞塊的數(shù)量達(dá)到了所能容忍的最大壞塊個(gè)數(shù)或替換塊的地址達(dá)到了壞塊處理能力上限地址時(shí),提示壞塊數(shù)量溢出,無法繼續(xù)處理。所述的最低的塊地址為壞塊處理能力上限地址。所述的壞塊處理能力上限地址的確定方法為壞塊處理能力上限地址-存儲(chǔ)器最高位地址-所能容忍的最大壞塊個(gè)數(shù)+1,其中所能容忍的最大壞塊個(gè)數(shù)由用戶設(shè)定。所述的FLASH接口具有擴(kuò)展功能,可以攜帶256個(gè)備份FLASH。本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于(1)本發(fā)明控制器通過雙緩存控制單元將數(shù)據(jù)和EDAC才交驗(yàn)碼存入片外的FLASH,或者通過雙緩存控制單元將FLASH內(nèi)的數(shù)據(jù)和校驗(yàn)碼取出,存入緩存寄存器堆后進(jìn)行數(shù)據(jù)糾檢錯(cuò),可以自動(dòng)完成與片外FLASH存儲(chǔ)器的數(shù)據(jù)高可靠性存儲(chǔ)和讀??;(2)本發(fā)明控制器可以對(duì)FLASH的壞塊進(jìn)^f亍自動(dòng)處理,識(shí)別FLASH中的壞存儲(chǔ)塊,并為壞塊分配合適的替換存儲(chǔ)塊,根據(jù)壞塊信息指導(dǎo)FLASH的操作,有效的克服了由于FLASH固存本身固有的缺陷造成的數(shù)據(jù)存儲(chǔ)錯(cuò)誤,進(jìn)一步提高了可靠性;(3)本發(fā)明控制器對(duì)FLASH壞塊進(jìn)行管理時(shí),通過建立壞塊信息表,用于記錄壞塊和替換塊的地址映射關(guān)系,并且替換塊的分配從存儲(chǔ)器的最高塊地址開始向最低塊地址依次遞減,與正常數(shù)據(jù)操作的地址完全獨(dú)立開,使得某個(gè)壞塊的替換操作不會(huì)影響到后續(xù)其他存儲(chǔ)塊的地址映射,從而簡(jiǎn)化了壞塊處理的操作,減少了硬件資源的占用,提高了壞塊處理的速度;(4)本發(fā)明控制器對(duì)FLASH壞塊的處理能力可由用戶4艮據(jù)實(shí)際情況確定,操作靈活、簡(jiǎn)便;(5)本發(fā)明控制器可以攜帶多達(dá)256個(gè)備份FLASH,具有很強(qiáng)的擴(kuò)展性。圖1為本發(fā)明大容量FLASH固存控制器結(jié)構(gòu)原理框圖;圖2為本發(fā)明大容量FLASH固存控制器的實(shí)際應(yīng)用示意圖;圖3為本發(fā)明大容量FLASH固存控制器的壞塊管理流程框圖;圖4為本發(fā)明大容量FLASH固存控制器壞塊管理示意圖一;圖5為本發(fā)明大容量FLASH固存控制器壞塊管理示意圖二;圖6為本發(fā)明大容量FLASH固存控制器壞塊管理示意圖三;圖7為本發(fā)明大容量FLASH固存控制器編程操作的流程圖;圖8為本發(fā)明大容量FLASH固存控制器壞塊數(shù)據(jù)轉(zhuǎn)移操作示意圖;圖9為本發(fā)明大容量FLASH固存控制器讀操作的流程圖。具體實(shí)施例方式如圖1所示,為本發(fā)明大容量FLASH固存控制器的原理框圖,包括微控制器接口、FLASH接口、數(shù)據(jù)緩存單元、校驗(yàn)碼緩存單元、校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元、壞塊自動(dòng)處理單元和雙緩存控制單元,其中微控制器接口與微控制器進(jìn)行數(shù)據(jù)通信;FLASH接口與FLASH進(jìn)行數(shù)據(jù)通信;數(shù)據(jù)緩存單元存儲(chǔ)需要傳輸?shù)臄?shù)據(jù);校驗(yàn)碼緩存單元存儲(chǔ)與數(shù)據(jù)緩存單元存儲(chǔ)的數(shù)據(jù)相對(duì)應(yīng)的校驗(yàn)碼;校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元經(jīng)微控制器接口接收外部微控制器傳來的數(shù)據(jù),根據(jù)傳來的數(shù)據(jù)產(chǎn)生校驗(yàn)碼,并將所述數(shù)據(jù)和校驗(yàn)碼送至雙緩存控制單元;對(duì)雙緩存控制單元傳來的數(shù)據(jù)進(jìn)行糾才企錯(cuò)后經(jīng)孩t控制器接口送至外部耀:控制器。壞塊自動(dòng)處理單元自動(dòng)識(shí)別片外FLASH存儲(chǔ)器出現(xiàn)的壞存儲(chǔ)塊并為其分配替換塊,保證對(duì)片外FLASH存儲(chǔ)器的正常讀寫操作,無需用戶方進(jìn)行任何操作。雙緩存控制單元與微控制器接口、FLASH接口或壞塊自動(dòng)處理單元通信,實(shí)現(xiàn)對(duì)數(shù)據(jù)緩存單元和校驗(yàn)碼緩存單元的數(shù)據(jù)寫入或讀取操作。當(dāng)面向微控制器進(jìn)行數(shù)據(jù)操作時(shí),雙緩存控制單元同時(shí)對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存進(jìn)行操作;當(dāng)面向片外FLASH存儲(chǔ)器進(jìn)行正常數(shù)據(jù)操作時(shí),雙緩存控制單元對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存依次順序操作;當(dāng)面向片外FLASH存儲(chǔ)器進(jìn)行壞塊處理時(shí),雙緩存控制單元只對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存中的一個(gè)進(jìn)行操作。圖2為本發(fā)明為控制器實(shí)際應(yīng)用的示意圖,由微控制器對(duì)大容量FLASH固存控制器進(jìn)行控制,實(shí)現(xiàn)對(duì)后一級(jí)的FLASH芯片進(jìn)行讀、寫和擦除操作。當(dāng)后一級(jí)所接的FLASH芯片個(gè)數(shù)大于8塊而小于256塊時(shí)可以接一個(gè)譯碼器以實(shí)現(xiàn)對(duì)FLASH的控制。微控制器可以選擇MCS51系列或與其兼容的控制芯片。(一)數(shù)據(jù)保存大容量FLASH固存控制器的核心功能是數(shù)據(jù)的保存,而數(shù)據(jù)的保存則是由雙緩存控制單元進(jìn)行管理。數(shù)據(jù)的保存功能包括片內(nèi)的凄t據(jù)緩存和FLASH數(shù)據(jù)存儲(chǔ)兩個(gè)方面。下面以一個(gè)128Kx8bit存儲(chǔ)容量、8192個(gè)存儲(chǔ)塊的FLASH為例說明本發(fā)明控制器的工作過程。本發(fā)明采用512x8比特容量的數(shù)據(jù)緩存寄存器堆,用于暫時(shí)保存來自片外微控制器的字節(jié)數(shù)據(jù)。在雙緩存控制單元把數(shù)據(jù)保存到數(shù)據(jù)緩存的同時(shí),校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元產(chǎn)生的相應(yīng)校驗(yàn)碼則被雙緩存控制單元暫時(shí)保存到校驗(yàn)碼緩存寄存器堆,其容量也是512x8比特。數(shù)據(jù)緩存寄存器堆是本控制器的特殊功能寄存器,可以被片外的微控制器直接尋址訪問。另外相對(duì)于FLASH而言,數(shù)據(jù)緩存寄存器堆和校驗(yàn)碼緩存寄存器堆的功能又相當(dāng)于FIFO。來自微控制器的數(shù)據(jù)存滿了512字節(jié)的數(shù)據(jù)之后,通過雙緩存控制單元將被轉(zhuǎn)存到FLASH中的某奇數(shù)存儲(chǔ)頁(yè);與之相應(yīng)的512字節(jié)校驗(yàn)碼則通過雙緩存控制單元被轉(zhuǎn)存到隨后的偶數(shù)頁(yè)。(二)糾檢錯(cuò)本發(fā)明大容量FLASH固存控制器能夠進(jìn)行數(shù)據(jù)的糾檢錯(cuò)處理。糾檢錯(cuò)電路采用漢明碼,該編碼具有糾一檢二的能力。對(duì)于8位的數(shù)據(jù),一般的漢明碼糾檢錯(cuò)需要4位的校驗(yàn)碼,其功能是如果總共12位的數(shù)據(jù)和校驗(yàn)碼中只有一位數(shù)據(jù)錯(cuò)誤,則糾檢錯(cuò)電路能夠輸出正確的數(shù)據(jù);如果有兩位數(shù)據(jù)錯(cuò)誤,糾檢錯(cuò)電路能夠檢查該數(shù)據(jù)存在錯(cuò)誤,但無法糾正。為了進(jìn)一步提高本控制器的糾檢錯(cuò)能力,也為了便于校驗(yàn)碼的存儲(chǔ)操作,本電路采用雙8,4,4的改進(jìn)型漢明碼糾檢錯(cuò)方式,即將8位數(shù)據(jù)分成高4位和低4位兩組;每組分別進(jìn)行漢明碼的編解碼,每組各自需要4位校驗(yàn)碼。本電路的糾檢錯(cuò)方案總共需要8位校-瞼碼,其功能是如果總共16位的數(shù)據(jù)和校驗(yàn)碼中只有一位數(shù)據(jù)錯(cuò)誤,則糾檢錯(cuò)電路能夠輸出正確的數(shù)據(jù);如果高4位數(shù)據(jù)及其相應(yīng)的4位校驗(yàn)碼中有一位數(shù)據(jù)錯(cuò)誤,而且低4位數(shù)據(jù)及其相應(yīng)的4位校驗(yàn)碼中也有一位數(shù)據(jù)錯(cuò)誤,則糾檢錯(cuò)電路還能夠輸出正確的數(shù)據(jù);如果總共16位的數(shù)據(jù)和校驗(yàn)碼中有三位及以上數(shù)據(jù)錯(cuò)誤,糾檢錯(cuò)電路能夠沖全查該數(shù)據(jù)存在錯(cuò)誤,但無法糾正。如果錯(cuò)誤數(shù)據(jù)無法糾正,本電路會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求信號(hào)。微控制器在進(jìn)入中斷服務(wù)程序后,需要對(duì)本電路的命令寄存器(屬于FLASH接口中的特殊功能寄存器,具體見下文)清零,以撤除中斷請(qǐng)求。一旦出現(xiàn)數(shù)據(jù)錯(cuò)誤無法糾正,微控制器將整批數(shù)據(jù)(即整個(gè)存儲(chǔ)塊的數(shù)據(jù))都舍棄不用。(三)壞塊自動(dòng)管理大容量FLASH固存在出廠時(shí)不保證沒有壞的存儲(chǔ)塊。對(duì)壞塊的管理是本發(fā)明控制器設(shè)計(jì)中的一大難點(diǎn)。如圖3所示,為本發(fā)明壞塊處理方法的原理框圖。首先建立壞塊信息表,用于記錄壞塊和替換塊的地址映射關(guān)系,并在信息表中設(shè)置壞塊信息記錄指針,用于指示當(dāng)前遇到的壞塊記錄位置,起始指向?yàn)閴膲K信息表的首記錄;設(shè)置壞塊信息操作指針,用于指示當(dāng)前正在使用的壞塊及與其對(duì)應(yīng)的替換塊,起始指向與壞塊信息記錄指針的起始指向相同;設(shè)置最新替換塊寄存器,用于保存最新分配的替換塊的地址;當(dāng)存儲(chǔ)器出現(xiàn)壞塊時(shí),記錄該壞塊的地址,同時(shí)為該壞塊指定替換塊,將壞塊及其替換塊的地址添加至壞塊信息表中,最新替換塊寄存器指示所述替換塊的地址;替換塊的分配乂人存儲(chǔ)器的最高的塊地址開始向最低的塊地址(壞塊處理能力上限地址)依次遞減;若所述替換塊也為壞塊,則跳過所述替換塊重新分配新的替換塊,替換塊為壞塊的不再添加至壞塊信息表中,最新替換塊寄存器指示所述新替換塊的地址并用其替換壞塊信息表中的相應(yīng)記錄;隨后壞塊信息記錄指針指向下一記錄位置,壞塊信息操作指針指向當(dāng)前遇到的壞塊及其替換塊的記錄位置,若當(dāng)前操作塊未出現(xiàn)在壞塊信息表的記錄中,則壞塊信息操作指針保留當(dāng)前指示位置。當(dāng)壞塊的數(shù)量達(dá)到了所能容忍的最大壞塊個(gè)數(shù)或替換塊的地址達(dá)到了壞塊處理能力上限地址時(shí),提示壞塊數(shù)量溢出,無法繼續(xù)處理。壞塊處理能力上限地址的確定方法為壞塊處理能力上限地址-存儲(chǔ)器最高位地址-所能容忍的最大壞塊個(gè)數(shù)+1,其中所能容忍的最大壞塊個(gè)數(shù)由用戶設(shè)定。通過研究發(fā)現(xiàn),該128Mx8比特FLASH產(chǎn)品出廠時(shí)的壞塊數(shù)量一般在80塊到130塊之間。結(jié)合FLASH的備份方案和存儲(chǔ)量的需求,本電路設(shè)計(jì)方案將可接受的壞塊總數(shù)設(shè)定為255塊,即如果某片F(xiàn)LASH的壞塊數(shù)達(dá)到255,則微控制器指示本電路啟用另一片名"除的FLASH。大容量FLASH固存出廠時(shí),在每個(gè)存儲(chǔ)塊中固定頁(yè)的固定信息位保留有壞塊的標(biāo)志。但一旦該FLASH經(jīng)過塊擦除或者頁(yè)編程操作,原有的壞塊標(biāo)志就會(huì)被破壞。出于整體質(zhì)量的考慮,在裝機(jī)或者系統(tǒng)正式使用之前,用戶會(huì)對(duì)購(gòu)買來的FLASH進(jìn)行驗(yàn)收測(cè)試或者系統(tǒng)驗(yàn)證。因此,本控制器不對(duì)FLASH的初始?jí)膲K信息進(jìn)行查詢。本控制器對(duì)壞塊的管理采用壞塊信息表,包括壞塊地址列表和替換塊地址列表,總?cè)萘繛?55x26比特(壞塊地址和替換塊地址各13位)。壞塊管理的重點(diǎn)是替換塊的分配。本控制器壞塊自動(dòng)處理單元分配替換塊的原則是替換塊地址從8191開始(最低的地址是0)依次遞減;如果某備選替換塊也損壞,則跳過該地址繼續(xù)分配;損壞了的替換塊不列入壞塊地址列表;如果最新的替換塊地址等于7937(即8191-255+1),則表示壞塊數(shù)量溢出。壞塊的管理需要一個(gè)8位的壞塊信息表記錄指針,用于指示壞塊信息表當(dāng)前可以使用的壞塊記錄位置;需要一個(gè)8位的壞塊信息表操作指針,表示當(dāng)前正在使用的壞塊及其替換塊;需要一個(gè)塊分類標(biāo)志信號(hào),表示當(dāng)前進(jìn)行編程/讀操作的是正常的存儲(chǔ)塊還是替換塊;需要設(shè)計(jì)一個(gè)13位的最新替換塊寄存器,用于保存最新分配的替換塊地址。圖4、圖5和圖6是壞塊自動(dòng)管理的處理過程示意圖。圖4已經(jīng)記錄了3個(gè)壞塊的地址(用十進(jìn)制表示)10、125和462。按照替換塊分配的方案,第一個(gè)壞塊的替換塊地址為8191,其后依次為8190和8189。記錄指針指到壞塊信息表第4個(gè)存儲(chǔ)位置,表明下一個(gè)新的壞塊地址保存到該位置。操作指針指到第2個(gè)存儲(chǔ)位置,如果此時(shí)塊分類標(biāo)志信號(hào)表示當(dāng)前進(jìn)行編程/讀操作的是替換塊,那么當(dāng)前操作的存儲(chǔ)塊的地址為8190。最新替換塊寄存器記錄了最后一個(gè)被分配了的替換塊是8189。在圖4的基礎(chǔ)上,如果8190存儲(chǔ)塊在才喿作中出現(xiàn)損壞,那么需要為125存儲(chǔ)塊重新分配替換塊按照最新替換塊寄存器記錄的地址遞減即可。而最新替換塊寄存器也需要相應(yīng)地更新。但是替換塊是壞塊則不需要記錄到壞塊地址列表中。如圖5所示。在圖5的基礎(chǔ)上,如果出現(xiàn)新的壞塊(如500),那么需要為其分配替換塊(如8187):按照最新替換塊寄存器記錄的地址遞減即可。而最新替換塊寄存器也需要相應(yīng)地更新。壞塊地址和替換塊地址都記錄到壞塊信息表中的第4個(gè)存儲(chǔ)位置,記錄指針則指向第5個(gè)存儲(chǔ)位置(表明該位置還沒有記錄信息,是下一個(gè)可用的記錄位置)。如圖6所示。如果壞塊數(shù)量達(dá)到255,則由微控制器決定是否啟用備份。當(dāng)微控制器發(fā)出壞塊數(shù)量查詢時(shí),用8192減去最新替換塊的地址就可以得到當(dāng)前的壞塊數(shù)量。而判斷壞塊數(shù)量是否溢出,則只需要看最新替換塊寄存器保存的數(shù)值是否等于7937。壞塊信息表存儲(chǔ)的數(shù)據(jù)在上電復(fù)位后為全0。(四)微控制器接口1.特殊功能寄存器本控制器的特殊功能寄存器是片外微控制器可以直接尋址訪問的,包括命令寄存器、狀態(tài)寄存器、壞塊數(shù)量寄存器、備份選擇寄存器、塊地址寄存器、數(shù)據(jù)緩存寄存器堆等。表1為這些寄存器的地址表1特殊功能寄存器的地址列表<table>tableseeoriginaldocumentpage12</column></row><table>本發(fā)明控制器中所有特殊功能寄存器位寬均為8位,下面將對(duì)每個(gè)寄存器數(shù)據(jù)位的功能加以說明。(1)狀態(tài)寄存器SR初始態(tài)為OOH,如果某一位為"1",則表示該狀態(tài)有效。(MSB)(LSB)<table>tableseeoriginaldocumentpage13</column></row><table>BNF(SR.7):壞塊數(shù)量達(dá)到255時(shí)的溢出標(biāo)志,更換備份FLASH之后將歸0。ERR(SR.6):校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元無法糾正錯(cuò)誤數(shù)據(jù)標(biāo)志,回到閑置工作狀態(tài)后將歸0。ERC(SR.5):輸入命令寄存器的命令無法識(shí)別,輸入正確的命令后將歸0。EF(SR.2):FLASH擦除操作完成標(biāo)志,回到閑置工作狀態(tài)后將歸0。RF(SR.1):FLASH讀操作完成標(biāo)志,回到閑置工作狀態(tài)后將歸0。WF(SR.O):FLASH編程完成標(biāo)志,回到閑置工作狀態(tài)后將歸0。(2)塊地址高位寄存器MAR初始態(tài)為OOH。(MSB)(LSB)XXXA12A11A10A9A8FLASH塊地址的12~8位地址寄存器<(3)塊地址低位寄存器LAR初始態(tài)為OOH。(MSB)(LSB)<table>tableseeoriginaldocumentpage13</column></row><table>FLASH塊地址的7~0位地址寄存器。(4)命令寄存器CR初始態(tài)為OOH,如果某一位為"1",則表示該命令有效c(MSB)(l_SB)<table>tableseeoriginaldocumentpage14</column></row><table>ERS(CR.2):啟動(dòng)FLASH擦除操作命令。RD(CR.1):啟動(dòng)FLASH讀操作命令。PRG(CR.O):啟動(dòng)FLASH編程操作命令。(5)備份選擇寄存器BR初始態(tài)為OOH。如果不多于8片^f分FLASH,可以用FCEN直接控制FLASH的片選;由于FLASH的片選是低電平有效,所以BR與FCEN為互補(bǔ)邏輯,若BR某一位為"1",則FCEN的對(duì)應(yīng)位為"0"。如果多于8片備份FLASH,需要外接譯碼電路;由于BR與FCEN為互補(bǔ)邏輯,若微控制器的備份選擇采用正邏輯編碼,則片外譯碼電路需要進(jìn)行反邏輯的譯碼。(MSB)(LSB)<table>tableseeoriginaldocumentpage14</column></row><table>(6)壞塊數(shù)量寄存器BNR初始態(tài)為00H,每次新啟用一片F(xiàn)LASH時(shí)將該寄存器清零。(7)數(shù)據(jù)緩存寄存器堆200H為數(shù)據(jù)緩存寄存器堆的首地址,3FFH為其尾地址。對(duì)于FLASH而言,該寄存器堆的功能則相當(dāng)于FIFO。2.備份選擇操作本FLASH控制器可以根據(jù)要求選擇256只備份FLASH芯片中的任一只進(jìn)行操作。對(duì)于本電路的備份選擇寄存器(其地址編碼為004H),如果備份FLASH不多于8片,則該寄存器的每一位對(duì)應(yīng)一只FLASH芯片,高電平表示選擇有效。如果備f分FLASH超過8片,用戶可以采用8位編碼加以區(qū)別,該8位編碼可以通過片外微控制器直接寫入備份選擇寄存器;并且需要對(duì)FCEN信號(hào)進(jìn)行相應(yīng)的i奪碼,以產(chǎn)生FLASH的片選信號(hào)。在三種情況下微控制器需要對(duì)備份選擇寄存器進(jìn)行寫操作。第一種情況是在上電之后,微控制器必須通過本FLASH控制器選擇一個(gè)FLASH。第二種情況是微控制器可以通過查詢狀態(tài)寄存器的最高位來獲知當(dāng)前的FLASH壞塊數(shù)量已經(jīng)達(dá)到255,必須要選擇另一個(gè)FLASH。第三種情況是微控制器通過查詢壞塊數(shù)量來提前預(yù)判需要選擇另一個(gè)FLASH。微控制器可以通過對(duì)FLASH備份選擇寄存器的讀操作來查詢當(dāng)前的^f分選擇情況。3.編程操作本FLASH控制器電路所對(duì)應(yīng)的FLASH容量為128Mx8位,共分為8192個(gè)存儲(chǔ)塊,每塊分為32個(gè)存儲(chǔ)頁(yè),每頁(yè)能存儲(chǔ)512字節(jié)數(shù)據(jù)(另外還可以存儲(chǔ)16字節(jié)信息)。為了便于進(jìn)行頁(yè)編程操作,本控制器的數(shù)據(jù)緩存寄存器堆容量設(shè)計(jì)為512字節(jié)。另外還設(shè)計(jì)了512字節(jié)的校驗(yàn)碼寄存器堆。本方案定義數(shù)據(jù)存在奇數(shù)頁(yè),校驗(yàn)碼存在偶數(shù)頁(yè)。所以FLASH每個(gè)存儲(chǔ)塊可以存儲(chǔ)16x512字節(jié)的數(shù)據(jù)。由于孩i控制器需要批處理的數(shù)據(jù)量太大,需要按照塊的方式來存儲(chǔ)。所以每批數(shù)據(jù)的存儲(chǔ)需要進(jìn)行16次頁(yè)編程才能完成。編程操作算法如下(1)分兩次往FLASH塊地址寄存器中寫入需要編程的塊地址(先寫高5位,后寫低8位);(2)往數(shù)據(jù)緩存寄存器堆中寫數(shù)據(jù);(3)往命令寄存器中寫"01H",發(fā)出編程命令;(4)讀狀態(tài)寄存器,查詢FLASH頁(yè)編程的結(jié)果,如果編程過程中發(fā)現(xiàn)壞塊數(shù)量溢出,則狀態(tài)寄存器最高位變?yōu)?1",如果頁(yè)編程結(jié)束(包括數(shù)據(jù)頁(yè)和校驗(yàn)碼頁(yè)),則狀態(tài)寄存器最低位變?yōu)?1";(5)查詢到頁(yè)編程結(jié)束后,微控制器將命令寄存器改寫為"00H",使本控制器和FLASH進(jìn)入閑置狀態(tài),狀態(tài)寄存器除了最高位保持當(dāng)前電平外,其余位均置為低電平;(6)重復(fù)第2步到第5步,直到存儲(chǔ)完16頁(yè)數(shù)據(jù)。4.讀操作微控制器每次批處理讀數(shù)據(jù)需要分16次才能完成每次從FLASH中讀取1頁(yè)數(shù)據(jù)和1頁(yè)校驗(yàn)碼。讀FLASH操作算法如下(1)分兩次往FLASH塊地址寄存器中寫入需要讀的塊地址(先寫高5位,后寫低8位);(2)往命令寄存器中寫"02H",發(fā)出讀FLASH命令;(3)讀狀態(tài)寄存器,查詢FLASH頁(yè)讀操作的結(jié)果,如果讀操作過程中發(fā)現(xiàn)壞塊數(shù)量溢出,則狀態(tài)寄存器最高位變?yōu)?1",如果頁(yè)讀操作結(jié)束(包括數(shù)據(jù)頁(yè)和4吏驗(yàn)碼頁(yè)),則狀態(tài)寄存器次〗氐位變?yōu)?1";(4)查詢到頁(yè)讀操作結(jié)束后,微控制器可以直接從數(shù)據(jù)緩存寄存器堆中讀取數(shù)據(jù),校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元在每次讀取數(shù)據(jù)時(shí)都會(huì)進(jìn)行校驗(yàn)和糾正,如果數(shù)據(jù)無法糾正,校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元會(huì)產(chǎn)生一個(gè)獨(dú)立的中斷信號(hào),微處理器監(jiān)測(cè)到該中斷后會(huì)進(jìn)入中斷服務(wù)程序,然后將命令寄存器改寫為"00H",放棄該存儲(chǔ)塊的數(shù)據(jù),并且校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元中斷恢復(fù)正常;(5)512字節(jié)的數(shù)據(jù)讀完后,微控制器將命令寄存器改寫為"00H",使本控制器和FLASH進(jìn)入閑置狀態(tài),狀態(tài)寄存器除了最高位保持當(dāng)前電平外,其余位均置為低電平;(6)重復(fù)第2步到第5步,直到讀完16頁(yè)數(shù)據(jù)。5.擦除操作本電路配套的FLASH只支持塊擦除。微控制器每次對(duì)存儲(chǔ)塊進(jìn)行編程操作前,需要對(duì)該塊進(jìn)行擦除操作。擦除FLASH操作算法如下(1)分兩次往FLASH塊地址寄存器中寫入需要讀的塊地址(先寫高5位,后寫低8位);(2)往命令寄存器中寫"04H",發(fā)出擦除FLASH命令;(3)讀狀態(tài)寄存器,查詢FLASH頁(yè)讀操作的結(jié)果,如果擦除操:作過程中發(fā)現(xiàn)壞塊數(shù)量溢出,則狀態(tài)寄存器最高位變?yōu)?1",如果擦除操作結(jié)束,則狀態(tài)寄存器最低的第3位變?yōu)?1";(4)查詢到擦除操作結(jié)束后,微控制器將命令寄存器改寫為"00H";使本控制器和FLASH進(jìn)入閑置狀態(tài),狀態(tài)寄存器除了最高位保持當(dāng)前電平外,其余位均置為低電平。6.讀壞塊數(shù)量操作微控制器直接從壞塊數(shù)量寄存器中讀出數(shù)據(jù)。(五)FLASH接口大容量FLASH固存控制器可以對(duì)FLASH的才喿作包括頁(yè)編程、片選控制的頁(yè)讀、塊擦除三種。(六)主要工作狀態(tài)1.編程梯:作本發(fā)明控制器采用頁(yè)編程的方式存儲(chǔ)數(shù)據(jù)和校驗(yàn)碼數(shù)據(jù)存到奇數(shù)頁(yè),校驗(yàn)碼存到隨后的偶數(shù)頁(yè)。微控制器發(fā)出的起始地址是存儲(chǔ)塊的地址,本電路根據(jù)微控制器對(duì)同一存儲(chǔ)塊連續(xù)進(jìn)行編程的次數(shù)來產(chǎn)生存儲(chǔ)頁(yè)的地址。一次編程包括兩個(gè)階段首先對(duì)數(shù)據(jù)進(jìn)行頁(yè)編程,數(shù)據(jù)編程正確后再進(jìn)行校驗(yàn)碼編程。編程操作的流程如圖7所示。對(duì)FLASH的編程有4種情況。第一種情況M始地址是好塊,并且在編程過程中沒有出現(xiàn)錯(cuò)誤。第二種情況M始地址是好塊,但在編程過程中出現(xiàn)錯(cuò)誤,則需要更新壞塊列表(增加壞塊并更新記錄指針)、更新替換塊列表(增加替換塊并更新操作指針),在壞塊數(shù)量不溢出的情況下,然后對(duì)操作指針?biāo)傅奶鎿Q塊進(jìn)行編程操作。第三種情況是起始地址是壞塊,在對(duì)其替換塊的編程過程中沒有出現(xiàn)錯(cuò)誤。第四種情況是起始地址是壞塊,但對(duì)其替換塊的編程過程中出現(xiàn)錯(cuò)誤,則需要更新替換塊列表(用最新替換塊地址減去1得到的地址來替換當(dāng)前操作的替換塊地址),在壞塊數(shù)量不溢出的情況下,然后對(duì)操作指針?biāo)傅奶鎿Q塊進(jìn)行編程操作。當(dāng)編程出現(xiàn)錯(cuò)誤時(shí),表明該存儲(chǔ)塊已經(jīng)損壞,需要將已經(jīng)存儲(chǔ)的內(nèi)容轉(zhuǎn)移到替換的存儲(chǔ)塊里去。數(shù)據(jù)轉(zhuǎn)移包括兩部分首先是將當(dāng)前頁(yè)的存儲(chǔ)內(nèi)容轉(zhuǎn)存到替換塊對(duì)應(yīng)的頁(yè),其過程如圖7所示;其次是逐頁(yè)將壞塊上其他頁(yè)的存儲(chǔ)內(nèi)容先讀回到緩存寄存器堆并轉(zhuǎn)存到替換塊對(duì)應(yīng)的頁(yè),其過程如圖8所示。2.擦除操作本發(fā)明控制器采用塊擦除的方式進(jìn)行FLASH的擦除操作。擦除的流程如圖3所示。如果微處理器要求擦除的是壞塊,則實(shí)際對(duì)該壞塊的替換塊進(jìn)行擦除操作。當(dāng)原來的好塊擦除出現(xiàn)錯(cuò)誤時(shí),表示該存儲(chǔ)塊已經(jīng)損壞,需要將其地址增加到壞塊列表,并分配替換塊,然后對(duì)替換塊進(jìn)行擦除操作。當(dāng)替換塊擦除出現(xiàn)錯(cuò)誤時(shí),需要重新分配該壞塊的替換塊,然后對(duì)新的替換塊進(jìn)行擦除操作。3.讀操作本發(fā)明控制器對(duì)FLASH的讀操作釆用片選控制的頁(yè)讀取方式讀出512字節(jié)數(shù)據(jù)后,利用片選信號(hào)中斷讀操作。讀操作的流程如圖9所示。微控制器發(fā)出的起始地址是存儲(chǔ)塊的地址,本電路根據(jù)微控制器對(duì)同一存儲(chǔ)塊連續(xù)進(jìn)行讀操作的次數(shù)來產(chǎn)生存儲(chǔ)頁(yè)的地址。一次讀操作包括兩個(gè)階段首先讀數(shù)據(jù)頁(yè),然后再讀校驗(yàn)碼頁(yè)。數(shù)據(jù)和校驗(yàn)碼分布存到各自的緩存寄存器堆中。本發(fā)明說明書中未作詳細(xì)描述的內(nèi)容屬本領(lǐng)域技術(shù)人員的公知技術(shù)。權(quán)利要求1、一種大容量FLASH固存控制器,包括微控制器接口、FLASH接口、數(shù)據(jù)緩存單元、校驗(yàn)碼緩存單元、校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元,其特征在于還包括壞塊自動(dòng)處理單元和雙緩存控制單元,其中微控制器接口與微控制器進(jìn)行數(shù)據(jù)通信;FLASH接口與FLASH進(jìn)行數(shù)據(jù)通信;數(shù)據(jù)緩存單元存儲(chǔ)需要傳輸?shù)臄?shù)據(jù);校驗(yàn)碼緩存單元存儲(chǔ)與數(shù)據(jù)緩存單元存儲(chǔ)的數(shù)據(jù)相對(duì)應(yīng)的校驗(yàn)碼;校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元經(jīng)微控制器接口接收外部微控制器傳來的數(shù)據(jù),根據(jù)傳來的數(shù)據(jù)產(chǎn)生校驗(yàn)碼,并將所述數(shù)據(jù)和校驗(yàn)碼送至雙緩存控制單元;對(duì)雙緩存控制單元傳來的數(shù)據(jù)進(jìn)行糾檢錯(cuò)后經(jīng)微控制器接口送至外部微控制器;壞塊自動(dòng)處理單元自動(dòng)識(shí)別片外FLASH存儲(chǔ)器出現(xiàn)的壞存儲(chǔ)塊并為其分配替換塊,保證對(duì)片外FLASH存儲(chǔ)器的正常讀寫操作,無需用戶方進(jìn)行任何操作;雙緩存控制單元與微控制器接口、FLASH接口或壞塊自動(dòng)處理單元通信,實(shí)現(xiàn)對(duì)數(shù)據(jù)緩存單元和校驗(yàn)碼緩存單元的數(shù)據(jù)寫入或讀取操作。2、根據(jù)權(quán)利要求1所述的一種大容量FLASH固存控制器,其特征在于所述的雙緩存控制單元的工作方式為當(dāng)面向微控制器進(jìn)行數(shù)據(jù)操作時(shí),該單元同時(shí)對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存進(jìn)行操作;當(dāng)面向片外FLASH存儲(chǔ)器進(jìn)行正常數(shù)據(jù)操作時(shí),該單元對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存依次順序操作;當(dāng)面向片外FLASH存儲(chǔ)器進(jìn)行壞塊處理時(shí),該單元只對(duì)數(shù)據(jù)緩存和校驗(yàn)碼緩存中的一個(gè)進(jìn)行操作。3、根據(jù)權(quán)利要求1所述的一種大容量FLASH固存控制器,其特征在于(1)建立壞塊信息表,用于記錄壞塊和替換塊的地址映射關(guān)系;(2)設(shè)置壞塊信息記錄指針,用于指示當(dāng)前遇到的壞塊記錄位置,起始指向?yàn)閴膲K信息表的首記錄;設(shè)置壞塊信息操作指針,用于指示當(dāng)前正在使用的壞塊及與其對(duì)應(yīng)的替換塊,起始指向與壞塊信息記錄指針的起始指向相同;設(shè)置最新替換塊寄存器,用于保存最新分配的替換塊的地址;(3)當(dāng)存儲(chǔ)器出現(xiàn)壞塊時(shí),記錄該壞塊的地址,同時(shí)為該壞塊指定替換塊,將壞塊及其替換塊的地址添加至壞塊信息表中,最新替換塊寄存器指示所述替換塊的地址;替換塊的分配從存儲(chǔ)器的最高的塊地址開始向最低的塊地址依次遞減;(4)若所述替換塊也為壞塊,則跳過所述替換塊重新分配新的替換塊,替換塊為壞塊的不再添加至壞塊信息表中,最新替換塊寄存器指示所述新替換塊的地址并用其替換壞塊信息表中的相應(yīng)記錄;(5)壞塊信息記錄指針指向下一記錄位置,壞塊信息操作指針指向當(dāng)前遇到的壞塊及其替換塊的記錄位置,若當(dāng)前操作塊未出現(xiàn)在壞塊信息表的記錄中,則壞塊信息操作指針保留當(dāng)前指示位置。(6)當(dāng)壞塊的數(shù)量達(dá)到了所能容忍的最大壞塊個(gè)數(shù)或替換塊的地址達(dá)到了壞塊處理能力上限地址時(shí),提示壞塊數(shù)量溢出,無法繼續(xù)處理。4、根據(jù)權(quán)利要求3所述的一種面向大容量FLASH固存的壞塊處理方法,其特征在于所述的最低的塊地址為壞塊處理能力上限地址。5、根據(jù)權(quán)利要求3所述的一種面向大容量FLASH固存的壞塊處理方法,其特征在于所述的壞塊處理能力上限地址的確定方法為壞塊處理能力上限地址=存儲(chǔ)器最高位地址-所能容忍的最大壞塊個(gè)數(shù)+1,其中所能容忍的最大壞塊個(gè)數(shù)由用戶設(shè)定。6、根據(jù)權(quán)利要求1所述的一種大容量FLASH固存控制器,其特征在于所述的FLASH接口具有擴(kuò)展功能,可以攜帶256個(gè)備份FLASH。全文摘要一種大容量FLASH固存控制器,包括數(shù)據(jù)緩存單元、校驗(yàn)碼緩存單元、校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元、壞塊自動(dòng)處理單元和雙緩存控制單元。校驗(yàn)碼產(chǎn)生與糾檢錯(cuò)單元經(jīng)微控制器接口接收外部微控制器傳來的數(shù)據(jù),根據(jù)傳來的數(shù)據(jù)產(chǎn)生校驗(yàn)碼,并將數(shù)據(jù)和校驗(yàn)碼送至雙緩存控制單元;對(duì)雙緩存控制單元傳來的數(shù)據(jù)進(jìn)行糾檢錯(cuò)后經(jīng)微控制器接口送至外部微控制器。壞塊自動(dòng)處理單元自動(dòng)識(shí)別片外FLASH存儲(chǔ)器出現(xiàn)的壞存儲(chǔ)塊并為其分配替換塊,保證對(duì)片外FLASH存儲(chǔ)器的正常讀寫操作,無需用戶方進(jìn)行任何操作。雙緩存控制單元與微控制器接口、FLASH接口或壞塊自動(dòng)處理單元通信,實(shí)現(xiàn)對(duì)數(shù)據(jù)緩存單元和校驗(yàn)碼緩存單元的數(shù)據(jù)寫入或讀取操作。文檔編號(hào)G11C7/10GK101320592SQ20081011629公開日2008年12月10日申請(qǐng)日期2008年7月8日優(yōu)先權(quán)日2008年7月8日發(fā)明者爽姜,俊杜,蘇昌明,袁大威,趙可成,芳鮑申請(qǐng)人:北京時(shí)代民芯科技有限公司;中國(guó)航天時(shí)代電子公司第七七二研究所