【基础知识】IIC(I2C)协议

本文详细介绍了I2C通信协议的工作原理,包括起始和停止信号的产生、数据传输的时序、应答信号以及地址的发送。I2C使用SCL和SDA两根线进行同步半双工通信,适用于低速设备连接。在通信过程中,主机负责产生时钟信号并管理地址与数据传输,从机根据接收到的地址决定是否响应。同时,文章还涵盖了读写寄存器的操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

IIC(I2C)是一个同步半双工串行通信协议,使用3根线即可连接

名称功能
SCL时钟线
SDA数据线
GND接地

设计用于低速设备的连接,速度不及SPI,快于串口通信,接线简单。

有主机和从机之分,主机产生时钟信号,地址信号,从机根据地址选择是否收发数据,如果主机发送的地址与从机相同,则从机开始接受或发送数据,占用地址线。

电气连接如图
在这里插入图片描述

时序

不同的设备的具体发送的数据不同,但总体上主设备是先发送地址,再发送或接受数据

注意:iic是同步通信方式,允许不定长度的数据,也就是每一对起始信号和终止信号中间可以传输多个8bit数据

发送地址和数据的流程为

  1. 发送起始信号
  2. 发送地址
  3. 接受校验信号
  4. 发送或接受数据8bit
  5. 接受校验信号
  6. 重复
  7. 发送结束信号

SDA和SCL的默认电平为高电平(空闲状态)

起始信号

在这里插入图片描述
在空闲状态时(SCL,SDA为高电平),SDA产生下降沿为起始信号

注意:SDA如果要回到高电平,需要在SCL为低电平时动作,避免误触停止信号
如果SDA为低电平时,将其置高时,SDA高电平状态需要存留一段时间,
SDA与SCL下降沿之间也需要一段延迟
具体时间与外设有关

思路

  1. 拉高SDA和SCL,顺序无所谓,确保进入空闲状态
  2. 拉低SDA,产生下降沿,发送起始信号
  3. 拉低SCL,确保数据传输不好误触(也可以放到数据传输的最前)

停止信号

在这里插入图片描述
在SCL为高电平时,SDA产生上升沿信号,之后SCL,SDA全为高,进入空闲状态

注意,SCL与SDA的上升沿之间需要一定时间间隔,SDA的高电平需要持续一段时间

思路:

  1. 拉低SDA(默认从发送数据后SCL为低电平)
  2. 拉高SCL
  3. 拉高SDA,产生终止信号,回到空闲状态

数据信号

对于数据来说,只有SCL为低电平时才允许SDA发送电平变化
即SCL为高电平时SDA保持稳定,为高电平或低电平

在这里插入图片描述

就像这样,只有在SCL为低电平时才允许SDA变化
思路:

  1. 拉低SCL
  2. 改变SDA为自己的数据(发)
  3. 拉高SCl
  4. 读取SDA的电平(收)
  5. 重复到8次

应答信号

当数据传输完成后,需要产生一个校验信号,这是第9个时钟周期,应答信号由接受机产生
这个信号除了数据来源不同以外,与数据信号完全相同
SDA为低电平为应答,高电平为非应答
思路

  1. 拉低SDA(收)(默认从数据出来是低电平)
  2. 拉高SCL
  3. 读取SDA(发)
  4. 拉低SCL

总时序

在这里插入图片描述
读数据和写数据只有方向上的区别

注意:时钟信号是由主设备产生的,数据信号可以由主从设备操作
主设备产生时钟信号时不要忘记应答信号的时钟
接收时不要忘记应答信号

IIC的地址

在这里插入图片描述

地址由主机发送
从高位到低位发送7bit地址,最后一位是选择发送或接受数据
0是主机发送数据,1是主机接受数据

I2C读写寄存器

写寄存器

  1. 起始信号(开始I2C通信)
  2. 发送从设备地址(检测应答)
  3. 发送寄存器地址(检测应答)
  4. 发送数据直到完成(每次均检测应答)
  5. 发送结束信号

读寄存器

  1. 起始信号(开始I2C通信)
  2. 发送从设备地址(检测应答)
  3. 发送起始信号(表示发送的是寄存器地址)
  4. 发送寄存器地址(检测应答)
  5. 读取数据(发送应答信号)
  6. **读取到最后一个字节时(**发送非应答信号)
  7. 结束信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值