IIC 通信协议详解
IIC(Inter-Integrated Circuit BUS) 集成电路总线。
1,物理层:
设备之间连接方式
IIC的物理特性:
1)IIC通信在控制上是一主多从的模式。
2)IIC由sda/scl两条通信线构成。
scl是串行时钟线,用来控制通讯的时钟频率实现数据收发同步;sda是双向串行数据线,用来控制协议中数据的传输。
3) 总线上拉电阻接到电源。I2C 设备空闲时,输出高阻态,当所有设备都空闲,总线呈现高电平状态。
4)总线上每个设备都有自己的地址,设备的地址可以进行重置。根据地址不同,可以实现选择不同设备进行通信。
6)当多个主机同时使用总线时,利用仲裁方式决定由哪个设备占用。
5)根据IIC传输数据的速度,分为三种传输模式:
标准模式传输速率为 100kbit/s
快速模式为 400kbit/s
高速模式 3.4Mbit/s(但目前大多 I2C 设备尚不支持高速模式)
2,IIC的功能框图解析:
逻辑控制接收dma请求,应答信号以及中断的响应处理。对应相关状态控制寄存器,控制寄存器;
时钟控制寄存器控制scl时钟线的频率;
sda线实现数据 的接收和发送:
接收:数据通过数据移位寄存器转移到数据寄存器,如果接收的数据是地址,需要与设备本身存储的地址进行对比。
发送:数据从数据寄存器转移到数据移位寄存器,发送到sda总线上。
3,协议层(重点):
起始信号:scl高电平时,sda由高电平变低电平产生一个起始信号;
终止信号:scl高电平时,sda由高低平变高电平产生一个终止信号;
数据信号:scl为高电平的时候,sda低电平是数据0,sda为高电平的时候是数据1;
IIC通信的4种模式:
● 从发送器模式
● 从接收器模式
● 主发送器模式
● 主接收器模式
iic四种模式时序图分析(都以七位地址为例)
从发送模式时序图:
主start->主发送写地址->从ack->等待ev1/ev3-1/ev3->从发送数据1->主ack->等待ev3->………->从发送数据n->主nack->等待ev3-2->主stop
主start->主发送读地址->从ack->等待ev1->主发送数据1->从ack->等待ev2->………->主发送数据n->从ack->等待ev2->主stop->等待ev4
主start->等待ev5->主发送写地址->从ack->等待ev6/ev8-1->主发送数据1->从ack->等待ev8->………->主发送数据n->从ack->等待ev8-2->主stop
主start->等待ev5->主发送读地址->从ack->等待ev6->从发送数据1->主ack->等待ev7->…从发送数据n-1->主ack->等待ev7-1->从发送数据n->主nack->等待ev7->主stop
注意:始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。
4,IIC结构体和常用函数:
typedef struct
{
uint32_t I2C_ClockSpeed; /*!< Specifies the clock frequency.
This parameter must be set to a value lower than 400kHz */
uint16_t I2C_Mode; /*!< Specifies the I2C mode.