專利名稱::基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種可編程器件的數(shù)據(jù)保護(hù)方法,具體涉及一種基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法。
背景技術(shù):
:循環(huán)冗余校驗(yàn)(碼)(CyclicRedundancyCheck(Code),簡(jiǎn)稱為CRC),是一類重要的線性分組碼,編碼和解碼方法簡(jiǎn)單,檢錯(cuò)和糾錯(cuò)能力強(qiáng),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯(cuò)控制??删幊唐骷?ProgrammableRead-OnlyMemory,簡(jiǎn)稱為PROM),主流產(chǎn)品是采用雙層?xùn)?二層poly)結(jié)構(gòu),其中有可擦除可編程存儲(chǔ)器(ErasableProgrammableRead-OnlyMemory,簡(jiǎn)稱為EPR0M)和電可擦可編程只讀存儲(chǔ)器(ElectricallyErasableProgrammableRead-OnlyMemory,簡(jiǎn)稱為EEI3ROM)等。EEPROM是一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片,可以在專用設(shè)備上擦除已有信息,重新編程。一般用在一些電子產(chǎn)品中,用來存放產(chǎn)品的一些重要的信息,和設(shè)備的參數(shù);防止在意外情況發(fā)生下,如產(chǎn)品掉電等意外發(fā)生時(shí),產(chǎn)品的一些重要信息,還有所保存。EPROM和EEPROM工作原理大體相同,主要結(jié)構(gòu)如圖1所示。浮柵中沒有電子注入時(shí),在控制柵加電壓時(shí),浮柵中的電子跑到上層,下層出現(xiàn)空穴。由于感應(yīng),便會(huì)吸引電子,并開啟溝道。如果浮柵中有電子的注入時(shí),即加大的管子的閾值電壓,溝道處于關(guān)閉狀態(tài)。這樣就達(dá)成了開關(guān)功能。EEPROM的寫入過程,是利用了隧道效應(yīng),即能量小于能量勢(shì)壘的電子能夠穿越勢(shì)壘到達(dá)另一邊。量子力學(xué)認(rèn)為物理尺寸與電子自由程相當(dāng)時(shí),電子將呈現(xiàn)波動(dòng)性,這里就是表明物體要足夠的小。就PN結(jié)來看,當(dāng)P和N的雜質(zhì)濃度達(dá)到一定水平時(shí),并且空間電荷極少時(shí),電子就會(huì)因隧道效應(yīng)向?qū)нw移。電子的能量處于某個(gè)級(jí)別允許級(jí)別的范圍稱為“帶”,較低的能帶稱為價(jià)帶,較高的能帶稱為導(dǎo)帶。電子到達(dá)較高的導(dǎo)帶時(shí)就可以在原子間自由的運(yùn)動(dòng),這種運(yùn)動(dòng)就是電流。EEPROM寫入過程,如圖2所示,根據(jù)隧道效應(yīng),包圍浮柵的SiO2,必須極薄以降低勢(shì)壘。源漏極接地,處于導(dǎo)通狀態(tài)。在控制柵上施加高于閾值電壓的高壓,以減少電場(chǎng)作用,吸引電子穿越。要達(dá)到消去電子的要求,EEPROM也是通過隧道效應(yīng)達(dá)成的。如圖3所示,在漏極加高壓,控制柵為0V,翻轉(zhuǎn)拉力方向,將電子從浮柵中拉出。這個(gè)動(dòng)作,如果控制不好,會(huì)出現(xiàn)過消去的結(jié)果。由于EEPROM的擦除不需要借助于其它設(shè)備,它是以電子信號(hào)來修改其內(nèi)容的,而且是以字節(jié)(Byte)為最小修改單位,不必將資料全部洗掉才能寫入,徹底擺脫了EPROM擦除器和編程器的束縛。EEPROM在寫入數(shù)據(jù)時(shí),仍要利用一定的編程電壓才可以將相應(yīng)的地址內(nèi)的內(nèi)容做出修改?,F(xiàn)在越來越多的電子產(chǎn)品都將EEPROM移植入自己的硬件電路中,來存儲(chǔ)一些重要的產(chǎn)品信息,和一些硬件參數(shù)。而這些數(shù)據(jù)一旦出現(xiàn)錯(cuò)誤都會(huì)對(duì)我們的產(chǎn)品有很大的影響,有的時(shí)候還會(huì)帶來很大的隱患。對(duì)于汽車產(chǎn)品就更為重要,因此對(duì)可編程器件的數(shù)據(jù)保護(hù)需要進(jìn)一步研究。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,它可以提高可編程器件的數(shù)據(jù)準(zhǔn)確性。為了解決以上技術(shù)問題,本發(fā)明提供了一種基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,包括每次存儲(chǔ)可編程器件中的數(shù)據(jù)時(shí),進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將新的循環(huán)冗余校驗(yàn)碼存入到可編程器件中,替代原有的循環(huán)冗余校驗(yàn)碼;每次讀取可編程器件中的數(shù)據(jù)時(shí),也進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將計(jì)算出的校驗(yàn)碼與先前存入的校驗(yàn)碼進(jìn)行比較,相同則證明數(shù)據(jù)有效,不同則證明數(shù)據(jù)無效。因?yàn)楸景l(fā)明用基于循環(huán)冗余校驗(yàn)對(duì)可編程器件的數(shù)據(jù)進(jìn)行驗(yàn)證,可以有效提高可編程器件的數(shù)據(jù)準(zhǔn)確性。下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。圖1是可編程器件采用雙層?xùn)?二層Poly)結(jié)構(gòu)示意圖;圖2是EEPROM的寫入過程;圖3是消去電子的過程;圖4是基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法的流程圖。具體實(shí)施例方式如圖4所示,本發(fā)明的基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,包括每次存儲(chǔ)可編程器件中的數(shù)據(jù)時(shí),進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將新的循環(huán)冗余校驗(yàn)碼存入到可編程器件中,替代原有的循環(huán)冗余校驗(yàn)碼;和每次讀取可編程器件中的數(shù)據(jù)時(shí),也進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將計(jì)算出的校驗(yàn)碼與先前存入的校驗(yàn)碼進(jìn)行比較,相同則證明數(shù)據(jù)有效,不同則證明數(shù)據(jù)無效。實(shí)施例一CRC計(jì)算與普通的除法計(jì)算有所不同。普通的除法計(jì)算是借位相減的,而CRC計(jì)算則是異或運(yùn)算。任何一個(gè)除法運(yùn)算都需要選取一個(gè)除數(shù),在CRC運(yùn)算中我們稱之為poly,而寬度W就是poly最高位的位置。比如poly1001的W是3,而不是4。注意最高位總是1,當(dāng)你選定一個(gè)寬度,那么你只需要選擇低W各位的值。假如我們想計(jì)算一個(gè)位串的CRC碼,并要保證每一位都要被處理,因此我們需要在目標(biāo)位串后面加上W個(gè)0。下面舉例說明CRC算法的過程。在此例中,我們假設(shè)位串為110101101。Poly=10011(寬度W=4)位串末尾增加W個(gè)后=110101101000010011/1101011010000/110000101(我們不關(guān)心此運(yùn)算的商)IOOIiI111111-----1ιιιιιι10011IIIIII10011IIIIII-----1Illlllooooi11111ooooo11111-----1IllllOOOlOlIII00000IIII-----1IlllOOlOlIIIOOOOOIII-----IIIOlOlOlIOOOOOII-----1I10100110011I-----1OlllOOOOOO-----1110010011-----1111->余數(shù)->CRC碼計(jì)算過程總結(jié)如下1.只有當(dāng)位串的最高位為1,我們才將它與poly做異或(XOR)運(yùn)算,否則我們只是將位串左移一位。2.異或運(yùn)算的結(jié)果實(shí)質(zhì)上是被操作位串與poly的低W位進(jìn)行運(yùn)算的結(jié)果,因?yàn)樽罡呶豢倿?。基于上述原理,將算法設(shè)計(jì)如下因?yàn)槲贿\(yùn)算的算法是非常慢的而且效率低下,如果將計(jì)算放在每一字節(jié)上進(jìn)行,那么效率將大大提高,因此將循環(huán)冗余校驗(yàn)基于字節(jié)進(jìn)行運(yùn)算,除數(shù)的寬度為8(一個(gè)字節(jié)長(zhǎng)度)的整數(shù)倍,例如選用一個(gè)寬度為32的poly(W=32)。用一個(gè)寄存器來存放暫時(shí)的CRC結(jié)果,下面稱它為CRC寄存器或者寄存器。從右至左的移動(dòng)位串,當(dāng)從左邊移出的位是1,則整個(gè)寄存器被與poly的低W位進(jìn)行XOR運(yùn)算。(此例中為32)。移動(dòng)前寄存器值為10110100當(dāng)從右邊移入4位時(shí),左邊的高4位將被移出,此例中1011將被移出,而1101被移入。情況如下當(dāng)前8位CRC寄存器01001101剛剛被移出的高4位1011選用此poly:101011100,寬度W=8現(xiàn)在用上述介紹的方法來計(jì)算寄存器的新值。頂部寄存器------------101101001101高四位和當(dāng)前記存器值101011100+(*l)Poly放在頂部最高位進(jìn)行XOR運(yùn)算(因?yàn)槟抢锸?)-------------000110101101運(yùn)算結(jié)果現(xiàn)在仍有一位1在高4位000110101101上一步結(jié)果101011100+(*2)Poly放在頂部的最低位進(jìn)行XOR運(yùn)算(因?yàn)槟抢锸?)-------------000011110001第二步運(yùn)算結(jié)果現(xiàn)在高四位所有位均為0,所以不需要在與poly進(jìn)行XOR運(yùn)算。上面的計(jì)算過程,可以得到相同的結(jié)果,如果先將(*1)與(*2)做XOR然后將結(jié)果與寄存器值做X0R。這就是標(biāo)準(zhǔn)XOR運(yùn)算的特性(aXORb)X0Rc=aXOR(bXORc)由此,推出如下的運(yùn)算順序也是正確的。101011100poly(*1)放在頂部最高位101011100+poly(*2)放在頂部最低位-------------101110111100(*3)XOR運(yùn)算結(jié)果結(jié)果(*3)將(*3)與寄存器的值做XOR運(yùn)算101110111100101101001101+-------------000011110001這樣得到一樣的結(jié)果!現(xiàn)在(*3)變的重要了,因?yàn)轫敳繛?010則(3)的值總是等于10111100,這意味著你可以預(yù)先計(jì)算出任意頂部位結(jié)合的XOR值。注意,頂部結(jié)果總是0,這就是組合XOR操作導(dǎo)致的結(jié)果。實(shí)施例二、值表(directtable)算法上面提到的算法可以被優(yōu)化。字節(jié)串中的字節(jié)在被用到之前沒有必要經(jīng)過整個(gè)寄存器。用這個(gè)新的算法,可以直接用一個(gè)字節(jié)去XOR—個(gè)字節(jié)串通過將此字節(jié)移出寄存器。結(jié)果指向預(yù)先計(jì)算的表中的一個(gè)值,這個(gè)值是用來被寄存器的值做XOR運(yùn)算的。實(shí)施例三、反射值表(reflecteddirectTable)算法reflecteddirectTable算法是與directtable算法相對(duì)應(yīng)的“反射”算法,提出“反射”是因?yàn)閁ART(—種操作IO的芯片)發(fā)送每一個(gè)字節(jié)時(shí)是先發(fā)最低位(即0位),最后發(fā)送最高位(即第七位)。這與正常的字節(jié)位置是相逆的。為了針對(duì)這種數(shù)據(jù)進(jìn)行CRC校驗(yàn),在算法上作了相應(yīng)的調(diào)整,這就是reflecteddirectTable算法。這種算法中除了信息串不做反射以外,在進(jìn)行下一步操作前,要將其于的數(shù)據(jù)都做反射處理。所以在計(jì)算值表時(shí),位向右移,且poly也是作過反射處理的。當(dāng)然,在計(jì)算CRC時(shí),寄存器也要向右移,而且值表也必須是反射過的。算法如下1、將寄存器向右移動(dòng)一個(gè)字節(jié)。2、將剛移出的哪個(gè)字節(jié)與字節(jié)串中的新字節(jié)做XOR運(yùn)算,得出一個(gè)指向值表table的索引3、將索引所指的表值與寄存器做XOR運(yùn)算。4、如數(shù)據(jù)沒有全部處理完,則跳到步驟1。綜上所述,當(dāng)對(duì)EEPROM存儲(chǔ)數(shù)據(jù)時(shí),使用了上述的CRC校驗(yàn)的算法后,在往EEPROM存儲(chǔ)相應(yīng)的數(shù)據(jù)時(shí),再將計(jì)算過的CRC校驗(yàn)碼同時(shí)也存入到EEPROM中。這樣,在以后對(duì)這些數(shù)據(jù)進(jìn)行操作的時(shí)候,我們都可以對(duì)這些數(shù)據(jù)進(jìn)行一次CRC校驗(yàn)的計(jì)算,當(dāng)算出來的CRC校驗(yàn)碼與先前存入的CRC校驗(yàn)碼相同時(shí),就可以相信EEPROM中的數(shù)據(jù)是沒有被破壞的。權(quán)利要求一種基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,其特征在于,包括每次存儲(chǔ)可編程器件中的數(shù)據(jù)時(shí),進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將新的循環(huán)冗余校驗(yàn)碼存入到可編程器件中,替代原有的循環(huán)冗余校驗(yàn)碼;每次讀取可編程器件中的數(shù)據(jù)時(shí),也進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將計(jì)算出的校驗(yàn)碼與先前存入的校驗(yàn)碼進(jìn)行比較,相同則證明數(shù)據(jù)有效,不同則證明數(shù)據(jù)無效。2.如權(quán)利要求1所述的基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,其特征在于,所述的循環(huán)冗余校驗(yàn)是基于字節(jié)進(jìn)行運(yùn)算的,所述循環(huán)冗余校驗(yàn)中的除數(shù)的寬度為8的整數(shù)倍。3.如權(quán)利要求2所述的基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,其特征在于,所述的循環(huán)冗余校驗(yàn)是值表算法。4.如權(quán)利要求2所述的基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,其特征在于,所述的循環(huán)冗余校驗(yàn)是反射值表算法。全文摘要本發(fā)明公開了一種基于循環(huán)冗余校驗(yàn)的可編程器件的數(shù)據(jù)保護(hù)方法,包括每次存儲(chǔ)可編程器件中的數(shù)據(jù)時(shí),進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將新的循環(huán)冗余校驗(yàn)碼存入到可編程器件中,替代原有的循環(huán)冗余校驗(yàn)碼;每次讀取可編程器件中的數(shù)據(jù)時(shí),也進(jìn)行一次循環(huán)冗余校驗(yàn)計(jì)算,將計(jì)算出的校驗(yàn)碼與先前存入的校驗(yàn)碼進(jìn)行比較,相同則證明數(shù)據(jù)有效,不同則證明數(shù)據(jù)無效。因?yàn)楸景l(fā)明用基于循環(huán)冗余校驗(yàn)對(duì)可編程器件的數(shù)據(jù)進(jìn)行驗(yàn)證,可以有效提高可編程器件的數(shù)據(jù)準(zhǔn)確性。文檔編號(hào)G11C29/40GK101800084SQ20091004601公開日2010年8月11日申請(qǐng)日期2009年2月6日優(yōu)先權(quán)日2009年2月6日發(fā)明者楊毅,王明明,臧鐵生申請(qǐng)人:上海德科電子儀表有限公司