EEPROM的学习和使用方法

2023-11-03

EEPROM的学习和使用方法

https://blog.csdn.net/bornpride/article/details/87894400

一、概述

在实际的应用中,保存在单片机RAM中的数据,掉电后就丢失了,保存在单片机的FLASH中的数据,又不能随意改变,也就是不能用它来记录变化的数值。但是在某些场合,我们又确实需要记录下某些数据而它们还时常需要改变或更新掉电之后数据还不能丢失。比如,我们的家用电表度数,电视机里边的频道记忆,一般都是使用EEPROM来保存数据,特点就是掉电后存储的数据不丢失。
一般情况下,EEPROM拥有30万到100万次的寿命,也就是它可以反复写入30-100万次,而读取次数是无限的。
24C02是一个常用的基于IIC通信协议的EEPROM元件,例如ATMEL公司的AT24C02、CATALYST公司的CAT24C02和ST公司的ST24C02等芯片。
IIC是一个通信协议,它拥有严密的通信时序逻辑要求,而EEPROM是一个元件,只是这个元件采样了IIC协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM可以用其它接口,I2C也可以用在其它很多器件上。
 

二、EEPROM单字节读写操作时序

1、EEPROM写数据流程

(1)第一步,首先写IIC的起始信号,紧接着写上首字节,即我们前边讲的IIC的器件地址,并且在读写方向上选择“”操作。
(2)第二步,发送数据的存储地址。例如24C02芯片一共有256个字节的存储空间,地址从0x00~0xFF,我们想把数据存储在芯片的哪个位置,此刻写入的就是对应的那个地址。
(3)第三步,发送要存储的数据第一个字节、第二个字节……,注意在写数据的过程中,EEPROM每个字节都会回应一个“应答位0”,来告诉我们在EEPROM芯片中写入数据成功,如果没有回应答位,说明写入数据不成功。
在写数据的过程中,每成功写入一个字节数据,EEPROM芯片的存储地址就会自动加1,当加到0xFF后,再写一个字节数据,地址就会溢出又变成了0x00。
 

2、EEPROM读数据流程

(1)第一步,首先写IIC的起始信号,紧接着写上首字节,即我们前边讲的IIC的器件地址,并且在读写方向上选择“”操作。
这个地方可能有人会感到很诧异,我们明明是读数据为何方向也要选“写”呢?刚才说过了,24C02芯片一共有256个地址,我们选择写操作,是为了把所要读的数据的存储地址先写进去,告诉EEPROM我们要读取哪个地址的数据。这就如同我们打电话,先拨总机号码(EEPROM的器件地址),而后还要继续拨分机号码(EEPROM的数据地址),而拨分机号码这个动作,主机仍然是发送方,方向依然是“写”。
(2)第二步,发送要读取的数据的地址,注意是地址而非存储在EEPROM中的数据,通知EEPROM我要读取哪个分机的信息。
(3)第三步,重新发送IIC的起始信号器件地址,并且在读写方向位上选择“”操作。
这三步当中,每一个字节实际上都是在“写”,所以每一个字节EEPROM都会回应一个“应答位0”。
(4)第四步,读取从器件发回的数据,读一个字节,如果还想继续读下一个字节,就发送一个“应答位ACK(0)”,如果不想读了,告诉EEPROM,我不想要数据了,别再发数据了,那就发送一个“非应答位NAK(1)”。
和写操作规则一样,每成功读取一个字节数据,EEPROM芯片的存储地址就会自动加1,那如果我们想继续往下读,给EEPROM一个ACK(0)低电平,然后再继续给SCL时钟线完整的时序,EEPROM会继续往外送数据。如果我们不想读了,要告诉EEPROM不要数据了,那我们直接给一个NAK(1)高电平即可。这个地方大家要从逻辑上理解透彻,不能简单的靠死记硬背了,一定要理解明白。
 

3、总结

(1)在通常的EEPROM应用中,单片机是主机,24C02是从机。
(2)无论是读操作还是写操作,SCL时钟线始终都是由主机控制的。
(3)写数据的时候应答信号由从机给出,表示从机是否正确接收了数据。
(4)读数据的时候应答信号则由主机给出,表示是否继续读下去。
 

三、EEPROM多字节读写操作时序

我们读取EEPROM数据的时候很简单,EEPROM根据我们所送的时序,直接就把数据送出来了,但是写入EEPROM数据却没有这么简单了。给EEPROM发送数据后,先保存在了EEPROM的缓存,EEPROM必须要把缓存中的数据搬移到“非易失”的区域,才能达到数据掉电不丢失的效果。而往非易失区域写入数据需要一定的时间,每种元件还不完全一样,例如ATMEL公司的AT24C02芯片的这个写入时间最高不超过5ms。在往非易失区域写的过程,EEPROM是不会再响应我们的访问的,不仅接收不到我们的数据,而且我们使用IIC标准的寻址模式去寻址,EEPROM都不会应答,就如同这个总线上没有这个器件一样。数据写入非易失区域完毕后,EEPROM再次恢复正常,可以正常读写数据了。
 

四、EEPROM的页写入时序

在向EEPROM连续写入多个字节的数据时,如果每写一个字节都要等待几个ms时间的话,整体上的写入效率就太低了。因此EEPROM的厂商就想了一个办法,把EEPROM分页管理。24C01和24C02这两个型号的芯片是8个字节一个页,而24C04、24C08和24C16芯片是16个字节一页。我们通常使用的EEPROM的型号是24C02,一共有256个字节,8个字节一页,那么就一共有32页。
分配好页之后,如果我们在同一个页内连续写入几个字节后,最后再发送停止位的时序。EEPROM检测到这个停止位后,就会一次性把这一页的数据写到非易失区域,就不需要像上述那样每写一个字节检测一次了,并且页写入的时间也不会超过5ms。如果我们写入的数据跨页了,那么写完了一页之后,我们要发送一个停止位,然后等待并且检测EEPROM的空闲模式,一直等到把上一页数据完全写到非易失区域后,再进行下一页的写入,这样就可以在很大程度上提高数据的写入效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EEPROM的学习和使用方法 的相关文章

