0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I²C读写EEPROM基础原理

GReq_mcu168 来源:strongerHuang 作者:strongerHuang 2022-06-24 11:19 次阅读

相信很多小伙伴都使用过类似AT24C0x这种使用I²C读写的EEPROM,在项目中,使用不当就容易导致数据丢失,或者异常的情况。

今天,我们就来讲讲关于EEPROM的内容。

1I²C读写EEPROM基础原理

市面上大部分使用I2C通信的EEPROM,控制时序和读写流程都基本相同。

I²C通信原理,说简单不简单,但说难也不难,主要理解基础原理和时序即可。

可以参看我分享的文章:

I²C基础原理及通信协议

详述I²C总线时序

I²C几种速度及区别


2EEPROM底层驱动

真正实际做过项目的人都知道,好的底层驱动,会给上层应用开发带来很大便利,节省开发时间,以及减少bug发生率。

而大部分初学者,或者应届毕业生从事相关开发,一般很少考虑代码的移植性,复用性,或者说容错处理等问题。

下面,我简单列两点我在项目中,对EEPROM常用的几项操作。

1、先写再读,验证写入成功

这种方法很好理解:写入之后,再次读去这部分数据,进行一一匹配,验证是否与写入数据一致。

一般我是会重复操作3次,也就是说:写入,再读取,如果超过3次都还失败,那么我则放弃写入,认为写入失败,或芯片异常。

这个方法可以简单解决因异常导致写入失败的问题。

2、添加校验信息

在上面一层读验证基础上,对保存一些参数,我一般还会:在参数末尾添加类似“和校验”,或“CRC校验”。

假如你连续存储一个有10字节的参数(数据结构),如果因异常修改了中间某一个字节参数,你读出来进行校验,发现不对,则认为这个参数无效。

添加这个校验的目的相信从上面我举例已经明白,就是解决多字节参数中某个字节被恶意修改,导致这个参数无效的问题。

3、EEPROM在多任务中添加互斥锁

使用过操作系统的朋友都知道,多线程访问一个资源,一般都存在互斥的关系。简单的说:一个资源,在同一时刻,只能被一个线程操作。

拿EEPROM举例:线程A在往EEPROM写10字节数据,刚6个字节时,线程B想要抢占,往EEPROM写入数据。你觉得线程A应不应该放弃I2C总线,让线程B写入呢?

答案肯定是不允许的,所以,就有了互斥锁这么一说。也就是等先占用I2C总线的线程操作完,才释放总线,让其他线程进行操作。

这三点应该是我比较常用了,网上还有其他一些相关的容错处理机制,感兴趣的不妨搜索一下。

我这里就不贴代码了,因芯片型号不同,应用不同,代码就存在差异。但我们目的:在保证满足应用的同时,需考虑代码的移植、复用、以及容错。


3I²C选择硬件、软件?

我们代码应该使用硬件I2C,还是软件模拟I2C?

这个问题有许多朋友都在问,说句实话,遇到这类有争议的问题,一般来说,需要结合项目实际情况,比如速度、实时性、移植性等。我遇到这类问题,一般会根据实际情况而定。比如:你的I2C产品要提供给一些不同平台用户,进行二次开发,我觉得软件IO模拟比较好,方便用户嘛。假如你们公司开发的产品都使用STM32这家公司芯片开发I2C产品,我觉得,你代码可以使用硬件I2C。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • EEPROM
    +关注

    关注

    9

    文章

    1033

    浏览量

    82171
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1496

    浏览量

    125006
  • 驱动代码
    +关注

    关注

    2

    文章

    14

    浏览量

    7658

