I2C通信
简介
串行、半双工总线通信,适用于近距、低速的芯片之间的通信,
i2c一共两根线,sda用于收发数据,scl用于双方时钟的同步
总线有权发起和结束一次通信,从机只能被呼叫,当多主机同时启动总线时,i2c也具备冲突检测和仲裁功能,从机有唯一的器件地址(7bit)
I2C(Inter-Integrated Circuit)是一种用于短距离数字通信的串行通信协议,通常用于连接微控制器、传感器、存储器和其他数字设备。以下是I2C通信的详细过程:
I2C基本概念:
-
主从结构:I2C通信通常涉及两种设备,一个是I2C主设备,另一个是I2C从设备。主设备控制通信的起始和停止,并发出通信请求;从设备响应主设备的请求并提供数据。
-
双线制:I2C通信使用两根线:时钟线(SCL,Serial Clock Line)和数据线(SDA,Serial Data Line)。SCL负责同步通信的时钟,SDA用于传输数据。
I2C通信的详细过程:
-
总线初始化:
- 通信开始前,主设备负责初始化I2C总线。这包括配置通信速率(时钟频率),通信模式(标准模式、快速模式等),并启动总线。
-
起始条件(Start Condition):
- 主设备通过将SCL保持高电平,然后将SDA从高电平转为低电平,来发出起始条件信号。这表示通信的开始。
-
地址传输:
- 主设备将从设备的7位地址和一个读/写位(通常是R/W位,表示读或写)传输到SDA线上。这告诉从设备主设备想要读还是写数据。
-
应答(Acknowledge):
- 从设备接收到地址后,如果能正确响应,则在SDA上发送一个应答位(ACK)。主设备通常会在这个时间点上释放SDA线,以等待从设备的应答。
-
数据传输:
- 主设备和从设备之间的数据传输包括多个字节。每个字节的数据都通过SDA线传输,并由SCL线的时钟信号同步。数据的传输可以是读操作或写操作,取决于前面的地址传输中的读/写位。
-
停止条件(Stop Condition):
- 当数据传输完成后,主设备发出停止条件信号。这是通过将SCL保持高电平,然后将SDA从低电平转为高电平来实现的。停止条件表示通信的结束。
-
重复起始条件(Repeated Start Condition)(可选):
- 在某些情况下,主设备可能需要在不断电的情况下与同一从设备进行多次通信。为了避免发送完整的地址序列,可以使用重复起始条件来继续通信。
-
错误处理:
- 在通信过程中,可能会出现错误,如通信超时、丢失的应答等。主设备通常需要实现错误处理机制来处理这些情况。
总的来说,I2C通信是一种灵活且广泛应用于各种数字设备之间的通信协议。主设备通过发送起始条件、地址和数据来控制通信,而从设备则响应并提供数据。通信的结束由停止条件表示。这种双线制的通信协议使得多个设备可以在同一总线上通信,从而简化了硬件连接。
时序图
主机在发送起始信号后必须先发送一个字节数据,高7位表示从机地址,最低位表示后续字节传输方向,0表示主机发从机收,1表示从机发主机收
通信流程
- 主机发起起始信号启动总线
- 主机发送一个字节的数据指明从机地址和后续数据字节的传输方向
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节的数据
- 接收器发送应答数据回应发送器
- 循环步骤 4、5
- 通信完成后,主机释放总线
起始信号和终止信号
起始信号
SCL为高,SDA由高变低
终止信号
SCL为高,SDA由低变高
字节传送和应答
每个字节为8位,数据传送时先发送高位,后发送低位,发送器发完一个字节数据后,接收器必须 发送1位应答位回应,即是一帧共9位
同步信号
SCL为低电平期间,发送器向数据线发送一位数据,当SCL为高电平期间,接收器从数据线读取一位数据
典型时序
阴影表示主机向从机发送,无阴影表示从机向主机发送,S表示起始信号,A表示应答,P表示终止信号
主机向从机发送数据
从机向主机发送数据
主机先向从机发送数据,然后从机再向主机发送数据