关于I2C
I2C最早是飞利浦公司在1982年开发的一种双向二线制串行总线协议。它只需要两根信号线就能完成信息交换,发展至今已经有100kHz、400kHz、1MHz、3.4MHz、5MHz五种通信速率。最终通信速率取决于外设而非主机芯片。
I2C信号线
SCL时钟线
SCL时钟线决定了通信速率,频率越高,传输速率越快,其在高电平时,SDA线数据有效。
SDA数据线
SDA数据线决定了传输什么数据,高电平表示1,低电平表示0。在SCL高电平期间,SDA必须稳定。
I2C 时序
-
起始标志
SCL高电平时,SDA从高电平向低电平切换
-
结束标志
SCL高电平时,SDA从低电平向高电平切换
-
应答标志
SCL处于高电平时,SDA保持低电平
-
非应答标志
SCL处于高电平时,SDA保持高电平
-
等待应答
与应答/非应答一样,只不过是把SCL置高,释放SDA后看从机的电平高低
对于I2C的时序,需要注意的点:
- GPIO初始化(硬件I2C要严格使用复用开漏模式,防止大电流倒灌,软件可以用普通的推挽输出模式即可,但是在切换输出输入模式的时候,不要对引脚的高低电平进行操作,以免出现多余电平)
- I2C读写速度的计算要确定好MCU时钟速率、从机设备可接受的最大速率