I2C

通过通信线,实现单片机读写外挂模块的寄存器的功能。

  • 串行半双工
  • 应答机制
  • 多模块 一主多从 / 多主多从
  • 同步、时钟线

采用外置若上拉电阻加开漏输出结构,进制所有设备输出强上拉的高电平。

I2C时序基本单元

起始条件:SCL高,SDA下降沿;终止条件:SCL高,SDA上升沿

主机发送一个字节:SCL低电平期间,主机数据将依次放到SDA上(高位先行,B7–>B0依次发送),然后释放SCL,从机在SCL高电平期间,读取数据位。

主机接收一个字节 :SCL低电平期间,从机数据依次放到SDA上(高位先行),主机在SCL高电平期间读取数据位。

应答机制

发送应答SA:主机在接收完一个字节后,在下一个时钟发送1bit,0应答,1非应答。

接收应答RA:主机在发送完一个字节后,在下一个时钟接收1bit从判断从机是否应答,0应答,1非应答。

I2C时序★★★

  • 指定地址写:

    对于指定设备(slave address),在指定地址(reg address)下,写入指定数据(data)

    • 起始
    • –> 主机send slave address(7bit)+ R/W(W=1,1bit)
    • –> 主机接收应答RA
    • –> 主机send reg address(8bit)
    • –> 主机接收应答RA
    • –> data 8bit
    • –> 主机 RA
    • –> 终止
  • 当前地址读:

    对于指定设备(slave address),在当前地址下,读从机数据(data)

    • 起始
    • –> 主机send slave address(7bit)+ R/W(R=0,1bit)
    • –> 主机 RA
    • –> 主机接收 data8bit
    • –> 主机 发送应答 SA
  • 指定地址读:

    对于指定设备(slave address),在指定地址(reg address)下,读取从机数据(data)

    • 起始
    • –> 主机send slave address(7bit)+ R/W(W=1,1bit)
    • –> 主机接收应答RA
    • –> 主机send reg address(8bit)
    • –> 主机接收应答RA
    • –> 主机Sr,重复起始条件
    • –> 主机send slave address(7bit)+ R/W(R=0,1bit)
    • –> 主机 RA
    • –> 主机接收 data 8bit
    • –> 主机 发送应答 SA

示例代码