I2C协议详细解析

I2C协议详细解析

I2C协议介绍

I2C总线(I2C bus)是一个双向二线制的总线它是一种串行总线。我们这里首先只谈一下单纯的I2C协议,后面再联系实际介绍I2C的实际应用。I2C总线包括两条线路即它的SDA数据线和SCL时钟线并且均可进行双向传输,I2C总线的数据传输速率在标准模式下可达100kbits,快速模式下可达400kbits,高速模式下可达3.4Mbit/s。I2C总线上的主机(master)与从机(slave)之间以字节(8bit)为单位进行双向的数据传输。下面介绍下I2C整体时序。如图1为I2C整体时序。
I2C协议详细解析_第1张图片
图1 I2C整体时序图

I2C整体时序说明:
总线为空闲状态时:SDA和SCL均为高电平;
I2C协议起始位:当SCL保持高电平时,SDA出现一个下降沿,产生一个起始位;
I2C协议停止位:当SCL保持高电平时,SDA出现一个上升沿,产生一个停止位;
当 I2C 主机向 I2C 从机写入数据时, SDA 上的每一位数据在 SCL 的高电平期间被写入从机中。从主机角度来看,需 要在 SCL 低电平期间改变要写入的数据。而当主机读取从机中数据时,从机在 SCL 低电平期间将数据输出到 SDA 总线上,在 SCL 的高电平期间保持数据稳 定,从主机角度来看,需要在SCL 的高电平期间将SDA线上的数据读取并存储。 每当一个字节的数据或命令传输完成时,数据接收方都会向发送方响应一位 应答位(正确应答ACK为高,未应答ACK为低)。
I2C的器件地址
每个 I2C 器件都有一个器件地址,有的器件地址在出厂时地址就设置好了, 用户不可以更改,有的确定了几位,剩 下几位由硬件确定(比如常见的 I2C 接口的 EEPROM 存储器,留有 3 个控制地 址的引脚,由用户自己在硬件设计时确定)。主机往I2C总线上传输器件地址,所有的从机接收到这个地址后与自己的地址相比较若相同则发出一个应答ACK信号,主机收到这个应答信号后通讯连接建立成功。若未收到应答信号则表示寻址失败。对于不同器件的从机其定义地址的方式也是不同的,有的是软件定义的有的是硬件定义的。I2C 协议在进行数据传输时,主机需要首先向总线上发出控制命令,其中, 控制命令就包含了从机器件地址和读写控制,然后等待从机响应。如下图2表示了I2C传输控制命令的数据格式示意图。
I2C协议详细解析_第2张图片
图2 I2C传输器件地址(控制命令)的数据格式示意图

I2C传输时,按照从高到低的位序进行传输。控制字节的最低位为读写控制位,当该位为 0 时表示主机对从机进行写操作,当该位为 1 时表示主机对从机进 行读操作。

I2C存储器地址
每个支持 I2C 协议的器件,内部总会有一些可供读写的寄存器或存储器。因此,我们要对一个器件中的存储单元(寄存器和存储器,以下简称存储单元) 进行读写,就必须要能够指定存储单元的地址。I2C 协议设计了有从机存储单元 寻址地址段,该地址段为一个字节或两个字节长度,在主机确认收到从机返回的 控制字节响应后由主机发出。地址段长度视不同的器件类型,长度不同,分为一个字节地址和两个字节地址,具体是一个字节还是两个字节,与器件的存储单元数量有关。如 图 3和图 34 分别为 1 字节地址和 2 字节地址器件的地址分布图。
I2C协议详细解析_第3张图片
I2C协议详细解析_第4张图片
图3 1字节地址器件的地址分布

I2C协议详细解析_第5张图片
I2C协议详细解析_第6张图片
I2C协议详细解析_第7张图片
图4 2字节地址器件的地址分布

I2C写时序
单字节写时序
根据前面讲的,不同器件,I2C 器件地址字节不同,这样对于 I2C 单字节写 时序就会有所差别,图 5 和图 6分别为 1 字节地址段器件和 2 字节地址段器 件单字节写时序图(下图中1010为实际应用中出厂固定的地址)。
I2C协议详细解析_第8张图片
图5 单字节地址器件写时序
I2C协议详细解析_第9张图片
图6 双字节地址段器件写时序
I2C读时序
单字节读时序
读时序如下图5、图6所示。
I2C协议详细解析_第10张图片
图5 单字节地址器件读时序
I2C协议详细解析_第11张图片
图6 双字节地址器件读时序

你可能感兴趣的:(通信协议)