您的位置 首页 > 数码极客

eepromeeprom作用…

发布了关于IIC的文章后,有粉丝私信问我:IIC的时序也是对的,但是偶尔会碰到EEPROM读取的内容不对,这是什么原因?

这位粉丝提到的问题非常具有普遍性,很多小伙伴可能都会碰到同样的问题;这个问题又具有“不易复现,影响大,难排查”等的特征;也就是在公司怎么测试都测不出来,但是在客户那里就出现了。由于EEPROM存储的内容一般都是比较重要的,像公司LOGO,序列号,机器型号等等,出问题之后很难给客户解释;拿着上位机重写一次就好了,可能再过半年、一年又出现一次,苦不堪言,丢失很多客户。

由于IIC大多数应用都和EEPROM有关,我们学习IIC时序也是为了应用;所以今天笔者就以AT24C64为例,来谈谈我对EEPROM的理解。分析EEPROM数据失败的原因,以及怎么通过软件去避免这个问题。

AT24Cxx的容量大小一般为xxKB;比如24C64就是64KBits,也就是8192Bytes。


数据丢失的原因

从两个方面分析原因:

  1. 写失败;写入EEPROM的值本来就是错的,导致数据丢失;
  2. 读失败;程序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数据丢失的情况吗,一起来评论去聊聊吧!

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“eeprom,eeprom作用,eeprom是什么意思,eeprom故障是什么意思,eeprom和flash的区别”边界阅读