I2C学习

串行半双工,每个IIC器件都有一个地址,通信速率(100kb/s —— 3.4Mb/s).

它只有两根双向信号线。一根是数据线SDA(serial data I/O),另一根是时钟线SCL(serial clock)。 

1 数据位的有效性规定:

SCL为高电平期间,数据线上的数据必须保持稳定,只有SCL信号为低电平期间,SDA状态才允许变化。如图所示 

2.I2C的起始和终止信号

SCL线为高电平期间,SDA线由电平向电平的变化表示起始信号; 
SCL线为高电平期间,SDA线由电平向电平的变化表示终止信号; 

3.I2C字节的传送与应答

数据传送时高位在前,低位在后,每次传送的字节数目没有限制。传输操作启动后主控制器件传输的第一字节是地址,其中前面7位指出与哪一个器件进行通信,第8位指出数据传输的方向(发送还是接收)。

为了完成一字节的传送,接收方应该发送一个确认信号ACK给发送方,ACK信号出现在SCK线的第9个时钟脉冲上,有效应答ACK在SDA上呈现低电平,如图。

主控制器件在接收了来自从器件的字节后,如果不准备终止数据传输,他将会发送1个ACK信号给从器件。从器件在其接收到来自主控制器件的字节时,总是发送1个ACK信号给主控制器件,如果从器件还没有准备好再次接收,它可以保持SCK位低电平(总线处于等待状态),直到它准备好为止。

这里写图片描述

时序的要求

  • 当 SCL 在低电平的时候, SDA 允许变化,也就是说,发送方必须先保持 SCL 是低电平,才可以改变数据线 SDA,输出要发送的当前数据的一位;
  • 当 SCL 在高电平的时候, SDA 绝对不可以变化,因为这个时候,接收方要来读取当前 SDA 的电平信号是 0 还是 1,因此要保证 SDA 的稳定,

4.应答位的作用

主机在发送数据时,每次发送一字节数据,都需要读取从机应答位,当从机空闲可以接收该字节数据时,从机会发出应答(一帧数据的第9位为“0”),当从机正忙于其他工作的处理来不及接收主机发送的数据时,从机会发出非应答(一帧数据的第9位为“1”)主机则应发出终止信号以结束数据的继续传送,主机通过从机发出的应答位来判断从机是否成功接收数据.

当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。 

5 I2C是如何通信的?

s5pv210是发送或接受数据是如何区分多个子设备?可以看下图:开始通信以后,主设备首先会发送7bit位的slave device地址,和1bit位的rean或者write命令, 
(1)如果为write命令,则主设备free SDA通信线即SDA 为高位。然后从设备先ACK主设备(拉低SDA)表示收到命令(S)。然后主设备在发送8bit数据,从设备在ACK(A)。然然后结束(P)。 
(2)如果为read命令,则从设备先ACK主设备(拉低SDA),然后发送8bit数据,主设备ACK从设备(拉低SDA),从设备在发送,直到主设备停止接收。 
如下图所以,白色bit位为主设备发送,灰色bit位为从设备发送。 

这里写图片描述

6 I2C总线的仲裁机制

https://blog.csdn.net/u010027547/article/details/47779975

总线控制遵循“低电平优先”的原则,即谁线发送低电平谁就会掌握对总线的控制权;主控制器通过检测SDA上自身发送的电平来判断是否发生总线仲裁。因此,IIC总线的总线仲裁是考器件自身接口的特殊结构得以实现的。

猜你喜欢

转载自blog.csdn.net/QQ2558030393/article/details/94718922
I2C