一、IIC 简介
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。IIC是半双工通信方式。
IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源,但在任何时间点上只能有一个主控。
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
IIC支持的传输速率如下:
模式 | 速率 |
---|---|
标准模式(Standard Mode) | 100kb/s |
快速模式(Fast Mode) | 400kb/s |
增强快速模式(Fast Mode Plus | 1Mb/s |
高速模式(High Speed Mode) | 3.4Mb/s |
极速模式(Ultra-FastMode) | 5Mb/s |
二、IIC 总线协议
1. 时序图
IIC通讯主要包括:起始位、数据传输8位(先高后低)、应答位和终止位。
具体如下:
通过时序图可知,IIC传输数据是先发高位,后发低位。
2. 空闲状态----双高
一般情况下,数据线SDA和时钟线SCL都是处于上拉电阻状态。
因为在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
3. 起始位
当时钟线SCL 为高电平时,数据线SDA 由高电平向低电平跳变。
启动信号是一种电平跳变时序信号,而不是一个电平信号。
具体时序图如下图所示:
4. 数据传输位
IIC总线进行数据传送时,时钟线(SCL)上的信号为高电平期间,数据线(SDA)上的数据必须保持稳定。
只有在时钟线(SCL)上的信号为低电平期间,数据线(SCL)上的高电平或低电平状态才允许变化。
输出到数据线(SDA)上的每个字节必须是8位。
数据传送时,先传送最高位(MSB),后传送最低位(LSB)。
每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
5. 应答位
发送器每发送一个字节(8个bit),就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。 主机SCL拉高,读取从机SDA的电平。
对于反馈有效应答位ACK的要求是:
接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,
并且确保在该时钟的高电平期间为稳定的低电平。
具体时序图如下:
(1)应答信号
数据线(SDA)为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节。
(2)非应答信号
数据线(SDA)为高电平时,规定为非应答位(NACK),表示接收器没有成功接收该字节。
如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个终止信号P。
6. 终止位
当时钟线SCL 为高电平时,数据线SDA 由低电平向高电平跳变。
终止信号是一种电平跳变时序信号,而不是一个电平信号。
具体时序图如下图所示:
STM32F103标准库开发----IIC主控实验----普通I/O口模拟----底层驱动程序
STM32F103标准库开发----IIC主控实验----普通I/O口模拟----读写AT24Cxx系列EEPROM实验