- 背景
- 硬件层
- 数据传输协议
- 实际上如何工作?
- 单个主设备连接多个从机
- 多个主设备连接多个从机
- 如何编程?
- 总结
背景
I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。
I²C最重要的功能包括:
- 只需要两条总线;
- 没有严格的波特率要求,例如使用RS232,主设备生成总线时钟;
- 所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址;
- I²C是真正的多主设备总线,可提供仲裁和冲突检测;
- 传输速度;
- 标准模式:Standard Mode = 100
Kbps
- 快速模式:Fast Mode = 400
Kbps
- 高速模式: High speed mode = 3.4
Mbps
- 超快速模式: Ultra fast mode = 5
Mbps
- 标准模式:Standard Mode = 100
- 最大主设备数:无限制;
- 最大从机数:理论上是127;
以上是I²C的一些重要特点,下面会进一步对I²C进行介绍。
硬件层
I²C协议仅需要一个SDA和SCL引脚。SDA是串行数据线的缩写,而SCL是串行时钟线的缩写。这两条数据线需要接上拉电阻。
设备间的连接如下所示:
使用I²C,可以将多个从机(Slave
)连接到单个主设备(Master
),并且还可以有多个主设备(Master
)控制一个或多个从机(Slave
)。
假如希望有多个微控制器(
MCU
)将数据记录到单个存储卡或将文本显示到单个LCD时,这个功能就非常有用。
I²C总线(SDA
,SCL
)内部都使用漏极开路驱动器(开漏驱动),因此SDA
和SCL
可以被拉低为低电平,但是不能被驱动为高电平,所以每条线上都要使用一个上拉电阻,默认情况下将其保持在高电平;
上拉电阻的值取决于许多因素。德州仪器TI 建议 使用以下公式来计算正确的上拉电阻值:
其中
是逻辑低电压;
是逻辑低电流;