原文标题:EEPROM驱动代码常见操作有哪些?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    EEPROM轻量级的简易类文件的数据读写库:EEPROMFS

    虽然 EEPROM 相对 Flash 读写速度更慢,但 EEPROM 一些独有特性是 Flash 无法实现的,比如字节读写操作。 所以,EEPROM
    的头像 发表于 11-15 16:31 696次阅读
    <b class='flag-5'>EEPROM</b>轻量级的简易类文件的数据<b class='flag-5'>读写</b>库:EEPROMFS

    TLV320AIC3263 i2c无法进行通信,通过i2c读写函数,读写寄存器失败怎么解决?

    麻烦帮忙分析下以下问题的原因 1、i2c无法进行通信,通过i2c读写函数(系统提供),读写寄存器失败: 写寄存器,返回-5: 读寄存器:都是251 2、codec上电,gpio
    发表于 10-28 07:32

    PCM1863为什么通过I2C无法读取到寄存器值?

    PCM1863为何通过I2C无法读取到寄存器值?返回值总是00 但是写成功,声音正常。 不知道有没有遇到同样的问题的朋友? 请不要怀疑I2C驱动写的是否正确。挂在同一总线上的EEPROM读写
    发表于 10-23 07:59

    EEPROM读写程序详解

    EEPROM(Electrically Erasable Programmable Read-Only Memory)读写程序的详解涉及多个方面,包括EEPROM的基本工作原理、读写
    的头像 发表于 09-05 12:32 3206次阅读

    使用C2000 I2C模块连接EEPROM

    电子发烧友网站提供《使用C2000 I2C模块连接EEPROM.pdf》资料免费下载
    发表于 08-27 09:53 0次下载
    使用<b class='flag-5'>C</b>2000 <b class='flag-5'>I2C</b>模块连接<b class='flag-5'>EEPROM</b>

    eeprom存储原理、存储结构及读写操作

    EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)是一种非易失性存储器,可以在不移除电源的情况下进行读写
    的头像 发表于 08-05 17:03 3729次阅读

    CYUSB3014通过I2C EEPROM启动时,收到了I2C EEPROM编程失败的错误信息怎么解决?

    我使用的是 CYUSB3014。 在通过 I2C EEPROM 启动时,我收到了 I2C EEPROM 编程失败的错误信息 当我尝试使用 RAM 时,编程成功。 PMODE 引脚连接至
    发表于 07-11 06:12

    请问LED Drivber MAX25014 (I2C Control )是否内建EEPROM

    请问LED Drivber MAX25014 (I2C Control )是否内建EEPROM, 可预先储存一组设定值, 电源启动时会先抓取内建EEPROM code设定.
    发表于 07-04 07:37

    【GD32F303红枫派开发板使用手册】第二十一讲 I2C-EEPROM读写实验

    21.1 实验内容 通过本实验主要学习以下内容: •AT24C16 EEPROM的工作原理; •IIC模块原理以及IIC驱动原理。
    的头像 发表于 06-21 10:23 1108次阅读
    【GD32F303红枫派开发板使用手册】第二十一讲  <b class='flag-5'>I2C-EEPROM</b><b class='flag-5'>读写</b>实验

    STM32做IIC读写程序,利用HAL库对IIC读写遇到的疑问求解

    HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t
    发表于 04-24 06:27

    为什么I²C总线会难住这么多人?

    EEPROM 通信了解到的I²C总线,其实,I²C总线远不止于 EEPROM 存储器,它也有类
    的头像 发表于 03-28 17:29 771次阅读
    为什么<b class='flag-5'>I</b>²<b class='flag-5'>C</b>总线会难住这么多人?

    STM32F103利用I2C读写EEPROM时,利用页写入时,读回的数据和写入的数据不一致,为什么?

    在STM32F103芯片中,利用I2C读写EEPROM时,单字节写入,读回的数据和写入的一致;但是当利用页写入时,读回的数据和写入的数据不一致,这是什么原因导致的?
    发表于 03-20 07:01

    利用软件模拟i2c读写EEPROM,超过256个字节就读写不了了的原因?如何处理?

    利用野火的软件模拟i2c读写EEPROMEEPROM的芯片型号为AT24C512,读写256个
    发表于 03-20 06:42

    STM32F103利用软件模拟I2C读写EEPROM,超过385个字节就读写不了的原因?

    在STM32F103的芯片中,利用软件模拟I2C读写EEPROM,在使用页写入的方式进行读写时,能够读写385个字节,(
    发表于 03-19 07:45

    stm32f4软件模拟I2C读写EEPROM无器件响应是什么原因造成的?

    利用STM32F4软件模拟I2C读写EEPROM时,在检测I2C总线设备时,在等待应答阶段,CPU读取SDA线口状态值为1(GPIO_ReadInputDataBit(GPIOB,GP
    发表于 03-19 06:36