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

    文章

    1129

    浏览量

    85576
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1547

    浏览量

    130537
  • 驱动代码
    +关注

    关注

    2

    文章

    16

    浏览量

    7831

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32单片机I2C接口来读写EEPROM芯片

    。 1.I2C读写EEPROM芯片中断函数(I2C分为I2C1和I2C2) void
    发表于 12-09 07:43

    基于CW32 MCU的I2C接口优化稳定读写EEPROM关键技术

    问题,实现多个EEPROM设备的稳定读写操作。 通过这些优化技术,能够有效提升CW32 MCU在I2C通信中的稳定性和可靠性,确保在复杂环境下的数据传输安全和稳定。
    发表于 12-03 07:29

    Onsemi N24C02/04/08/16:高性能I²C EEPROM的卓越之选

    在电子设计领域,EEPROM是一种至关重要的存储元件,而Onsemi的N24C02、N24C04、N24C08和N24C16系列
    的头像 发表于 12-02 14:02 252次阅读
    Onsemi N24<b class='flag-5'>C</b>02/04/08/16:高性能<b class='flag-5'>I</b>²<b class='flag-5'>C</b> <b class='flag-5'>EEPROM</b>的卓越之选

    探索CAT34C02:2-Kb I²C EEPROM的卓越性能与应用

    专为DDR2 DIMM SPD(串行存在检测)应用设计的2-Kb I²C EEPROM,它具有众多出色的特性和功能,能为工程师们的设计带来诸多便利。
    的头像 发表于 11-27 11:18 204次阅读
    探索CAT34<b class='flag-5'>C</b>02:2-Kb <b class='flag-5'>I</b>²<b class='flag-5'>C</b> <b class='flag-5'>EEPROM</b>的卓越性能与应用

    ‌CAT24C64 64Kb I²C CMOS串行EEPROM技术深度解析

    安森美 (onsemi) CAT24C64 64Kb I^2^C CMOS串行EEPROM在内部为每个8位安排有8192个字。这些EEPROM
    的头像 发表于 11-25 10:14 252次阅读
    ‌CAT24<b class='flag-5'>C</b>64 64Kb <b class='flag-5'>I</b>²<b class='flag-5'>C</b> CMOS串行<b class='flag-5'>EEPROM</b>技术深度解析

    ‌深入解析安森美CAT24C32B系列EEPROM:高性能I²C存储解决方案

    安森美 (onsemi) CAT24C32B电子擦除可编程只读存储器是一种32KB设备,支持标准 (100kHz)、快速 (400kHz) 和快速+ (1MHz) I^2^C协议。该EEPRO
    的头像 发表于 11-25 09:42 218次阅读
    ‌深入解析安森美CAT24<b class='flag-5'>C</b>32B系列<b class='flag-5'>EEPROM</b>:高性能<b class='flag-5'>I</b>²<b class='flag-5'>C</b>存储解决方案

    ‌STM32 EEPROM存储扩展板技术解析与应用指南

    STMicroelectronics X-NUCLEO-EEICA1 I²C EEPROM存储器扩展板非常适合用于M24256E-F和M24M01E-F系列I^2^
    的头像 发表于 10-21 16:22 443次阅读
    ‌STM32 <b class='flag-5'>EEPROM</b>存储扩展板技术解析与应用指南

    ‌STMicroelectronics M24C64-U 64-Kbit串行I²C总线EEPROM技术解析

    STMicroelectronics M24C64-U 64-Kbit串行^I2C^总线EEPROM专为高效可靠的数据存储而设计。该STMicroelectronics EEPROM
    的头像 发表于 10-15 17:27 532次阅读
    ‌STMicroelectronics M24<b class='flag-5'>C</b>64-U 64-Kbit串行<b class='flag-5'>I</b>²<b class='flag-5'>C</b>总线<b class='flag-5'>EEPROM</b>技术解析

    串行EEPROM P24C256H产品介绍

    P24C256H是I²C兼容的串行EEPROM(电可擦除可编程存储器)设备。它包含一个256Kbits (32Kbytes)的内存阵列,每页64bytes。
    的头像 发表于 08-08 17:05 1734次阅读
    串行<b class='flag-5'>EEPROM</b> P24<b class='flag-5'>C</b>256H产品介绍

    【沁恒CH585开发板免费试用体验】I2C 读写EEPROM (三)

    字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */ I2C_SendByte(EEPROM_DEV_ADDR | I2C_RD); /* 此处是读指令 */
    发表于 08-05 22:25

    【沁恒CH585开发板免费试用体验】I2C 读写EEPROM (二)

    _GetFlagStatus(I2C_FLAG_BUSY) != RESET); } 主要配置I2C模式、低电平占空比、I2C寻址模式以及通信速率,最后使能I2C设备。 初始化完成后
    发表于 08-05 22:13

    关于cyusb3014烧写I2C EEPROM的问题求解

    你好,我最终要实现每次上电只从EEPROM引导img,并且能够识别到设备,不过现在遇到了一些问题。在使用cyusb3014芯片通过I2C烧写EEPROM(型号为AT24C
    发表于 07-16 07:38

    I2C EEPROM编程失败的原因?

    我尝试使用 Cy Control Center 实用程序将固件下载到我的 EVM 中, 第一天,我尝试了很多次,但都失败了,比如下面的错误, I2C EEPROM 编程失败。 我搜索了英飞凌社区
    发表于 05-06 07:25

    【RA-Eco-RA4M2开发板评测】I2C读取EEPROM(二)

    6 I2C读写EEPROM 6.1 RA Smart Configurator配置I2C 打开RA Smart Configurator,根据硬件连接,
    发表于 04-28 23:14

    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的MDK-Keil下载算法

    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的Keil下载算法,这样在我们下载代码时可以一键把数据烧录到EEPROM中。
    的头像 发表于 04-11 11:06 1804次阅读
    基于APM32F407如何制作<b class='flag-5'>I2C</b> <b class='flag-5'>EEPROM</b>(AT24<b class='flag-5'>C</b>02型号)的MDK-Keil下载算法