IIC总线协议

文章目录

  • IIC简介
  • 硬件需求
  • 数据传输
    • 主机往从机写入数据
    • 主机从从机中读取数据
  • IIC总线状态
    • 空闲状态 ==同时为高电平及为总线空闲状态==
    • 起始状态和结束状态
    • 有效数据位传输
    • 应答信号和非应答信号
  • 读写时序时的总线状态
    • 主机往从机里面写数据(主机每发送一次数据都要接受应答信号)
    • 主机读取从机数据

IIC简介

IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线

硬件需求

两根信号线——SDA,SCL
其中SDA为双向的数据信号线,SCL为时钟信号线
主从设备还需要连接同样的供电VCC和地线

数据传输

当SCL保持“高”时,SDA由“高”变为“低”为开始条件;
当SCL保持“高”时,SDA由“低”变为“高”时为停止条件
SDA线上的数据在SCL“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。SCL高电平期间为传输的数据位

支持多主控(multimastering)//需要附加选择控制器让SCL,SDA线分为多个连接线, 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控占用IIC总线。

主机往从机写入数据

1、 主机发送一个起始信号和从机的设备地址给从机
2、 主机发送数据给从机
3、 主机发送一个停止信号结束发送过程

主机从从机中读取数据

1、 主机发送一个起始信号和从机的设备地址给从机
2、 主机发送一个要读取的地址给从机
3、 主机从从机接收数据
4、 主机发送一个停止信号给从机结束整个接收过程

IIC总线状态

空闲状态 同时为高电平及为总线空闲状态

IIC 总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

起始状态和结束状态

在时钟线 SCL 保持高电平期间,数据线 SDA 上的电平被拉低(即负跳变),定义为 I2C 总线总线的起始信号,它标志着一次数据传输的开始。起始信号是由主控器主动建立的,在建立该信号之前 I2C 总线必须处于空闲状态。
  在时钟线 SCL 保持高电平期间,数据线 SDA 被释放,使得 SDA 返回高电平(即正跳变),称为 I2C 总线的停止信号,它标志着一次数据传输的终止。停止信号也是由主控器主动建立的,建立该信号之后,I2C 总线将返回空闲状态。
IIC总线协议_第1张图片

有效数据位传输

在 IIC 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,数据在 SDA 上从高位向低位依次串行传送每一位的数据。进行数据传送时,在 SCL 呈现高电平期间,SDA 上的电平必须保持稳定,低电平为数据 0,高电平为数据 1 SDA上的额数据表示传输的数据位,只有在 SCL 为低电平期间,才允许 SDA 上的电平改变状态。
IIC总线协议_第2张图片
其中MSB(most significant bit),最高有效位;LSB(lowest significant bit)最低有效位

应答信号和非应答信号

I2C 总线上的所有数据都是以 8 位字节传送的,发送器(主机)每发送一个字节,就在第9个时钟脉冲期间释放数据线,由接收器(从机)反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。对于反馈有效应答位 ACK 的要求是,接收器在第 9 个时钟脉冲之前的低电平期间将 SDA 线拉低,并且确保在该时钟的高电平期间为稳定的低电平。//第9位为从机反馈的应答信号,若为高电平则没有接受成功
IIC总线协议_第3张图片

读写时序时的总线状态

主机往从机里面写数据(主机每发送一次数据都要接受应答信号)

主机通过IIC总线往从机中写数据的时候,主机首先会发送一个起始信号,接着把IIC从机的7位设备地址后面添一个0(设备地址后面的0表示主机向从机写数据,1表示主机从从机中读数据)组成一个8位的数据,把这个8位的数据发给从机,发完这8位的数据以后主机马上释放SDA信号线等待从机的应答,如果从机正确收到这个数据,从机就会发送一个有效应答位0给主机告诉主机自己已经收到了数据,主机收到从机的有效应答位以后 ,接下来主机会发送想要写入的寄存器地址,寄存器发送完毕以后主机同样会释放SDA信号线等待从机的应答,从机如果正确收到了主机发过来的寄存器地址,从机会再次发送一个有效应答位给主机,主机收到从机的有效应答位0以后,接下来主机就会给从机发送想要写入从机的数据,从机正确收到这个数据以后仍然像之前两次一样会给主机发送一个有效应答位,主机收到这个有效应答位以后给从机发送一个停止信号,整个传输过程就结束了。
IIC总线协议_第4张图片
开启总线——》从机地址(7位+1//读写信号)——》从机中寄存器地址(8位)——》想要写入的数据(8位)——》释放总线

主机读取从机数据

主机通过IIC总线从从机中读数据的过程与写数据的过程有相似之处,但是读数据的过程还多了一些额外的步骤。主机从从机读数据时主机首先会发送一个起始信号,接着把IIC从机的7位设备地址后面添一个0(设备地址后面的0表示主机向从机写数据,1表示主机从从机中读数据),把这个8位的数据发给从机,发完这8位的数据以后主机马上释放SDA信号线等待从机的应答,如果从机正确收到这个数据,从机就会发送一个有效应答位0给主机告诉主机自己已经收到了数据,主机收到从机的有效应答位以后 ,接下来主机会发送想要读的寄存器地址,寄存器发送完毕以后主机同样会释放SDA信号线等待从机的应答,从机如果正确收到了主机发过来的寄存器地址,从机会再次发送一个有效应答位给主机,主机收到从机的有效应答位0以后,主机会给从机再次发送一次起始信号,接着把IIC从机的7位设备地址后面添一个1(设备地址后面的0表示主机向从机写数据,1表示主机从从机中读数据),注意,第一次是在设备地址后面添0,这一次是在设备地址后面添1,把这个8位的数据发给从机,发完这8位的数据以后主机马上释放SDA信号线等待从机的应答,如果从机正确收到这个数据,从机就会发送一个有效应答位0给主机告诉主机自己已经收到了数据,接着从机继续占用SDA信号线给主机发送寄存器中的数据,发送完毕以后,主机再次占用SDA信号线发送一个非应答信号1给从机,主机发送一个停止信号给从机结束整个读数据的过程。
IIC总线协议_第5张图片
开启总线——》从机地址(写入信号)——》写入想要读取的寄存器地址——》再次开启总线信号——》从机地址(读取信号)——》从机占用总线,写入想要读取寄存器中的数据——》主机发送应答信号(NACK)——》关闭总线

你可能感兴趣的:(总线协议)