原创 关于匠人的数据丢失问题

2006-12-28 22:58 5105 9 9 分类: MCU/ 嵌入式

 


菜农就为匠人忽悠几句吧~~~
mood.gif hotpower 发表于 2006-11-9 18:33 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖举报该贴


匠人猜想过的几中可能原因:

1、上拉电阻是采用CPU内部上拉电阻,是否太大了?
2、快速频繁地断电/上电,是否会打乱读写的时序?并凑巧拼接出一个错误的读写命令?
3、中断的打搅?(可能性不大吧?)

菜农认为1:
    最好再外加上拉电阻,5V时在4.7K左右,3.3V在3.3K左右.这样可加大驱动能力和加速边沿的翻转.
菜农认为2:
    这个是最关键的原因所在.
    首先应该提供电源的保护机制,即能及时知晓外部电源是否具备写入EEPROM数据的能量.
    如果有掉电中断,那么在系统完全失去能量前会有一端时间的.这个时间与系统的电容存储的电能等有关.在此时间里只能写入一部分的EEPROM数据,若写入的数据很小,可能全部写入成功.所以在外部EEPROM的环境下,最好加大电容甚至要加法拉电容,以便增大写入数据块的长度.
    在无掉电保护机制的环境下,可以采用迂回战术来弥补无保护机制的问题.主要应该做到以下考虑:
    1.上电后不应该立即对EEPROM进行写操作!
    2.在EEPROM中找个空闲位置,写入EEPROM正常标志,一般为0x55aa.
      这个标志有很多的意义:
      当读出不为0x55aa时,可认为是掉电或EEPROM为空白片或EEPROM为盗版片.我们可以采取任何的手段进行处理.
      在其他外围也不正常时,我们可认为是真掉电而进入休眠.否则,我们认为是EEPROM空白即可对其初始化.
      注意:必须对EEPROM初始化即写入全部的默认配置数据后,才能写入0x55aa标志!!!因为可能在没初始化后又再次掉电!!!
      这样做后才能保证EEPROM初始化数据的完整及可靠(可信).
    3.每次写入前最好先读出数据,若与写入数据相同就不要招惹EEPROM!!!
      这样在提高寿命的同时,也变相地把EEPROM当RAM使用了.
      最好在此再读0x55aa标志(可能老头很烦人),以变相地确定电源没掉电,至少能短期地保证后面数据写入的安全.
    4.写入数据后应该再次读出,若写入失败就应该再次重试3次以上,否则通知老板该EEPROM坏了.
    5.在写入前应该设置一个全局的写入成功标志为假.在写入和校验成功后,再设置其为真.
      如果在写入期间掉电,那么在启动程序时就应该处理其标志,这样可以"断点续写".
菜农认为3:
    此点并不是太重要,因为一般的I2C总线的SDA/SCL不会再被其他功能复用的,除非他是匠人~~~
    菜农主张必须在一处操作硬件,数据都应该放入缓冲区内处理,各模块无权操作I2C总线.必须由"专人负责"!!!
    这在菜农的设计中一直是这样坚持的,因为婆婆多了肯定坏事.


就忽悠到这里吧,菜农要喂肚子了~~~但认为最重要的是:
0x55aa,法拉电容,上拉电阻,数据校验,容错处理....

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条