iic通信协议

  • Post author:
  • Post category:其他




iic通信协议



一.iic通信原理

在这里插入图片描述

IIC通信协议采用2条信号线,1条时钟线(SCL)和1条数据线(SDA),属于串行半双工通信。标准模式的传输速率为100Kb/s,快速模式为400Kb/s。总线上可以接多个从设备,从设备的地址必须不同。也可也接多个主设备,但同一时刻只能有一个主设备控制总线。最大设备数量受总线的最大负载电容400pf限制。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

在这里插入图片描述

IIC总线上有两种状态,一种是MOS管导通总线被拉低,另外一种是MOS关断总线被上拉电阻拉高,如下图所示

在这里插入图片描述

IIC的一些特点:


  • IIC是半双工,而不是全双工

  • IIC是真正的多主机总线

    ,(对比SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏

  • 起始和终止信号都是由主机发出的

    ,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号


  • 起始信号后

    必须发送一个

    7位从机地址+1位方向位

    ,用“0”表示主机发送数据**,**“1”表示主机接收数据。
  • 每当主机向从机发送完一个字节的数据,

    主机总是需要等待从机给出一个应答信号

    ,以确认从机是否成功接收到了数据

  • 起始信号是必需的

    ,结束信号和应答信号,都可以不要




:实际使用中,

一般是单片机作为主机,其它器件作为从机

,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。

在这里插入图片描述

在这里插入图片描述

  • 起始:时钟线SCL为高时,数据线SDA由高到低

  • 停止:时钟线SCL为高时,数据线SDA由低到高

  • 开始标志(S)发出后,主设备会传送一个7 位的地址,并且后面跟着一个第8位,称为Read/Write 位。

  • R/W 位表示主设备是在接受从设备的数据还是在向其写数据。

  • 然后,主设备释放SDA 线,等待从设备的应答信号(ACK)。每个字节的传输都要跟随有一个应答位。

  • 应答产生时,从设备将SDA 线拉低并且在SCL 为高电平时保持低。

  • 数据传输以停止标志(P)结束,然后释放总线。但主设备也可以产生重复的开始信号去操作另一台从设备,而不发出结束标志。


  • 所有的SDA 信号变化都要在SCL 时钟为低电平时进行,除了开始和结束标志

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下面这张图是通过示波器抓取的IIC波形,可以看到:

  • 时钟线SCL是一种间歇性的方波(需要通信时才产生方波)
  • 数据线SDA根据SCL提供的节拍,高电平代表数据1,低电平代表数据0
  • 没有数据传输时,SDA和SCL均为高电平状态
  • 起始信号后,数据是9个一组,包括8位的数据和另一方的1位回应

图中

红色数字表示单片机发送的8位数据,黄色数字表示IIC器件回应的信号

,低电平0表示器件收到了单片机发来的数据。

总的来说,iic通信协议是一种串行半双工的通信协议,它有两根总线,一根数据线,一根时钟线。


iic通信

  1. 先由主机发送一个起始信号启用总线(时钟线为

    高电平

    ,数据线

    由高到低

    )。
  2. 然后主机发送一个地址(

    7位

    ),指明要通信的从机,然后发送一个方向位(

    1位

    ),用“0”表示主机发送数据**,**“1”表示主机接收数据。从机发送应答信号(

    1位

    )。(

    时钟线为低电平时是主机向总线上写数据,时钟线为高时是从机从总线上读数据,通常情况下iic一次发送

    9

    位,起始状态下是

    7

    位地址+

    1

    位方向+应答,发送数据状态下是

    8

    位数据+

    1

    位应答,有时从机不应答,就意味着通信结束

    )。
  3. 通信结束,发送停止信号,释放总线(时钟线为

    高电平

    ,数据线

    由低到高

    )。

在这里插入图片描述



版权声明:本文为weixin_62922370原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。