AT24C02 E2PROM芯片详解

AT24C02 E2PROM芯片详解24C02 是一个 2KBit 的串行 EEPROM 存储器 掉电不丢失 内部含有 256 个字节 在 24C02 里面有一个 8 字节的页写缓冲器 A0 A1 A2 硬件地址引脚 WP 写保护引脚 接高电平只读 接地允许读和写 SCL 和 SDA IIC 总线可以看出对于不同大小的 24Cxx 具有不同的从器件地址 由于 24C02 为 2k 容量 也就是说只需要参考图中第一行的内容 芯片的寻址 AT24C 设备地址

  • A0,A1,A2硬件地址引脚
  • WP:写保护引脚,接高电平只读,接地允许读和写
  • SCL和SDA:IIC总线
  • VCC和GND: 电源线和地线

下图为芯片从地址:

片内地址寻址:

芯片寻址可对内部256B中的任一个进行读/写操作,其寻址范围为00~FF,共256个寻址单位。

IIC 主设备/从设备:

通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。

  • IIC主设备功能:主要产生时钟,产生起始信号和停止信号
  • IIC从设备功能:可编程的IIC地址检测,停止位检测

IIC的协议层

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

  • 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
  • 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

IIC 总线时序图:

在这里插入图片描述
起始条件:在SCL高电平期间,SDA由高到低的一个下降沿;
停止条件:在SCL高电平期间,SDA由低到高的一个上升沿;



IIC的数据有效性:在这里插入图片描述

在SCL的高电平期间,SDA是不允许变化的;而只有在时钟线SCL的低电平期间,SDA才能够出现变化;

应答信号

每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,

应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答

在这里插入图片描述

在了解了IIC的基础知识之后。我们就对AT24C02进行操作讲解:

向AT24C02中写数据
在这里插入图片描述
操作时序:




  1. MCU先发送一个开始信号(START)启动总线
  2. 接着跟上首字节,发送器件写操作地址(DEVICE ADDRESS)+写数据(0xA0)
  3. 等待应答信号(ACK)
  4. 发送数据的存储地址。24C02一共有256个字节的存储空间,地址从0x00~0xFF,想把数据存储>在哪个位置,此刻写的就是哪个地址。
  5. 发送要存储的数据第一字节、第二字节、…注意在写数据的过程中,E2PROM每个字节都会>回应一个“应答位0”,老告诉我们写E2PROM数据成功,如果没有回应答位,说明写入不成功。
  6. 发送结束信号(STOP)停止总线

从AT24C02中读数据

读当前地址的数据
在这里插入图片描述
2、读随机地址的数据
在这里插入图片描述






  1. MCU先发送一个开始信号(START)启动总线
  2. 接着跟上首字节,发送器件写操作地址(DEVICE ADDRESS)+写数据(0xA0)
    注意:这里写操作是为了要把所要读的数据的存储地址先写进去,告诉E2PROM要读取哪个地址的数据。

  3. 发送要读取内存的地址(WORD ADDRESS),通知E2PROM读取要哪个地址的信息。
  4. 重新发送开始信号(START)
  5. 发送设备读操作地址(DEVICE ADDRESS)对E2PROM进行读操作 (0xA1)
  6. E2PROM会自动向主机发送数据,主机读取从器件发回的数据,在读一个字节后,MCU会回应一个应答信号(ACK)后,E2PROM会继续传输下一个地址的数据,MCU不断回应应答信号可以不断读取内存的数据
  7. 如果不想读了,告诉E2PROM不想要数据了,就发送一个“非应答位NAK(1)”。发送结束信号(STOP)停止总线

3、连续读数据
在这里插入图片描述
E2PROM支持连续写操作,操作和单个字节类似,先发送设备写操作地址(DEVICE ADDRESS),然后发送内存起始地址(WORD ADDRESS),MCU会回应一个应答信号(ACK)后,E2PROM会继续传输下一个地址的数据,MCU不断回应应答信号可以不断读取内存的数据。E2PROM的地址指针会自动递增,数据会依次保存在内存中。不应答发送结束信号后终止传输。




代码:

 //IIC发送数据 //address 要写入的地址 //date 要写入的数据 void write_add(uchar address,uchar date) { 
       IIC_Start(); IIC_Send_Byte(0xA0); delay(2); IIC_Send_Byte(address); delay(2); IIC_Send_Byte(date); delay(2); IIC_Stop(); } //IIC读取数据 // address 要读取数据的地址 uchar read_add(uchar address) //指定地址读一个字节数据 { 
       uchar add; IIC_Start(); IIC_Send_Byte(0xA0); delay(2); IIC_Send_Byte(address); delay(2); IIC_Start(); IIC_Send_Byte(0xA1); delay(2); dd=IIC_Read_Byte(); IIC_Stop(); return add; } 

剩下的IIC以及芯片操作例程已经单独整理成文章,对初学者有很大帮助,如需学习请直接参看:

如果需要IIC的详细原理详解,请参看:

IIC原理超详细讲解—值得一看

如果需要读取AT24C02例程及代码,请参看:

【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )

在这里插入图片描述






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214357.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:27
下一篇 2026年3月18日 下午4:28


相关推荐

  • Ajax发送请求的四个步骤

    Ajax发送请求的四个步骤<scripttype=”text/javascript”> window.onload=function(){ varbtn=document.getElementById(‘btn’); btn.onclick=function(){ //使用Ajax发送请求需要如下几步 //1、创建XMLHttpRequest(); varxhr=…

    2022年5月17日
    49
  • 机房收费系统合作版(三)——UI思索

    机房收费系统合作版(三)——UI思索

    2022年1月30日
    45
  • Unity–Cinemachine官方实例详解

    Unity–Cinemachine官方实例详解1.2DCamera搭建一个快速场景,MainCamera选择Orthographic。在Cinemachine下有Create2DCamera,在生成的相机中设置follow,同时注意body的设置,如下图所示在虚拟相机中还需要添加Cinemachineconfiner组件,点击下图中的AddExtension,在弹出的下拉列表中,选择CinemachineConfiner。用来后处…

    2022年5月8日
    57
  • 特立独行的理解_幸福在一起第14集

    特立独行的理解_幸福在一起第14集原题链接对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数

    2022年8月8日
    9
  • 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 责编:乐乐 链接:oschina.net/news/112586/kk-anti-reptile-released …

    2021年6月24日
    104
  • linux拷贝4g以上文件夹,32位Ubuntu中支持超过4G的大内存的方法

    linux拷贝4g以上文件夹,32位Ubuntu中支持超过4G的大内存的方法32 位 Ubuntu 中支持超过 4G 的大内存的方法目前 32 位的 Ubuntu 仅能支持 4G 的内存 解决方法是使用 server 版本的内核 sudoapt getinstallli restricted modules serversudoap getinstallli headers serversudoap getinstallli image serverlin

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号