当前位置: 首页 > news >正文

IIC读写EEPROM

目录

1.IIC

基础简介

IIC特点

时序图分析

​编辑1.起始信号与终止信号

2.数据传输时序

3.字节传输和应答信号

I2C寻址

主机给从机发送一个字节

主机给从机发送多个字节

主机从从机接收一个字节

主机从从机接收多个字节

 I2C寄存器

2.EEPROM(AT24C02)

操作时序

1.器件寻址

2. 写操作

(1)字节写

(2)页写

3. 读操作(顺序读)

4. 关键时序细节

1.IIC

基础简介

IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。不同的器件,都是并联接在这两条线上,I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

SDA(Serial data)是数据线,是用来传输数据的

SCL(Serial clock line)是时钟线,是用来控制数据发送的时序

IIC特点

通常IIC设备分为主设备和从设备,谁控制时钟线(控制SCL的电平高低变换)谁就是主设备。

IIC主设备功能:主要产生时钟,产生起始信号和停止信号

IIC从设备功能:可编程的IIC地址检测,停止位检测

IIC的一个优点是它支持多主控,其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。但是在同一时间点上只能有一个主控。

支持不同速率的通讯速度,标准速度(最高速度100kHZ), 快速(最高400kHZ),比UART高,比SPI低

SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。

IIC是半双工,而不是全双工 ,同一时间只可以单向通信,IIC协议首先是发送从机硬件地址,然后发送命令,再发送数据/寄存器编号或者读取数据。IIC协议可以多字节连续读写数据。

各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。

时序图分析

1.起始信号与终止信号

 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;

 SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号;

 起始和终止信号都是由主机发出,起始信号产生后,总线就处于占用的态;

 终止信号产生后,总线就处于空闲态。

2.数据传输时序

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定; 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

在时钟为低电平期间,发送器向数据线上写入数据,因此数据线上的数据运行变化; 在时钟为高电平期间,接收器从数据线上读取数据,因此必须保持数据线上的数据稳定。

最终完成一个时钟周期内,发送器发生一个bit位数据,接收器接收一个bit位数据。

3.字节传输和应答信号

每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。

在第9个时钟周期的低电平期间,接收器向数据线上写入数据。

在第9个时钟周期的高电平期间,发送器从数据线上读取数据。

如果读到的是低电平信号,表示应答信号。

如果读到的是高电平信号,表示非应答信号。

I2C寻址

I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。

总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器。

主机给从机发送一个字节

主机给从机发送多个字节

主机从从机接收一个字节

主机从从机接收多个字节

 I2C寄存器

2.EEPROM(AT24C02)

24C02是一个容量为2Kbit的串行电可擦除可编程只读存储器(EEPROM), 存储器有256个字节, 内部分为32页,每页8字节,通过 IIC总线接口进行操作。

具体管脚配置可以查看

AT24C02_百度百科AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。https://baike.baidu.com/item/AT24C02/5665387

操作时序

1.器件寻址

格式:1010 +A2 A1 A0+R/W(7位地址 + 1位读写控制)

固定高位:1010

可编程地址位:由硬件引脚A2、A1、A0决定(默认接地时为000)

R/W读写位:0时进行写操作,1时进行读操作

2. 写操作

(1)字节写

起始条件:SCL高电平时,SDA由高→低。

发送设备地址(写模式):发送0xA0,等待ACK。

发送内存地址:8位地址(0x00~0xFF),等待ACK。

发送数据:8位数据,等待ACK。

停止条件:SCL高电平时,SDA由低→高。

(2)页写

页大小:8字节(地址低3位自动递增,超出后回绕)。

步骤:

起始条件:SCL高电平时,SDA由高→低。

发送设备地址(写模式):发送0xA0,等待ACK。

发送内存地址:8位地址(0x00~0xFF),等待ACK。

连续发送最多8字节数据,每字节后等待ACK。

发送停止条件。

3. 读操作(顺序读)

起始条件。

发送设备地址(写模式)0xA0,ACK。

发送内存地址,ACK。

重复起始条件。

发送设备地址(读模式)0xA1,ACK。

接收数据:读取数据后,主设备发送ACK继续读取下一字节,最后发送NACK并停止。

停止条件。

4. 关键时序细节

起始/停止条件:

起始:SCL高时,SDA下降沿。

停止:SCL高时,SDA上升沿。

数据传输:SCL低电平时更新SDA,高电平时稳定。

应答(ACK):每字节后接收方拉低SDA。

相关文章:

  • 基于springboot医疗平台系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 基于物联网的便携式土壤综合参数检测仪设计
  • MySQL外键约束下的索引删除难题:从报错到完美解决的实战指南
  • 医疗数据大集结
  • deepseek本地化部署
  • MySQL主从同步面试核心20问:从原理到实战深度拆解
  • System V共享内存详解:在Linux上实现内存共享的最佳实践
  • Powershell WSL部署ubuntu22.04.5子系统
  • 深入 Linux 声卡驱动开发:核心问题与实战解析
  • STM32:Default_Handler问题
  • 深入解析 C++ Vector:全面掌握 STL 核心容器的原理与高效实践
  • Mybatis事务
  • git相关操作
  • 基于deepseek的智能语音客服【第二讲】后端异步接口调用封装
  • Python 获取显存信息
  • Dubbo(3)Dubbo的工作原理是什么?
  • 学习日记-0316
  • 【Python】12、函数-02
  • 衡量大模型的各个标准/数据集
  • Error: The project seems to require pnpm but it‘s not installed.
  • 微博:严厉打击对肖某董某事件蹭炒热点、编造故事博流量等行为
  • “80后”蒋美华任辽宁阜新市副市长
  • “80后”杨占旭已任辽宁阜新市副市长,曾任辽宁石油化工大学副校长
  • 从孔雀尾巴到蒙娜丽莎,一个鸟类学博士眼中的“美”
  • “光荣之城”2025上海红色文化季启动,红色主题市集亮相
  • 青海省林业和草原局副局长旦增主动投案,正接受审查调查