IIC通信协议
一、概述
IIC协议:是一种各种电子设备之间进行数据交换和通信的串行,半双工通信协议,主要用于近距离,低速的芯片之间的通信。
I2C协议采用双线结构传输数据,由一个数据线(SDA线)和一个时钟线(SCL线)组成。
SDA线:用于双向数据传输。
SCL线:同步时钟数据传输的时钟信号。
通信时钟由主设备控制,从设备被动接收和回应。
二、I2C的主要特点
1、两线制
2、多主从架构:IIC总线上可以有一个主设备和多个从设备。主设备控制通信的开始和结束,从设备响应主设备的请求
3、地址寻址:每个从设备都有一个唯一的地址,主设备通过这个地址来选择特定的从设备进行通信
4、同步通信:数据传输是同步进行的,由SCL时钟信号控制数据位的发送和接收
5、半双工通信:在任何给定时间,数据只能在一个方向上流动。
6、应答机制
7、支持多种传输速率
(I2C
协议没有规定总线上设备最大数目,但是规定了总线电容不能超过 400pF。管脚都是有输入电容的,PCB 上也会有寄生电容,所以会有一个限制。实际设计中经验值大概是不超过 8 个器件。)
三、IIC的通信过程
1. 结束信号:由主机拉低SDA线,在SCL线高电平时,SDA线由低电平转为高电平,产生起始信号。
2. 起始信号:由主机拉高SDA线,在SCL线高电平时,SDA线由高电平转为低电平,产生结束信号。
3. 数据传输:数据按位传输,先传输高位,每个数据位的传输由SCL决定。在SCL线高电平时,SDA线上发送的数据将被视为有效数据,即 SDA 上的数据变化只能在 SCL 低电平期间发生。
4、应答信号:发送器每发送一个字节,就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK 简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
5、空闲状态:IIC
总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
写时序:
读时序:
设备地址:一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位(为 1 的话表示这是一个读操作,为 0 的话表示这是一个写操作)。
写入单个字节:
向从机设备的某一个寄存器写一个字节数据:开始信号+设备地址(7位)+读/写(1位)+等待从机应答+寄存器地址(8位)+等待从机应答+要写的数据(8位)+等待从机应答+终止信号。
写入多个字节:
向从机设备的某一个寄存器写多个字节数据:开始信号+设备地址(7位)+读/写(1位)+等待从机应答+寄存器地址(8位)+等待从机应答+要写的数据_1(8位)+等待从机应答+要写的数据_2(8位)+等待从机应答+······+要写的数据_N(8位)+等待从机应答+终止信号。
读取一个字节:
从机设备的某一个寄存器读取一个字节数据:开始信号+设备地址(7位)+写(1位)+等待从机应答+数据地址(8位)+等待从机应答+开始信号+设备地址(7位)+读(1位)+等待从机应答+从机返回读取数据_1(8位)+主机(接收机)不再应答+终止信号
读取多个字节:
从从机设备的某一个寄存器读取多个字节数据:开始信号+设备地址(7位)+写(1位)+等待从机应答+数据地址(8位)+等待从机应答+开始信号+设备地址(7位)+读(1位)+等待从机应答+从机返回读取数据_1(8位)+主机(接收机)应答+从机返回读取数据_2(8位)+主机(接收机)应答+......+从机返回读取数据_N(8位)+主机(接收机)不再应答+终止信号。