关于EEPROM数据出错问题的探讨
在家用电子产品特别是电视机产品中,用户要经常对机器的一些参数进行调整,例如对比度、亮度、色饱和度、音量、清晰度、频道排序等等。而这些参数对于每个用户来说不尽相同,也就是说用户经常要调整的这些参数需要保存下来,以免用户每次都要重新调整。在机器中完成这项任务的是EEPROM,它具有可重复读写的功能,与主CPU的连接如图1所示。
本文引用地址:http://www.amcfsurvey.com/article/81633.htm主CPU和EEPROM 的连接有两根信号线,一为时钟信号(SCL),是主CPU对EEPROM进行读写的基准信号;一为数据信号(SDA),主CPU对EEPROM进行的读写操作是通过这根信号线进行的。R1、R2一般为0到几百欧姆之间,不能过大;上拉电阻R3、R4一般为2.2~4.7k?之间。
在开机的时候,主CPU通过总线读出EEPROM里的数据,加载到相关的芯片中。当用户对参数进行修改时,主CPU通过总线对EEPROM进行数据写入。为了防止数据出错,在读写过程中稍微长一点的数据都加入了校验码,校验码是根据要写的数据按照一定的算法得到的。在写入数据的时候连校验码一起写入,在读出数据的时候,CPU会按照相同的算法再计算出一遍校验码,和读出的校验码作对比,如果两者一样,则认为这一个“写”和“读”的过程是正确且没有发生数据错误的,反之则认为有错误发生。一旦数据发生错误,主CPU会把一套预先设置好的数据替换损坏的数据,此过程我们称之为复位。有些参数发生复位用户可能不易察觉,如对比度、亮度、色饱和度、清晰度等,但是有些参数发生复位时用户就会很容易发现并且认为是有问题的,如节目信息。节目信息发生复位时,只会保留预先设置的几个频道,大部分的频道都消失了,并且节目的顺序也有可能改变(如果机器有节目排序的功能且用户使用了此功能),这样用户是不会接受的。所以怎样防止EEPROM的数据出错是设计时要重点关注的问题,下面就从几个方面分析原因及相对应的解决措施。
1.开机时。机器刚加电时,各种状态正在建立,有的供电电压还没有完全达到稳定状态,有的高压(如CRT电视的阳极高压或液晶电视的背光电压)在建立的过程可能会产生严重的干扰,所以此时不要对EEPROM进行读写,如果在这个时候进行读写操作的话其出错的几率将大大增加。此种情况比较简单,只要有意延迟一段时间等各种状态稳定了再进行读写操作就可以了。
2.关机时。当主CPU对EEPROM进行写操作的时候,如果断电比较容易出现数据出错现象。因为现在的电视方案一般来说主CPU的外围电压和EEPROM的电压是3.3V,而主CPU的内核电压一般为2.5V或1.8V甚至1.5V。当发生断电时,3.3V电压首先降低,若干毫秒后内核电压才开始下降。在此时间差内有一段时间是主CPU的外围和EEPROM介于工作的临界状态或已经不工作了,而主CPU内核还在工作,还在进行数据的写操作,这种“非正常工作状态”下数据出错的概率非常高,要避免此情况出现。如图2所示,这是在实际的机器中捕捉到的时序图:通道1为主CPU的外围和EEPROM的共用电源电压3.3V,通道2为主CPU的内核电源电压1.8V,通道3为主CPU和EEPROM之间的数据信号(SDA)。由图可以看出3.3V电压已经下降到2.5V左右了,而1.8V还没有下降,总线上还有数据,两个电压下降的时间差约为10毫秒。EEPROM的工作电压一般可以低到2.7V甚至1.8V,但是换用1.8V工作电压的EEPROM不能解决问题,因为CPU的3.3V外围电压一般不能工作在如此低的电压上。
关机情况分为两种:待机和交流关机。
1.待机。待机又分为两种情况:主CPU待机和副CPU待机。现在的电视机方案集成度越来越高,主芯片不仅包含CPU,还包含DECODER、DEINTERLACE、SCALER甚至HDMI和LVDS等功能模块,也正是由于这个原因主CPU在待机时的功率不容易降低,如果有待机功率小于1瓦的要求的话,一般要加一个专门用来待机用的副CPU。另外一方面,主芯片软件系统复杂,为了降低软件的工作量,增加一个待机用的副CPU也是一种选择。当用主CPU待机时,接收到待机的遥控或按键信号时,主CPU可以在数据读写完成以后再进入待机状态,避免了数据出错的发生。当用副CPU待机时,副CPU接收到待机的遥控或按键信号时,要通知主CPU将要进入待机状态,主CPU写完数据后再通知副CPU可以进入待机状态就可以了。用两个简单的I/O信号即可以实现此通知功能。当然主副CPU之间用总线通讯也可以,不过这种方式软件的工作量要大得多。
2.交流关机。此种关机方式和上面的待机方式不同,用软件是不可以控制的,什么时候关机根本不知道。对于这种情况的解决方法是:首先在电路上设计一个专门的复位电路或芯片用来监视3.3V电源,当3.3V下降到约2.9V~3.0V(我们暂且称之为复位电压)之间时复位电路发出复位信号对主CPU进行复位,CPU在还是正常工作状态下停止对EEPROM写数据,通过总线对EEPROM复位,从而避免了数据出错。其时序如图3所示,通道1位3.3V电源,通道2为复位信号,由图可以看出,3.3V电源电压下降到2.9V左右复位电路开始动作,发出复位信号(图3是低电压复位的示意图)。
必须注意复位电压的高低选取非常重要,复位电压过高即很接近3.3V会因为轻微的电压波动而造成误动作;复位电压过低则起不到应有的作用,即不能在主CPU电源电压降到非正常之前进行复位。
另外,监视电压的选取不一定必须是主CPU的电源电压,选取提供3.3V电源的稳压器的输入端电压(例如5.0V或更高)作为监视电压往往会有更好的效果,因为关机时电压高的电源总是首先下降,当然复位电压也要相应的提高才能够匹配。例如稳压器的输入端电压是5.0V,复位电压选取在4.3V~4.7V之间,关机时当5.0V电压下降到4.3V~4.7V之间时3.3V电压还没有下降,这时候复位电路就发出复位信号使主CPU复位,更能保证主CPU和EEPROM还是在正常工作的情况进行了复位,也就没有了数据出错的可能。时序关系如图4所示,通道1为3.3V电源,通道2位稳压器的输入电源5V。
其次,软件在设计时考虑把用户修改的数据“即时”写入,例如用户在调整音量时,只要松开按键就要把当前到的数据写入到EEPROM中,而一般的数据写入时间较短(一般为几十毫秒),所以这种情况下在写数据时关机的可能性极小,极大的降低了出错的概率。
另外,软件设计时还要考虑数据在EEPROM里面的存放问题,EEPROM中数据存放的空间分成若干个区域,我们把每一个区域叫做“节点”。一个“节点”上不要存放太多的数据,尽量把数据平均的分配到各个“节点”上,这样就避免了在数据写入的时候占用较长的时间,从而降低了数据出错的概率。如果某些方面的数据很大而又不方便拆开放置,如保存频道的信息,则这些数据不要和用户要经常调整的数据放在一个“节点”上。因为用户一般不会经常改变频道信息,除非进行搜索节目,而这样的操作极少进行,也就不会经常对这个“节点”进行数据写入,从而出错的概率大大降低。
上拉电阻相关文章:上拉电阻原理
评论