【I2C通信】

【I2C通信】

概述

(1)两根通信线:SCL(Serial Clock 串行时钟线)、SDA(Serial Data 串行数据线)
(2)同步半双工
(3)带数据应答
(4)支持总线挂载多设备:多用于一主多从

硬件电路

image
SCL时钟线:被动读取
SDA数据线:主机发送从机读取/从机应答时有控制权

接线

(1)所有I2C设备的SCL连在一起,SDA连在一起
(2)设备的SCL和SDA均要配置成开漏输出模式
禁止所有设备输出强上拉高电平->外置弱上拉电阻(4.7kΩ)+开漏输出
image

I2C时序基本单元:主机产生

起始条件:SCL高电平期间,SDA从高电平切换到低电平 (下降沿)
image

终止条件:SCL高电平期间,SDA从低电平切换到高电平 (上升沿)
image

发送一个字节

(1)SCL低电平期间,主机将数据位依次放到SDA线上(高位先行
(2)释放SCL,从机将在SCL高电平期间读取数据位
SCL高电平期间 SDA不允许有数据变化
image

接收一个字节

主机在接收之前,需要释放SDA->从机取得控制权->和上面一样
image

应答机制

发送应答主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
image
接受应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(要先释放SDA)
image

I2C时序

指定地址写

对于指定设备(Slave Address)
指定地址(Reg Address)下
写入指定数据(Data)
image

当前地址读(用得不多)

对于指定设备(Slave Address)
当前地址指针指示的地址下
读取从机数据(Data)
image

指定地址读:指定地址写(但是不写)+(中间重新开始一下)+当前地址读

image
※读和写可以执行多次:一次写入n个寄存器

代码部分

posted @ 2025-10-03 21:56  White_ink  阅读(9)  评论(0)    收藏  举报