通俗来说I2C是一种总线结构,有了它就可以让单片机和大量设备连接;
1. I2C概念
I2C总线是一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;
I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;
I2C总线是一种多主机总线,连接在 I2C总线上的器件分为主机和从机。主机有权发起和结束一次通信,从机只能被动呼叫;
2. 通信过程
- 主机发送起始信号启用总线;
- 主机发送一个字节数据指明从机地址和后续字节的传送方向;
- 被寻址的从机发送应答信号回应主机;
- 发送器发送一个字节数据;
- 接收器发送应答信号回应发送器;
- ........ (循环步骤4、5);
- 通信完成后主机发送停止信号释放总线;
2.1. 发送起始位
2.2. 寻址过程
2.2.1. 寻址阶段ANK的原因
1、地址填错,寻址的从机不存在
2、主机正忙,来不及应答从机信号
2.3. 数据传输
2.3.1. 写数据
主机发送,从机接收
主机向从机发送8bit(1字节)数据,然后释放掉 SDA 线,等待从机确认接受,从机通过把SDA拉低,来发送一个ACK,表示数据收到,
然后主机在发送第二个字节以此类推。。。
2.3.2. 读数据
从机发送,主机接受
从机发送数据,主机回复ACK,每读一个字节回复一个ACK;
2.4. 停止位
数据传输结束后,主机需要向 总线上 发送一个停止位;
当SCL为高电压时,向SDA发送上升沿;
2.5. 总结
3. 波特率
4. 占空比
一般选择2∶1的占空比