I2C通信基础

I2C通信基础

I2C的全称为Inter-Integrated Circuit,即内部集成电路。I2C常被用于OLED显示器、压力传感器和陀螺仪/加速度计等。

I2C通信简介

I2C综合了SPI与UART的优点,可以实现单主机与多从机之间的通信,不仅如此,它还可以实现多台主机控制单台或者多台从机。当多台微控制器需要从单存储器中获取日志信息或者在单块LCD显示器上现实文本时I2C就能体现出它多主机通信的优势。

与UART通信一样,I2C同样也只需要2跟通信线。

Introduction to I2C - Single Master Single Slave

SDA(Serial Data): 主机与从机收发数据的通信线

SCL(Serial Clock): 时钟信号线

I2C是一种串行通信协议,数据通过SDA通信线逐个比特进行传输。与SPI通信一样,I2C为同步通信,数据的输入与输出依靠时钟信号进行同步,时钟信号由通信主机发出。

SPI通信的特点可以总结为

通信线:2
传输速率标准模式= 100 kbps
快速模式= 400 kbps
高速模式= 3.4 Mbps
超高速模式= 5 Mbps
串行或并行:串行
同步或异步:异步
最大主机数目:无限制
最大从机数目:无限制
I2C工作原理

I2C通信中的数据也称作消息。消息内部包含多个帧,例如,每条消息包含一个地址帧,存储从机地址,此外还有一个或者多个数据帧,存储通信数据。消息中也包含有起始条件、停止条件、读/写位以及在数据帧之间的应答\非应答位。

Introduction to I2C - Message, Frame, and Bit

起始条件:在SCL由高电平转化为低电平前,SDA由高电平转化为低电平

停止条件:在SCL由低电平转化为高电平后,SDA由低电平转化为高电平

地址帧:一个7-10位的二进制序列,用以辨识从机

读写位:标识主机发送数据至从机(低电平)或者向从机请求数据

ACK/NACK: 消息体中的每一帧数据都跟随有一个ACK/NACK位。如果地址帧或者数据帧被成功接收,则ACK位则会从发送端传输到接收端。

寻址

I2C没有类似SPI的片选线,而是在消息体中加入辨识从机的地址帧以选择从机,地址帧是消息体中紧跟起始位的第一帧数据。

通信开始后,主机发送从机地址至数据线,与主机连接的每一个从机都比较接收到的地址与其本征的地址是否一致。如果地址匹配,则匹配的从机将发出低电平ACK位至主机,如果地址不匹配的话,则从机无响应,SDA数据线保持高电平。

读/写位

地址帧后跟随读/写位,它表征主机是将数据发送至从机还是主机需要从从机获取数据。如果数据是由主机发送至从机,则读写位为低电平。如果主机向从机请求数据,那读写位则为高电平。

数据帧

主机接受到从机发送来的应答位(ACK)后,此后可以开始发送数据帧。

数据帧为8比特长,并且从最高位开始发送。每一帧数据后都紧跟一个应答位表征数据是否被成功接收。在下一帧数据开始发送时,发送端必须先检测到前一帧的应答位。

当所有数据帧传输完成后,主机向从机发送停止条件以停止发送。

I2C数据传输步骤
  1. 主机在把SCL线从高电平拉低至低电平前将SDA线由高电平拉低至低电平,从而通知所有从机通信即将开始。

Introduction to I2C - Data Transmission Diagram START CONDITION

2.主机发送7-10位的地址帧,以表征它此次通信的从机地址,地址帧后跟随读/写位。

Introduction to I2C - Data Transmission Diagram ADDRESS FRAME

3.每一个从机将接收的地址帧数据与自身地址相比较,如果地址匹配,则从机将SDA线拉低,以表示应答位。如果地址不匹配,则SDA数据线维持高电平。

Introduction to I2C - Data Transmission Diagram ACK Bit Slave to Master

4.主机开始发送或接收数据帧。

Introduction to I2C - Data Transmission Diagram Data Frame

5.每一帧数据发送后,接收端发送ACK至发送端,以表示此数据帧已被成功接收。

Introduction to I2C - Data Transmission Diagram ACK Bit Slave to Master

6.所有数据帧传输完成后,主机在将SCL由低电平拉高为高电平后,将SDA由低电平拉高为高电平,表示数据传输结束。

Introduction to I2C - Data Transmission Diagram Stop Condition

单主机连接多从机

I2C采用寻址机制,从而可以实现单台主机控制多台从机。若使用7位地址,则可以有128个从机。若使用10位地址,则可以有1024个从机。单主机连接多从机的一种方式为

Introduction to I2C - Single Master Multiple Slaves

注意需要将SDA与SCL通信线用合适的电阻(如 4.7 K Ω 4.7K\Omega 4.7KΩ)拉高至高电平。

多主机连接多从机

I2C还可以实现多台主机连接多台从机。多主机系统存在在同一时刻有2台或以上的从机抢占SDA线的情况。为解决此问题,每一台主机在请求获取通信线权限时需要提前检测此时SDA为高电平或是低电平。如果SDA线为低电平,则表示此时存在有另一台主机控制总线,本台主机的消息传输需要推迟。如果此时SDA数据线为高电平,此台主机则可以获取数据线并开始传送数据。一种多主机连接多从机的接线方式为

Introduction to I2C - Multiple Masters Multiple Slaves 2

同理需要将SDA与SCL通信线用合适的电阻(如 4.7 K Ω 4.7K\Omega 4.7KΩ)拉高至高电平。

I2C通信优缺点
优势:
  • 只需两根通信线
  • 支持多主机多从机通信
  • ACK/NACK位可表征每一帧数据的传输准确度
  • 硬件相比于UART更加简单
劣势:
  • 相较于SPI传输速率更低
  • 数据帧限制为8比特
  • 相较于SPI硬件复杂度提高
延伸阅读

UART通信基础SPI通信基础

原文链接(Reference)

https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

article/details/120261265)

原文链接(Reference)

https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值