PYNQ I2C原理

I2C协议

实现了双工的同步数据传输。具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线 上,通过地址来识别通信对象。

物理拓扑结构

在这里插入图片描述
1、I2C总线具有两根双向信号线,一根是串行数据线SDA,另一根是时钟线SCL

2、IIC总线上可以挂很多设备:多个主设备,多个从设备(外围 设备)。

3、I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。

4、上拉电阻一般在4.7k~10k之间,IIC总线上设备都释放总线(发出传输停止)后,IIC总线根据上拉电阻变成高电平,SDA SCL都是高电平。

5、每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传输可以是由主机发送数据到其它器件,这时主机 即为发送器,总线上收数据的器件则为接收器。

2 IIC总线时序

2.1 信号类型

  • 起始信号

    • IIC总线SCL高电平时SDA出现由高到低的跳变,标志总线上数据传输的开始条件
  • 终止信号

    • IIC总线SCL高电平时SDA出现由低到高的跳变,标志总线上数据传输的结束条件
  • 应答信号

    • 拉低SDA一个时钟,作为回应ACK

在这里插入图片描述

2.2 数据传输

1、起始信号、终止信号都是由主机发送的。在起始信号产生之后(0),总线就处于被占用的状态,在终止信号产生之后,总线就处于空闲状态(1)。连接到I2C总线上的从器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。

  • 在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。

2、接收端通过拉低SDA数据线,给发送端发送一个应答信号,以提醒发送端我这边已经接受完成,数据可以继续传输,接下来,发送端就可以继续发送数据了。

  • 每次发到SDA上的必须是8位,并且主机发送8位后释放总线,从机收到数据后必须拉低SDA一个时钟,回应ACK表示数据接收成功,我们如果示波器上看到的波形就是每次9位数据,8bit+1bit ack。如下:

  • IIC总线上数据传输是MSB在前,LSB在后,从示波器上看,从左向右依次读出数据即可

在这里插入图片描述
3、每当发送器传输完一个字节的数据之后,发送端会等待一定的时间,等接收方的应答信号
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.3 寻址

在前面我们还提到过,I2C总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输之前要先指定从设备的地址

地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,

协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。
向指定设备发送数据的格式如图所示:(每一最小包数据由9bit组成,8bit内容+1bit ACK, 如果是地址数据,则8bit包含1bit方向)
在这里插入图片描述

注:主机做的都是编程控制,从机做的都是自主控制,也可以说是硬件控制, 如主机给应答信号是编程控制,但是从机给应答信号是硬件控制,我们只需要检查在SDA为高期间,SCL保持低电平一些时间,即可判定从机给了主机应答信号

2.4 总线操作三类方式

(1)、主机向从机发送数据,数据传送方向在整个传递过程中不变,数据传输格式如下:
在这里插入图片描述
(2)、主设备从从设备中读数据。数据传送方向在整个传递过程中不变,数据传输格式如下:
在这里插入图片描述

(3)、数据传送方向改变

主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:
在这里插入图片描述

第三种操作在单个主设备系统中,重复的开启起始条件机制要比用STOP终止传输后又再次开启总线更有效率。

发布了466 篇原创文章 · 获赞 279 · 访问量 75万+

猜你喜欢

转载自blog.csdn.net/qq_35608277/article/details/105306957
今日推荐