江科大32--I2C通信协议
项目要求:
单片机读写外部模块寄存器
1.在指定位置写寄存器 在指定位置读寄存器
2.仅用一根线实现接收 发送--SDA
3.应答机制
4.一根线接多个模块
5.同步时序--SCL
I2C通信:
MPU6050 OLED DS3231….都支持I2C
通信线:SCL SDA
多主多从:统一通信协议
硬件规定:
开漏输出 上拉电阻
被控模块可以为MPU6050 OLED …
SCL:任何时刻都是主机控制SCL,只能被动读取
SDA:从机不允许主动发起对SDA的控制,只有在从机应答/主机发送读取从机命令时,从机可以获得SDA的数据权
配置输入输出模式:均为开漏输出模式 输入无所谓
软件规定
起始条件 终止条件 --只能有主机发出
第一个字节必须由主机发送
所有设备--输入模式
主机发送--主动拉低SDA
主机接收--释放SDA,避免影响别人发送,总线是线与模式(只要有一个人低电平,总线就是低电平),如果接收时仍在拉低SDA,影响发送
发送——0 主机放;1 从机读
接收——0 从机放;1主机读
低电平变换数据,高电平读取数据
应答机制——发送/接收
在主机发送后,立刻调用接收应答,判断从机是否收到数据
在主机接收后,立刻调用发送应答,告诉从机:主机收到数据
完整时序
包含:指定地址写 当前地址读 指定地址读 (7位/10位)
板子引脚可以改变设备地址的低位
1.指定地址写:在xxx设备中的xxx寄存器写入xxx数据
第一个字节-设备 第二个字节-寄存器 第三个字节-数据
第一个字节:
前七位:说明是哪个外设;
最后一位:0-之后的时序主机要进行写的操作
1-之后的时序主机要进行读的操作
2.当前地址读:在xxx设备的xxx寄存器读取xxx数据
第一个字节-设备 第二个字节-寄存器
3.指定地址读:即指定地址写+当前地址读
时序图: