I2C(inter-integrated circuit) 学习笔记


前言

本片博文主要总结I2C 通信协议的相关知识,以及学习过程中的一些体会、遇到的问题,望可以帮助有需要的人。

笔记内容多为自己总结、心得,如有错漏不恰当之处望不吝指正。

一、I2C 是什么?

I2C(inter-integrated circuit)总线,是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

二、I2C 物理层

1.总线引脚定义

SCL: 串行时钟线,用于同步传送数据;
SDA: 串行数据线,用于传输数据;

2.物理层

I2C 通讯设备之间的常用连接方式如下图所示:
在这里插入图片描述
I2C 特点如下:
►支持多个设备的总线;

►总线由SCL、SDA总线组成,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步;

► 每个连接到总线的设备都有一个设备地址,用于主机与多个设备之间的选择性通信;

► 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平;

► 当多个主机同时使用总线时,使用仲裁方式决定哪个设备占用总线,防止数据传输冲突;

► 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式;

► 由于总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量;

3.协议层

I2C 协议层主要包含如下部分:
► 起始信号
► 数据传输
► 应答信号
► 停止信号

1)起始/停止信号

在这里插入图片描述
SCL = 1时,SDA存在四种状态:高电平、低电平、上升沿和下降沿,因此排列组合如下:

SCLSDA信号定义
1下降沿Start信号
1上升沿Stop信号
11数据1
10数据0

2)应答(ACK)信号

在这里插入图片描述
► I2C 数据传输 需要接收方响应信号,以指示数据是否正确收到;
► 响应信号传输位于第9个时钟,此时主机释放SDA控制权,由从机端控制SDA;
► 响应信号如下:
应答信号(ACK): SDA = 0;
非应答信号(NACK): SDA = 1;

3)数据传输

在这里插入图片描述
► SCL = 0 :允许SDA进行数据切换;
► SCL = 1 :锁定SDA状态输出(SDA = 1,则输出数据为1,SDA = 0,则输出数据为0);
► 数据传输以 字节为单位,

4)数据分类

传输的数据包含 地址字节和要传输的数据字节

【地址字节】
在这里插入图片描述
► I2C 协议规定设备地址可以是 7 位或 10 位,实际中 7 位的地址应用比较广泛;
► 先传输MSB,后传输LSB;
► 第8/11位为读写控制位:0:读/ 1:写;

【数据字节】
数据字节为要传输的数据,无特定格式;

4.通信示例

【字节写入 】
在这里插入图片描述
通信过程为:
► 主机发送Start信号;
► 开始传输设备地址,先传输MSB,后LSB,R/W位 = 0
► 从机收到设备地址,进行匹配,若匹配,则发送应答信号(ACK),否则保持不变;
► 主机收到应答信号,发送写入的地址和写入的数据;
► 从机接收到每个字节后,发送一个应答信号(ACK);
► 数据传输完成,主机发送Stop信号,结束本次传输;

【字节读取 】
在这里插入图片描述
通信过程为:
► 主机发送Start信号;
► 开始传输设备地址,先传输MSB,后LSB,R/W位 = 0
► 从机收到设备地址,进行匹配,若匹配,则发送应答信号(ACK),否则保持不变;
► 主机收到应答信号,发送要读取的数据的地址
► 从机接收到数据地址后,发送一个应答信号(ACK);
► 主机发送Start信号;
► 开始传输设备地址,先传输MSB,后LSB,R/W位 = 1
► 从机收到设备地址,进行匹配,若匹配,则发送应答信号(ACK),否则保持不变;
► 主机释放SDA控制权,从机接收SDA控制区,发送数据至主机;
► 主机收到数据后,无需发送ACK应答;
► 数据传输完成,主机发送Stop信号,结束本次传输;

Reference

[1] 《零死角玩转 STM32F103》 - 第24章 I2C—读写 EEPROM
[2] 《AT24C02》- ALL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值