随机推荐

  • MySQL数据库应用(8)DML语句之insert知识

    一 往表中插入数据 1 命令语法 insert into lt 表名 gt lt 字段名1 gt lt 字段名n gt values 值1 值n 2 新建一个简单的测试表test create table test id int 4 not
  • linux 源码包mysql,linux 下 mysql源码包的安装--

    linux 下 mysql源码包的安装 9页 本资源提供全文预览 点击全文预览即可全文预览 如果喜欢文档就下载吧 查找使用更方便哦 9 9 积分 linux 下 MySQL源码包的安装 gt gt linux 下 MySQL源码包的安装 实
  • 电路基础学习笔记2:LRC振荡电路

    LRC振荡电路 1 概述 LRC 振荡电路是一种基本的振荡电路 由电感L 电容C 电阻R组成 可以产生稳定的交流电信号 在LRC振荡电路中 电感和电容通过共振的方式相互作用 导致电荷周期性地从电容器到电感器和反向流动 从而产生周期性的电流和
  • 制作瀑布

    使用的瀑布模型 瀑布模型使用的材质 Demo WaterFall mat Demo WaterFall shadergraph 最终效果
  • python3(七)os模块

    os模块 OS模块简单的来说它是一个Python的系统编程的操作模块 可以处理文件和目录这些我们日常手动需要做的操作 可以查看OS模块的帮助文档 import os 导入os模块 help os 查看os模块帮助文档 里面详细的模块相关函数
  • if判断条件的优化写法

    优化后可读性 可维护性更好了 if分支越多 体现越明显 文章目录 优化前 简单判断 优化 简单判断 优化前 复杂判断 优化 复杂判断 优化前 简单判断 function getUserDescribe name if name 小刘 con
  • 区块链运行机制简介

    区块链简介 区块链技术是构建比特币区块链网路与交易信息加密传输的基础技术 其解决的核心问题是如何在缺少可信任中央节点和可信任通道的情况下 分布在网络中的节点如何达成共识 区块链被定义为一个分布式的账本 即每个区块链的节点都拥有系统所有交易的
  • 信令服务器接收到状态码,在蜂窝通信网络中请求连接的方法和设备专利_专利查询 - 天眼查...

    1 一种包含转换器服务逻辑模块0 的网络部件045 所述转换器服务逻辑模块 255 被安排成在操作上分别 经由第一通信链路075 与通信接入点 270 耦接 经由第二通信链路与自动配置服务器ACS逻辑模块 MO 耦接 以及经由第三通信链路与
  • Pandas 中的 read_excel() 读取 excel 数据详细参数用法

    前言 read excel 参数说明 pandas 中读取 excel 数据的 pd read excel pandas read excel io sheet name 0 header 0 names None index col No
  • jQuery 事件 - mouseover() 方法

  • 【UE4】Replay游戏回放 for UE4.26

    前言 UE4 26的回放教程 最近有用到 So梳理了整个构建流程 希望能帮到你 结尾有视频版教程 时长较长 1 准备工作 创建一个UE4C 项目 添加第一人称和第三人称功能包 关闭引擎 找到项目目录 ContentDir Config De
  • 【windows系统同时安装配置不同版本java环境】,以及双击jar包问题总结

    1 下载jdk 官方网站 Java Downloads Oraclehttps www oracle com java technologies downloads我这边需要运行冰蝎是需要一个java8的环境 以及原有的高版本的java环境
  • JS 函数

    JS 函数 关键字形式的函数
  • Mysql 中级篇-索引

    123
  • C++ 基本的7种数据类型和4种类型转换(C++复习向p3)

    文章目录 基本内置类型 存储范围 typedef 声明新名字 enum 枚举类型 类型转换 基本内置类型 bool char int float double void wchar t short int 存储范围 可以这样 sizeof
  • 全卷积网络(FCN)与图像分割

    从图像分类到图像分割 卷积神经网络 CNN 自2012年以来 在图像分类和图像检测等方面取得了巨大的成就和广泛的应用 CNN的强大之处在于它的多层结构能自动学习特征 并且可以学习到多个层次的特征 较浅的卷积层感知域较小 学习到一些局部区域的
  • CentOs7 修复 引导启动

    一 修复MBR MBR Master Boot Record主引导记录 硬盘的0柱面 0磁头 1扇区称为主引导扇区 其中446Byte是bootloader 64Byte为Partition table 剩下的2Byte为magic num
  • 配置hadoop各个节点之间免密码登录实践笔记

    前言 最近在搭建Hadoop环境需要设置无密码登陆 所谓无密码登陆其实是指通过证书认证的方式登陆 使用一种被称为 公私钥 认证的方式来进行ssh登录 在linux系统中 ssh是远程登录的默认工具 因为该工具的协议使用了RSA DSA的加密
  • 使用Python,OpenCV缩放照片(忽略宽高比,保持宽高比)

    使用Python OpenCV缩放照片 忽略宽高比 保持宽高比 1 效果图 1 1 保持宽高比效果图 1 2 忽略宽高比效果图 1 3 opencv各插值效果图 2 原理 3 源码 参考 这篇博客将介绍如何使用OpenCV调整图像大小 调整
  • EEPROM的学习和使用方法

    EEPROM的学习和使用方法 https blog csdn net bornpride article details 87894400 一 概述 在实际的应用中 保存在单片机RAM中的数据 掉电后就丢失了 保存在单片机的FLASH中的数