: 本教程基于up主江科大自化协——“STM32入门教程”记录的个人学习笔记
1.I2C通信
I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线
两根通信线:SCL(Serial Clock),SDA(Serial Data)
同步、半双工,带数据应答机制(异步时序的好处省一根时钟线,缺点是对硬件电路非常依赖)
支持总线挂载多设备(一主多从,多主多从)
一主多从:单片机作为主机,主导I2c总线运行,挂载在I2c总线的所有外部模块都是从机,从机只有在主机点名之后才能控制I2c总线
多主多从:在总线上任何一个模块都可以主动跳出来都当从机,此时I2c协议会进行仲裁
2.硬件电路
所有I2c设备的SCL连接一起,SDA连接一起
设备的SCL和SDA均要配置成开漏输出模式
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
3.I2C时序基本单元
起始条件:SCL高电平时期,SDA从高电平切换低电平
终止条件:SCL高电平时期,SDA从低电平切换高电平
发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
注:实线代表主机控制的电平,虚线代表从机控制的电平
发送应答:主机在接收完一个字节之后,在下一个时钟发送一个数据,数据0表示应答,数据1表示非应答
接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)