01、I2C总线基础知识
一、基础知识
1.1. 总线结构
I2C总线由一个主设备和多个从设备组成。主设备负责发起通信,从设备响应主设备的指令。
1.2. 物理接口
I2C总线只需要两根线:
- SCL(时钟线):主设备通过这条线发送时钟信号,控制数据传输节奏。
- SDA(数据线):双向传输数据的线路。
这两根线需要接上拉电阻(通常用3.3kΩ或4.7kΩ电阻),确保不通信时保持高电平。
1.3. 通信流程
- 启动信号:主设备先发送一个特殊信号表示开始通信。
- 发送地址:主设备发送从设备的7位地址,最后1位表示读(1)或写(0)。
- 应答确认:被叫到的从设备收到地址后,会发一个信号回应"我在这里"。
- 数据传输:主从设备通过SDA线按字节交换数据,每个字节8位。
- 停止信号:主设备发送结束信号,本次通信完成。
1.4. 速度等级
I2C支持不同速率:
- 标准模式:100kbps(每秒10万比特)
- 快速模式:400kbps(每秒40万比特)
- 高速模式:3.4Mbps(但RK3568芯片只支持到1Mbps)
1.5. 设备地址
每个从设备有唯一7位地址(例如0x50),共能支持127个设备。
地址最后一位是方向位:
- 0:主设备要写数据给从设备
- 1:主设备要读取从设备数据
1.6. 多主机竞争
当多个主设备同时想使用总线时:
- 系统会自动"仲裁",优先让发送更低电平信号的主设备获得使用权
1.7. 其他要点
总线容量:最多能连接总电容400pF的设备(决定能接多少设备)
数据单位:所有数据都以8位字节为单位传输
实现方式:
- 硬件I2C:芯片内部电路实现,速度快但成本高
- 软件I2C:用普通GPIO口模拟信号,灵活但速度慢
:::
总结
I2C就像一个公共对话系统:一个主持人(主设备)控制话筒,听众(从设备)只能等被点名后才能回应。所有交流都通过两根线完成,速度可调节,最多能容纳127个设备参与。 :::
二、资源
在 RK3568 数据手册中可以找到关于 I2C 接口的介绍,具体如下所示:
支持 6 路 I2C 接口,分别为 I2C0、I2C1、I2C2、I2C3、I2C4、I2C5
支持 7 位和 10 位地址模式
软件可编程时钟频率
I2C 总线上的数据传输速率可达:
- 标准模式最高 100Kbit/s
- 快速模式最高 400Kbit/s
- 快速模式加最高 1Mbit/s
三、什么是硬件I2C (当前模式:控制器负责拉出对应的波形)
实现方式:通过专用的硬件 I2C 接口电路来实现 I2C 总线协议。
优点:
- CPU 占用低,I2C 总线由硬件电路自动完成。
- 传输速率高,可以达到 400kbit/s 或 3.4Mbit/s。
- 更加可靠和稳定,不易受外部干扰。
缺点:
- 需要专用的硬件 I2C 接口电路支持,成本相对较高。
- 接口固定,不如软件 I2C 那么灵活。
适用范围:适用于高速、大量数据传输的场合,如 LCD、EEPROM 等外设的连接。
而软件 I2C 指的是通过 GPIO 口模拟 SCL 和 SDA 信号线,在硬件 I2C 不够用的情况下,可以 通过 GPIO 来模拟软件 I2C,关于软件 I2C 的介绍如下所示:
四、什么是软件I2C(GPIO模拟:代码可以模拟I2C波形)
实现方式:通过软件模拟 I2C 总线协议,使用通用 I/O 口来模拟 SCL 和 SDA 信号线。
优点:
- 灵活性强,可以在任何 I/O 口上实现 I2C 接口。
- 成本低,不需要额外的硬件支持。
缺点:
- CPU 占用较高,因为需要在软件中模拟 I2C 时序。
- 传输速率较低,受 CPU 性能限制,一般在 100kbit/s 左右。
适用范围:适用于低速、少量数据传输的场合。
I2C0、I2C1 各自只有一组 pinctrl,而 I2C3、I2C4、I2C5 各有两组 pinctrl,但某一个硬件 I2C 只能由一组 GPIO 复用。