eeprom读写失败问题分析

文章讨论了在STM32环境下使用AT24cxxEEPROM时,由于IIC写入时序问题可能导致读出错误。写入后需适当延时以确保总线释放,建议连续操作时增加5-10ms延时以防止读写问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

  • 先向eeprom写入4字节数据,然后再读出,判断数据是否写入成功;
  • 读出的数据虽然不是随机数,但是并不是写入的数据

问题分析(以at24cxx为例)

  1. 众所周知,eeprom写数据时是有写周期的,也即iic传递时间(虽然iic总线速率也足够快,但是如果跟高速mcu相比的话,还是有点不够看),写完数据后,iic总线进入空闲状态,mcu才能进行读动作,如果总线释放时间过短,导致eeprom没有正确识别到空闲状态,那么读出的数据肯定是有问题的;
  2. 在网上查阅资料发现,当写入数据超过一页(128字节)时,eeprom会在当前页循环写入,也即超过128字节的数据会覆盖掉当前页的起始字节,该情况也有可能导致数据读出异常(问题数据并没有超过128字节,所以排除该原因);
  3. 在进行读写操作时,没有关闭外部中断,存在外部中断打断读写过程的可能(开发环境为stm32+rtt,其中eeprom的读写操作都进行了加锁保护,所以排除该原因)。

 方案验证

        写操作完成后,添加少许延时,再进行读操作,数据读取正常。

at24cxx_write(eeprom_dev, DEV_SLEEP_ENTRY_TIME_ADDR, (uint8_t *)&now, 4); //记录进入休眠时间
rt_thread_mdelay(5);
at24cxx_read(eeprom_dev, DEV_SLEEP_ENTRY_TIME_ADDR, (uint8_t *)&tmp, 4);

 问题结论

        由以上分析可以得出结论,如果eeprom读写时序间隔太短,那么iic总线释放时间就会太短,此时eeprom可能无法正确识别读写时序,进而导致读写出现问题。所以,建议在进行eeprom的连续读写操作时,最好在中间加上5~10ms的延时,确保总线释放。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耳朵东先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值