【嵌入式面经专题】4-IIC协议

发布时间 2023-07-19 09:38:49作者: FBshark

1. 概述

I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

2. 物理层
只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是全双工)。
每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/从机角色和地址可配置,主机可以作为主机发送器和主机接收器。
IIC是真正的多主机总线,(区别于SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。
传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。
连接到总线的IC数量只是受到总线的最大负载电容400pf限制。
3. 协议层
开始条件:SCL高电平,SDA由高变低
停止条件:SCL高电平,SDA由低变高
总线空闲态:SDA为高电平(没有设备发送开始条件)
应答信号:接受数据的IC在接受到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。

I2C 时序:

写:(一种普遍的版本,对于具体的外设有所不同)
1.主机发送开始条件
2.发送从机地址(7位 )+ 写(0)
3.从机会产生一个应答信号(一个CLK下,把SDA拉低)
4.主机得到应答信号,发送8位数据。
5.从机会产生一个应答信号
6.重复 4.5 过程,直到主机发送停止条件

读:(一种普遍的版本,对于具体的外设有所不同)
1.主机发送开始条件
2.发送从机地址(7位)+读(1)
3.从机会产生一个应答信号(一个CLK下,SDA拉低)
4.从机给主机发送8位数据
5.主机给从机发送应答
6.从机得到应答,接着发送8位数据。
7.重复5.6过程,直到主机不发送应答信号和产生停止信号