这位粉丝提到的问题非常具有普遍性,很多小伙伴可能都会碰到同样的问题;这个问题又具有“不易复现,影响大,难排查”等的特色;也便是在公司怎么测试都测不出来,但是在客户那里就涌现了。由于EEPROM存储的内容一样平常都是比较主要的,像公司LOGO,序列号,机器型号等等,出问题之后很难给客户阐明;拿着上位机重写一次就好了,可能再过半年、一年又涌现一次,苦不堪言,丢失很多客户。
由于IIC大多数运用都和EEPROM有关,我们学习IIC时序也是为了运用;以是本日笔者就以AT24C64为例,来谈谈我对EEPROM的理解。剖析EEPROM数据失落败的缘故原由,以及怎么通过软件去避免这个问题。
AT24Cxx的容量大小一样平常为xxKB;比如24C64便是64KBits,也便是8192Bytes。

从两个方面剖析缘故原由:
写失落败;写入EEPROM的值本来便是错的,导致数据丢失;读失落败;程序Bug或读写过程中硬件旗子暗记存在滋扰,导致数据读取不对;写EEPROM改进方法1.选择具有WP写保护引脚的器件,防止被误写。现在很多器件都有写保护功能,首先将WP置高,须要写时置低,写完后再置高;防止被误操作。
AT24C64(8-Pin SOIC)
2.将EEPROM参数按页分类。由于EEPROM存储空间较大,我们可以将内容按页进行分类,划分为只读区和可读可写区;可读可写区域又可以分为用户设置区,机器内部参数区等等。只读区可以只存出厂之后不会变更的数,如序列号,机器配置等等;
AT24C64按页划分-示例
3.主要参数做备份;由于EEPROM存储空间较大,我们可以将主要参数做备份,一旦主要参数读取失落败了,可以读取备份页,担保数据不会丢失;
AT24C64每页内容格式
4.推举页写办法。EEPROM供应了2种写办法,字节写和页写;页写的办法,EERPOM存储的内容清晰,出问题了好定位。写EEPROM的韶光也较短,这样不随意马虎被中断影响到时序;万一写时序出了问题,也不影响只读区域和主要参数;笔者利用多年,一贯没有涌现丢失数据的征象。
按照字节-页写EEPROM过程
5.重视ACK/NAK旗子暗记。大家从上图中可以看到,这个应答旗子暗记非常主要;笔者在网上搜索的很多例程都不管这个应答旗子暗记,这是缺点的;程序收到NAK,可以有3种处理办法;
1) 设置IIC总线到空闲状态,重新发送起始条件,再写多次;可以急速写,也可以分时写;
2) 如果多次写不堪利,提示EEPROM写失落败;这样客户看到报警信息后可以进行改换产品,减少丢失;
3)如果写成功了,将备份页也按照上述时序写一遍;担保主要数据的可靠性;
读EEPROM改进方法1.推举利用随机读取办法。EEPROM也供应了三种读办法;分为直接读,随机读和顺序读。
直接读取读取EEPROM的第一个字节;
随机读取便是写入想要读取的地址,从当前的地址一个字节一个字节读取数据;
顺序读取便是从EEPROM的第一个字节开始一个字节字节的读取;
笔者推举大家利用随机读取的时序去读取EEPROM的值,这种办法非常灵巧,想读几个字节由程序掌握,很方便。
读取EEPROM得三种办法
2.重视ACK/NAK旗子暗记。与写时序一样,读EEPROM内容也有应答旗子暗记;程序收到NAK,可以有3种处理办法;
1) 设置IIC总线到空闲状态,重新发送起始条件,再次读取多次;可以急速读取,也可以分时读;
2) 如果多次读不堪利,可以多次读取备份页。如果备份页也读取失落败,提示EEPROM读失落败;这样客户看到报警信息后可以进行改换产品,减少丢失;
3)如果读失落败了,可以将利用的变量初始化成默认参数,这样机器也能正常运行,不会造成停机征象;
结语EEPROM在工控领域是不可短缺的东西,就像人的影象;如果记不住东西,就须要看年夜夫。EEPROM的读写稳定性也是非常主要的,笔者也是经由良久的磨合,才逐步优化出这一套逻辑,本日禀享给大家。你有碰到过EEPROM数据丢失的情形吗,一起来评论去聊聊吧!