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

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

3天内不再提示

关于1I²C读写EEPROM基础原理

strongerHuang 来源:strongerHuang 作者:strongerHuang 2022-03-09 17:14 次阅读

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

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

1I²C读写EEPROM基础原理

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

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驱动代码常见操作

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

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

    关注

    8

    文章

    6852

    浏览量

    88771
  • 软件
    +关注

    关注

    69

    文章

    4735

    浏览量

    87124
  • EEPROM
    +关注

    关注

    9

    文章

    1010

    浏览量

    81376
收藏 人收藏

    评论

    相关推荐

    i2cEEPROM读写,计数

    i2cEEPROM读写,计数,附程序代码
    发表于 11-30 15:01

    读写EEPROM

    STM32学习笔记(9)——(I2C续)读写EEPROM一、概述1. 背景介绍2. EEPROM简介二、AT24
    发表于 08-23 08:03

    I2C协议以及I2C读写EEPROM

    I2C协议以及I2C读写EEPROM实验文章目录I2C协议以及I2C
    发表于 08-23 08:25

    如何通过i2c连续读写eeprom

    我用verilog自制了一个i2c模块,将电路下载到fpga中,在读写eeprom时出现问题,不能连续读写,如果单独读写一个字节,即随机
    发表于 03-29 10:22

    SPI接口读写串行EEPROM

    SPI接口读写串行EEPROM:93C46为采用3线串行同步总线SPI接口方式的EEPROM,其芯片引脚名称和功能描述如图1-1
    发表于 09-19 11:39 89次下载

    EEPROM 按钮读写程序 【C语言版】

    EEPROM 按钮读写程序 【C语言版】,感兴趣的可以下载来看看。
    发表于 12-30 13:49 0次下载

    EEPROM 按钮读写程序 【C与汇编对照版】

    EEPROM 按钮读写程序 【C与汇编对照版】,多种集合,符合同时爱好C语言+汇编的学习者的胃口。
    发表于 12-31 10:28 0次下载

    EEPROM基于I~2C总线的一种读写方法

    EEPROM基于I~2C总线的一种读写方法
    发表于 09-21 08:49 5次下载
    <b class='flag-5'>EEPROM</b>基于<b class='flag-5'>I</b>~2<b class='flag-5'>C</b>总线的一种<b class='flag-5'>读写</b>方法

    I2C读写EEPROM

    【*】程序简介 -工程名称:基本读写EEPROM -实验平台: 秉火STM32 F429 开发板 -MDK版本:5.16 -ST固件库版本:1.5.1 【 !】功能简介: 读写板载的 I2C
    发表于 12-13 15:12 23次下载

    STM8S_010_I2C读写EEPROM (硬件方式)

    STM8S_010_I2C读写EEPROM(硬件方式)
    的头像 发表于 03-14 14:54 3989次阅读

    STM32F10x _硬件I2C读写EEPROM(标准外设库版本)

    STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
    的头像 发表于 03-25 11:11 1w次阅读
    STM32F10x _硬件<b class='flag-5'>I2C</b><b class='flag-5'>读写</b><b class='flag-5'>EEPROM</b>(标准外设库版本)

    STM32F10x_ 模拟I2C读写EEPROM

    STM32F10x_模拟I2C读写EEPROM
    的头像 发表于 03-25 11:13 9840次阅读
    STM32F10x_ 模拟<b class='flag-5'>I2C</b><b class='flag-5'>读写</b><b class='flag-5'>EEPROM</b>

    关于EEPROM读写与数码管显示实验

    关于EEPROM读写与数码管显示实验(嵌入式开发平台图片)-关于EEPROM读写与数码管显示实验
    发表于 08-04 12:00 9次下载
    <b class='flag-5'>关于</b><b class='flag-5'>EEPROM</b><b class='flag-5'>读写</b>与数码管显示实验

    STM32学习之I2C协议(读写EEPROM

    关于STM32学习分享第七章 I2C协议(读写EEPROM)文章目录关于STM32学习分享前言二、代码1
    发表于 11-30 15:21 32次下载
    STM32学习之<b class='flag-5'>I2C</b>协议(<b class='flag-5'>读写</b><b class='flag-5'>EEPROM</b>)

    CW32单片机I2C接口读写EEPROM芯片介绍

    CW32单片机I2C接口读写EEPROM芯片介绍
    的头像 发表于 11-09 17:42 1006次阅读
    CW32单片机<b class='flag-5'>I2C</b>接口<b class='flag-5'>读写</b><b class='flag-5'>EEPROM</b>芯片介绍