嵌入式系統(tǒng)中非易失、不可復(fù)位計(jì)數(shù)器的實(shí)現(xiàn)
本文介紹如何利用常見(jiàn)串行EEPROM的EPROM仿真模式及編碼機(jī)制解決這一問(wèn)題。
設(shè)計(jì)目標(biāo)
有些應(yīng)用中,考慮到質(zhì)保期的要求,希望能夠?qū)μ囟ǖ氖录M(jìn)行計(jì)數(shù)和記錄,例如上電次數(shù)、工作時(shí)間、硬(按鈕)復(fù)位和超時(shí)。傳統(tǒng)的電子計(jì)數(shù)器通常由雙穩(wěn)態(tài)多諧振蕩器組成,采用二進(jìn)制編碼,如圖1所示。當(dāng)全部觸發(fā)器復(fù)位時(shí),則達(dá)到最大計(jì)數(shù)值,計(jì)數(shù)器規(guī)模由核查期限內(nèi)允許發(fā)生某些事件的最大次數(shù)決定。
Bit Number | ||||||||||
n+1 | n | ... | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
2n | 2n-1 | ... | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
圖1. 二進(jìn)制碼中,下一位比上一位位值翻倍。
定位需求
盡管基于觸發(fā)器的計(jì)數(shù)器很容易搭建,但它存在一個(gè)缺點(diǎn)。當(dāng)達(dá)到計(jì)數(shù)限值時(shí),計(jì)數(shù)器反轉(zhuǎn)為零(自動(dòng)復(fù)位)。工作狀態(tài)也是易失的—需要電源維持其計(jì)數(shù)狀態(tài)。第一個(gè)問(wèn)題可通過(guò)達(dá)到限值時(shí)凍結(jié)計(jì)數(shù)器解決;也可以通過(guò)安裝電池維持計(jì)數(shù)器的供電,從而解決第二個(gè)問(wèn)題。但這些措施在實(shí)際應(yīng)用中可能無(wú)法接受,因?yàn)樵黾恿顺杀?,且工作時(shí)間有限。
一種替代方案是:將計(jì)數(shù)值備份在EEPROM或其它形式的非易失(NV)存儲(chǔ)器中。下次上電時(shí),將該NV存儲(chǔ)器中儲(chǔ)存的數(shù)值加載到計(jì)數(shù)器。然而,除非NV存儲(chǔ)器嵌入另一個(gè)芯片,例如微控制器或FPGA,否則存儲(chǔ)器內(nèi)容并不安全,因?yàn)榇鎯?chǔ)器芯片很容易拆除、重新編程(復(fù)位),然后重新安裝到電路板上。因此,這種方法不滿足不可復(fù)位的要求。
傳統(tǒng)設(shè)計(jì)
EPROM是另一種不需要電池的非易失存儲(chǔ)器。EPROM在上世紀(jì)70年代隨著微處理器的出現(xiàn)得到廣泛使用。出廠時(shí),EPROM的全部字節(jié)為FFh。通過(guò)將某一位從1 (擦除)置為0 (編程)來(lái)儲(chǔ)存數(shù)據(jù);編程需要12V至13V脈沖電壓。加載新數(shù)據(jù)之前,必須用高強(qiáng)度紫外線通過(guò)封裝上的窗口照射芯片,從而擦除整個(gè)存儲(chǔ)器。一次性編程(OTP) EPROM器件沒(méi)有窗口,因此不可擦除。由于這些不便之處,EPROM的主導(dǎo)地位逐漸被EEPROM和高密度閃存所取代,后兩者的工作和編程電壓為5V或更低。雖然如此,將OTP EPROM一次可編程(1至0)及不可擦除的特點(diǎn)與現(xiàn)代EEPROM技術(shù)相結(jié)合,能夠得到EPROM仿真模式的新特性。EPROM仿真模式是實(shí)現(xiàn)非易失、不可復(fù)位計(jì)數(shù)器的關(guān)鍵技術(shù)。
EPROM仿真模式
串口EEPROM的一個(gè)常用功能是充當(dāng)寫(xiě)入頁(yè)的緩存器,能夠一次編程整個(gè)存儲(chǔ)器頁(yè)。收到寫(xiě)命令時(shí),系統(tǒng)自動(dòng)裝載包含尋址存儲(chǔ)器數(shù)據(jù)的頁(yè)緩存器內(nèi)容。對(duì)于EPROM仿真模式,按照移位寄存器寫(xiě)緩存器(圖2)。輸入新數(shù)據(jù)(D-IN)送到一個(gè)“與”門(mén),在進(jìn)入緩存器(S-IN)之前將其與緩存器數(shù)據(jù)(S-OUT)相組合。因此,“與”門(mén)確保存儲(chǔ)器位在置為0后不會(huì)變?yōu)?。經(jīng)過(guò)一個(gè)完整的頁(yè)操作周期后,緩存器的數(shù)據(jù)再次與存儲(chǔ)器頁(yè)中的數(shù)據(jù)對(duì)齊。隨后可以開(kāi)始一個(gè)寫(xiě)周期,將整個(gè)緩存器內(nèi)容復(fù)制到非易失EEPROM。
圖2. EPROM仿真將新數(shù)據(jù)與已有數(shù)據(jù)位相“與”,寫(xiě)回到存儲(chǔ)器。
EPROM計(jì)數(shù)
由于EPROM位只能在一個(gè)方向改變,不支持傳統(tǒng)的計(jì)數(shù)器設(shè)計(jì)思路,而是將整個(gè)存儲(chǔ)器陣列視為一個(gè)n位的單體。初始狀態(tài)下,n位存儲(chǔ)單元均未編程(為1)。為了對(duì)事件計(jì)數(shù),必須將未編程的位更改為0。可以簡(jiǎn)單地隨機(jī)選擇下一個(gè)編程位,但圖3所示方法更容易實(shí)現(xiàn)。該方法從最低有效位開(kāi)始依次計(jì)數(shù),直到對(duì)一個(gè)字節(jié)的所有位進(jìn)行編程。然后再逐位編程下一個(gè)字節(jié),依此循環(huán)。EPROM仿真模式下,1024位存儲(chǔ)器芯片可以對(duì)1024個(gè)事件計(jì)數(shù)。
Count Value | Hex Code | Bit Number | |||||||
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | ||
0 | FFh | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | FEh | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
2 | FCh | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
3 | F8h | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
4 | F0h | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
5 | E0h | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
6 | C0h | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 80h | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8 | 00h | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
圖3. EPROM計(jì)數(shù)要求對(duì)每一位設(shè)置相同值。
評(píng)論