嵌入式学习之EEPROM

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

这位粉丝提到的问题非常具有普遍性,很多小伙伴可能都会碰到同样的问题;这个问题又具有“不易复现,影响大,难排查”等的特征;也就是在公司怎么测试都测不出来,但是在客户那里就出现了。由于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数据丢失的情况吗,一起来评论去聊聊吧!

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值