關(guān)于EEPROM數(shù)據(jù)出錯(cuò)問題的探討
在家用電子產(chǎn)品特別是電視機(jī)產(chǎn)品中,用戶要經(jīng)常對(duì)機(jī)器的一些參數(shù)進(jìn)行調(diào)整,例如對(duì)比度、亮度、色飽和度、音量、清晰度、頻道排序等等。而這些參數(shù)對(duì)于每個(gè)用戶來(lái)說不盡相同,也就是說用戶經(jīng)常要調(diào)整的這些參數(shù)需要保存下來(lái),以免用戶每次都要重新調(diào)整。在機(jī)器中完成這項(xiàng)任務(wù)的是EEPROM,它具有可重復(fù)讀寫的功能,與主CPU的連接如圖1所示。
本文引用地址:http://2s4d.com/article/81633.htm主CPU和EEPROM 的連接有兩根信號(hào)線,一為時(shí)鐘信號(hào)(SCL),是主CPU對(duì)EEPROM進(jìn)行讀寫的基準(zhǔn)信號(hào);一為數(shù)據(jù)信號(hào)(SDA),主CPU對(duì)EEPROM進(jìn)行的讀寫操作是通過這根信號(hào)線進(jìn)行的。R1、R2一般為0到幾百歐姆之間,不能過大;上拉電阻R3、R4一般為2.2~4.7k?之間。
在開機(jī)的時(shí)候,主CPU通過總線讀出EEPROM里的數(shù)據(jù),加載到相關(guān)的芯片中。當(dāng)用戶對(duì)參數(shù)進(jìn)行修改時(shí),主CPU通過總線對(duì)EEPROM進(jìn)行數(shù)據(jù)寫入。為了防止數(shù)據(jù)出錯(cuò),在讀寫過程中稍微長(zhǎng)一點(diǎn)的數(shù)據(jù)都加入了校驗(yàn)碼,校驗(yàn)碼是根據(jù)要寫的數(shù)據(jù)按照一定的算法得到的。在寫入數(shù)據(jù)的時(shí)候連校驗(yàn)碼一起寫入,在讀出數(shù)據(jù)的時(shí)候,CPU會(huì)按照相同的算法再計(jì)算出一遍校驗(yàn)碼,和讀出的校驗(yàn)碼作對(duì)比,如果兩者一樣,則認(rèn)為這一個(gè)“寫”和“讀”的過程是正確且沒有發(fā)生數(shù)據(jù)錯(cuò)誤的,反之則認(rèn)為有錯(cuò)誤發(fā)生。一旦數(shù)據(jù)發(fā)生錯(cuò)誤,主CPU會(huì)把一套預(yù)先設(shè)置好的數(shù)據(jù)替換損壞的數(shù)據(jù),此過程我們稱之為復(fù)位。有些參數(shù)發(fā)生復(fù)位用戶可能不易察覺,如對(duì)比度、亮度、色飽和度、清晰度等,但是有些參數(shù)發(fā)生復(fù)位時(shí)用戶就會(huì)很容易發(fā)現(xiàn)并且認(rèn)為是有問題的,如節(jié)目信息。節(jié)目信息發(fā)生復(fù)位時(shí),只會(huì)保留預(yù)先設(shè)置的幾個(gè)頻道,大部分的頻道都消失了,并且節(jié)目的順序也有可能改變(如果機(jī)器有節(jié)目排序的功能且用戶使用了此功能),這樣用戶是不會(huì)接受的。所以怎樣防止EEPROM的數(shù)據(jù)出錯(cuò)是設(shè)計(jì)時(shí)要重點(diǎn)關(guān)注的問題,下面就從幾個(gè)方面分析原因及相對(duì)應(yīng)的解決措施。
1.開機(jī)時(shí)。機(jī)器剛加電時(shí),各種狀態(tài)正在建立,有的供電電壓還沒有完全達(dá)到穩(wěn)定狀態(tài),有的高壓(如CRT電視的陽(yáng)極高壓或液晶電視的背光電壓)在建立的過程可能會(huì)產(chǎn)生嚴(yán)重的干擾,所以此時(shí)不要對(duì)EEPROM進(jìn)行讀寫,如果在這個(gè)時(shí)候進(jìn)行讀寫操作的話其出錯(cuò)的幾率將大大增加。此種情況比較簡(jiǎn)單,只要有意延遲一段時(shí)間等各種狀態(tài)穩(wěn)定了再進(jìn)行讀寫操作就可以了。
2.關(guān)機(jī)時(shí)。當(dāng)主CPU對(duì)EEPROM進(jìn)行寫操作的時(shí)候,如果斷電比較容易出現(xiàn)數(shù)據(jù)出錯(cuò)現(xiàn)象。因?yàn)楝F(xiàn)在的電視方案一般來(lái)說主CPU的外圍電壓和EEPROM的電壓是3.3V,而主CPU的內(nèi)核電壓一般為2.5V或1.8V甚至1.5V。當(dāng)發(fā)生斷電時(shí),3.3V電壓首先降低,若干毫秒后內(nèi)核電壓才開始下降。在此時(shí)間差內(nèi)有一段時(shí)間是主CPU的外圍和EEPROM介于工作的臨界狀態(tài)或已經(jīng)不工作了,而主CPU內(nèi)核還在工作,還在進(jìn)行數(shù)據(jù)的寫操作,這種“非正常工作狀態(tài)”下數(shù)據(jù)出錯(cuò)的概率非常高,要避免此情況出現(xiàn)。如圖2所示,這是在實(shí)際的機(jī)器中捕捉到的時(shí)序圖:通道1為主CPU的外圍和EEPROM的共用電源電壓3.3V,通道2為主CPU的內(nèi)核電源電壓1.8V,通道3為主CPU和EEPROM之間的數(shù)據(jù)信號(hào)(SDA)。由圖可以看出3.3V電壓已經(jīng)下降到2.5V左右了,而1.8V還沒有下降,總線上還有數(shù)據(jù),兩個(gè)電壓下降的時(shí)間差約為10毫秒。EEPROM的工作電壓一般可以低到2.7V甚至1.8V,但是換用1.8V工作電壓的EEPROM不能解決問題,因?yàn)镃PU的3.3V外圍電壓一般不能工作在如此低的電壓上。
關(guān)機(jī)情況分為兩種:待機(jī)和交流關(guān)機(jī)。
1.待機(jī)。待機(jī)又分為兩種情況:主CPU待機(jī)和副CPU待機(jī)。現(xiàn)在的電視機(jī)方案集成度越來(lái)越高,主芯片不僅包含CPU,還包含DECODER、DEINTERLACE、SCALER甚至HDMI和LVDS等功能模塊,也正是由于這個(gè)原因主CPU在待機(jī)時(shí)的功率不容易降低,如果有待機(jī)功率小于1瓦的要求的話,一般要加一個(gè)專門用來(lái)待機(jī)用的副CPU。另外一方面,主芯片軟件系統(tǒng)復(fù)雜,為了降低軟件的工作量,增加一個(gè)待機(jī)用的副CPU也是一種選擇。當(dāng)用主CPU待機(jī)時(shí),接收到待機(jī)的遙控或按鍵信號(hào)時(shí),主CPU可以在數(shù)據(jù)讀寫完成以后再進(jìn)入待機(jī)狀態(tài),避免了數(shù)據(jù)出錯(cuò)的發(fā)生。當(dāng)用副CPU待機(jī)時(shí),副CPU接收到待機(jī)的遙控或按鍵信號(hào)時(shí),要通知主CPU將要進(jìn)入待機(jī)狀態(tài),主CPU寫完數(shù)據(jù)后再通知副CPU可以進(jìn)入待機(jī)狀態(tài)就可以了。用兩個(gè)簡(jiǎn)單的I/O信號(hào)即可以實(shí)現(xiàn)此通知功能。當(dāng)然主副CPU之間用總線通訊也可以,不過這種方式軟件的工作量要大得多。
2.交流關(guān)機(jī)。此種關(guān)機(jī)方式和上面的待機(jī)方式不同,用軟件是不可以控制的,什么時(shí)候關(guān)機(jī)根本不知道。對(duì)于這種情況的解決方法是:首先在電路上設(shè)計(jì)一個(gè)專門的復(fù)位電路或芯片用來(lái)監(jiān)視3.3V電源,當(dāng)3.3V下降到約2.9V~3.0V(我們暫且稱之為復(fù)位電壓)之間時(shí)復(fù)位電路發(fā)出復(fù)位信號(hào)對(duì)主CPU進(jìn)行復(fù)位,CPU在還是正常工作狀態(tài)下停止對(duì)EEPROM寫數(shù)據(jù),通過總線對(duì)EEPROM復(fù)位,從而避免了數(shù)據(jù)出錯(cuò)。其時(shí)序如圖3所示,通道1位3.3V電源,通道2為復(fù)位信號(hào),由圖可以看出,3.3V電源電壓下降到2.9V左右復(fù)位電路開始動(dòng)作,發(fā)出復(fù)位信號(hào)(圖3是低電壓復(fù)位的示意圖)。
必須注意復(fù)位電壓的高低選取非常重要,復(fù)位電壓過高即很接近3.3V會(huì)因?yàn)檩p微的電壓波動(dòng)而造成誤動(dòng)作;復(fù)位電壓過低則起不到應(yīng)有的作用,即不能在主CPU電源電壓降到非正常之前進(jìn)行復(fù)位。
另外,監(jiān)視電壓的選取不一定必須是主CPU的電源電壓,選取提供3.3V電源的穩(wěn)壓器的輸入端電壓(例如5.0V或更高)作為監(jiān)視電壓往往會(huì)有更好的效果,因?yàn)殛P(guān)機(jī)時(shí)電壓高的電源總是首先下降,當(dāng)然復(fù)位電壓也要相應(yīng)的提高才能夠匹配。例如穩(wěn)壓器的輸入端電壓是5.0V,復(fù)位電壓選取在4.3V~4.7V之間,關(guān)機(jī)時(shí)當(dāng)5.0V電壓下降到4.3V~4.7V之間時(shí)3.3V電壓還沒有下降,這時(shí)候復(fù)位電路就發(fā)出復(fù)位信號(hào)使主CPU復(fù)位,更能保證主CPU和EEPROM還是在正常工作的情況進(jìn)行了復(fù)位,也就沒有了數(shù)據(jù)出錯(cuò)的可能。時(shí)序關(guān)系如圖4所示,通道1為3.3V電源,通道2位穩(wěn)壓器的輸入電源5V。
其次,軟件在設(shè)計(jì)時(shí)考慮把用戶修改的數(shù)據(jù)“即時(shí)”寫入,例如用戶在調(diào)整音量時(shí),只要松開按鍵就要把當(dāng)前到的數(shù)據(jù)寫入到EEPROM中,而一般的數(shù)據(jù)寫入時(shí)間較短(一般為幾十毫秒),所以這種情況下在寫數(shù)據(jù)時(shí)關(guān)機(jī)的可能性極小,極大的降低了出錯(cuò)的概率。
另外,軟件設(shè)計(jì)時(shí)還要考慮數(shù)據(jù)在EEPROM里面的存放問題,EEPROM中數(shù)據(jù)存放的空間分成若干個(gè)區(qū)域,我們把每一個(gè)區(qū)域叫做“節(jié)點(diǎn)”。一個(gè)“節(jié)點(diǎn)”上不要存放太多的數(shù)據(jù),盡量把數(shù)據(jù)平均的分配到各個(gè)“節(jié)點(diǎn)”上,這樣就避免了在數(shù)據(jù)寫入的時(shí)候占用較長(zhǎng)的時(shí)間,從而降低了數(shù)據(jù)出錯(cuò)的概率。如果某些方面的數(shù)據(jù)很大而又不方便拆開放置,如保存頻道的信息,則這些數(shù)據(jù)不要和用戶要經(jīng)常調(diào)整的數(shù)據(jù)放在一個(gè)“節(jié)點(diǎn)”上。因?yàn)橛脩粢话悴粫?huì)經(jīng)常改變頻道信息,除非進(jìn)行搜索節(jié)目,而這樣的操作極少進(jìn)行,也就不會(huì)經(jīng)常對(duì)這個(gè)“節(jié)點(diǎn)”進(jìn)行數(shù)據(jù)寫入,從而出錯(cuò)的概率大大降低。
上拉電阻相關(guān)文章:上拉電阻原理
評(píng)論