低速通信接口(二)I2C

I2C引脚定义:都是双向I/O线,接口电路为开漏输出,需通过上拉电阻接电源。当总线空闲时,两根线都是高电平,连到总线上的任一器件输出的低电平,都将使总线的信号变低。

  • SDA(串行数据线)
  • SCL(串行时钟线)
    在这里插入图片描述
    二、数据有效性
    I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化
  • scl处于高电平的时候,如果sda处于低电平:传输数据0,sda处于高电平:传输数据1
  • 在scl处于高电平的时候,sda用来传输数据,必须保持电平稳定
  • 如果要产生数据即sda需要变化时,只能在scl处于低电平的时候

起始信号与终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;
SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
(连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号,若接受器件需要等待,可以先将SCL拉成低电平,从而使主机处于等待状态,直到接受器件准备好,再释放SCL线为高电平,使数据传送可以继续进行)
在这里插入图片描述
数据传输格式,7-bit寻址数据传输
(1)字节的传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)
在这里插入图片描述

  1. 由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。
  2. 如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”【sda处于高电平】通知主机,主机则应发出终止信号以结束数据的继续传送。
  3. 当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”【拉高sda】来实现的。然后,从机释放SDA线,以允许主机产生终止信号

数据帧格式
I2C总线上传送的数据信号是广义的,即包括地址信号,又包括真正的数据信号。
在起始信号后必须传送一个从机的地址(7位),第8位数数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。在总线的一次数据传送过程中,可以有以下几种组合方式:
a) 主机向从机发送数据:
在这里插入图片描述
在这里插入图片描述
注1:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。

A表示应答, A非表示非应答(高电平)。S表示起始信号,P表示终止信号。

注2:I2C总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始信号后的第一个字节)

b) 主机从从机中读取数据
在这里插入图片描述
在这里插入图片描述
c)主机从从机中既有读数据也有写数据
在这里插入图片描述
10-bit寻址数据传输
采用10位地址位扩充了I2C的地址范围,7位和10位地址设备都可以共存于同一个I2C总线系统(但是使用10位的I2C设备不多)
10位从机地址由START或者Repeated Start 后两个字节决定。第一个字节的前7位格式为1111 0XX,其中XX代表10位地址最高两位(MSB),第一个字节的第8位代表R/W位。
(1)主机写数据-从机接收,传输方向不变
在这里插入图片描述
(2)主机读数据-从机发送,传输方向改变

在这里插入图片描述

发布了64 篇原创文章 · 获赞 5 · 访问量 3205

猜你喜欢

转载自blog.csdn.net/buzhiquxiang/article/details/103553366
今日推荐