24C02是一个2K Bit的串行EEPROM存储器(掉电不丢失),内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。

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

下图为芯片从地址:

以看出对于不同大小的24Cxx,具有不同的从器件地址。由于24C02为2k容量,也就是说只需要参考图中第一行的内容:

芯片的寻址:
AT24C设备地址为如下,前四位固定为1010,A2~A0为由管脚电平。AT24CXX EEPROM Board模块中默认为接地。A2~A0为000,最后一位表示读写操作。所以AT24Cxx的读地址为0xA1,写地址为0xA0。

也就是说如果是
写24C02的时候从器件地址为10100000(0xA0);
读24C02的时候,从器件地址为10100001(0xA1)。

片内地址寻址:

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

对应的修改 A2A1A0 三位数据即可

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)停止总线

注意:
在写数据的过程中,每成功写入一个字节,E2PROM存储空间的地址就会自动加1,当加到0xFF后,再写一个字节,地址就会溢出又变成0x00。

写数据的时候需要注意,E2PROM是先写到缓冲区,然后再“搬运到”到掉电非易失区。所以这个过程需要一定的时间,AT24C02这个过程是不超过5ms!
所以,当我们在写多个字节时,写入一个字节之后,再写入下一个字节之前,必须延时5ms才可以

从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 )

AT24C02 E2PROM芯片详解相关推荐

  1. 天猫精灵方糖拆解报告和芯片详解

    折腾: [记录]天猫精灵方糖拆解过程 后,下面详细整理关于芯片的信息. 总体截图: 各个单元: MEDIATEK ARM MT8516AAAA 1812-BZASH BET02027 ACMQPQ8K ...

  2. 【单片机基础篇】74HC595芯片详解

    74HC595芯片详解 芯片简述:74HC595是一个8位串行输入.并行输出的位移缓存器:并行输出为三态输出.在SCK 的上升沿,串行数据由SER输入到内部的8位位移缓存器,并由QA~QH'输出,而并 ...

  3. 基于EP4CE10F17C8N芯片详解Altera Cyclone系列器件命名规则

    这里写自定义目录标题 Altera的Cyclone系列器件命名规则如下 器件系列 + 器件类型(是否含有高速串行收发器) + LE逻辑单元数量 + 封装类型 + 高速串行收发器的数量(没有则不写) + ...

  4. 硬件设计:电源设计--DC/DC工作原理及芯片详解

    硬件设计:电源设计--DC/DC工作原理及芯片详解 参考资料:DC/DC降压电源芯片内部设计原理和结构 MP2315(DC/DC电源芯片)解读 DC/DC电源详解 第一次写博客,不喜勿喷,谢谢!!! ...

  5. HDMI2.1定义以及物理转换Bypass芯片详解

    第一:HDMI2.1工作原理介绍 HDMI 2.1在工作时,需要source端来源和sink端设备.通过EDID握手协商后,再决定传输模式.带宽.HDR格式等功能 咱们先来说说source端,也就是我 ...

  6. MAX31856多类型热电偶温度检测方案芯片详解,附可实现的STM32程序代码

    背景: 热电偶的测温是工业现场常用的测温手段,但是欧洲系列的工控领域中使用的大部分都是J型热电偶,而日本以及台湾等地大部分使用的是K型热电偶.因为日本和台湾的工控产品较早地进入国内,因此国内大部分设备 ...

  7. 电子器件系列31:ULN2003 芯片详解

    主体转自: uln2003驱动电路_身在江湖的郭大侠的博客-CSDN博客_uln2003 一.uln2003有什么作用 ULN2003是大电流驱动阵列,多用于单片机.智能仪表.PLC.数字量输出卡等控 ...

  8. 英集芯ip6809规格书pdf芯片文档详解及典型电路原理图

    英集芯ip6809芯片是一款无线充电发送端控制器SOC芯片,兼容WPC Qi v1.2.4新标准.支持2-3线圈无线充电发射端应用,支持A28线圈.MP-A8线圈,支持客户线圈定制方案,支持5W.苹果 ...

  9. L293D驱动模块的使用详解

    该L293D驱动模块是专门为arduino设计的,网上使用arduino驱动该模块的资料很多,但是关于使用其他单片机驱动该模块是资料比较少,本人在学习中也是花了很多时间查找资料和摸索,该模块直接整块插 ...

最新文章

  1. Unity 单元测试(PLUnitTest工具)
  2. mysql免安装版的问题
  3. 面试那点小事,你从未见过的spring boot面试集锦(附详细答案)
  4. 响应时登录html,HtmlUnit:单击不响应时登录HtmlElement
  5. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170331
  6. 关于IPC入侵的一些细节
  7. 什么是Spring Boot?
  8. 香港计算机mphil申请成功案例,香港稀有CS MPhil录取:申请也有起死回生的惊喜...
  9. shell linux中用shell写一个占用CPU的脚本
  10. C#用链式方法表达循环嵌套
  11. 部分计算机会议和期刊论文的下载方法
  12. 模板引擎jade/ejs,模板适配
  13. xml文件是什么?xml文档定义有几种形式?它们之间有何本质区别?解释xml文档又几种方式
  14. 大厂标配的动态化解决方案,高阶技术从未如此简单
  15. office服务器草稿位置,精确定位图片在Word文档中的位置的操作方法
  16. 查询快递 教你一个方法按照物流途径城市筛选签收地
  17. 国外赛事直播加速案例
  18. 【GitHub】项目代码上传github
  19. 全国大学生网络安全精英赛复赛笔记
  20. 5G无线技术基础自学系列 | 密集组网

热门文章

  1. 网吧无盘服务器游戏盘掉盘,虚拟盘与阵列对无盘网吧游戏性有的影响
  2. DSP外扩SRAM的应用测试心得体会
  3. AI人工智能,OCR 识别技术图像处理 OCR文字识别软件
  4. unity3d LTS(2018-2020)国际版本下载与安装。
  5. [Paper Reading] Alibaba Hologres: A Cloud-Native Service for Hybrid Serving/Analytical Processing
  6. [用友问题] 系统存在的问题
  7. 强推4款数据恢复神器,数据误删不烦恼
  8. Hadoop之hadoop fs命令
  9. SpringBoot预加载与懒加载
  10. 狂神。JVM入门学习笔记。