I2C协议:基础知识指南

文章目录

  • 概述
  • 时序
  • 起始信号
  • 停止信号
  • 数据信号
  • 应答信号
  • 总时序
  • IIC的地址
  • I2C读写寄存器
  • 写寄存器
  • 读寄存器
  • 概述

    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. 结束信号
    物联沃分享整理
    物联沃-IOTWORD物联网 » I2C协议:基础知识指南

    发表评论