FPGA视角--I2C接口

I2C接口特性

2根线

SDA串行数据线(双向数据线)
SCL串行时钟线(必须由主设备发出)

串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。

FPGA与I2C设备之间的总线关系结构

FPGA视角--I2C接口

举例说明

I2C协议的通信参数包括设备驱动号,地址和数据;

  1. 设备驱动号用来区分总线中不同的驱动设备;
  2. 地址和数据没有固定位宽,一般是以字节作为单位,也就是8个bit。编写FPGA逻辑时,需依据驱动设备手册中的规则编写。

下面举个EEPROM的例子来说明一下I2C的通信过程,型号为AT24C256C,FPGA做主控制器。
该例子中的EEPROM是16位地址寻址,8位数据传输;支持任意单地址的字节读写及页读写。

FPGA视角--I2C接口
这里A0、A1、A2是硬件外部拉死的,作为设备寻址的一部分。

基本时序

总线时序的基本要求中,SDA的数据状态需要在SCL高电平时保持,变化应发生在SCL的低电平时。
FPGA视角--I2C接口
上图中可以看出总线中的4类动作:开始数据传输停止应答

  1. 开始动作:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据;
  2. 结束动作:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据;
  3. 数据传输动作:在开始条件以后,时钟信号SCL的高电平周期期问,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作。在时钟信号SCL的低电平周期期间,数据线上数据才允许改变。每位数据需要一个时钟脉冲。
  4. 应答动作:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。FPGA向受控单元发出一个信号后,等待受控单元发出一个应答信号,FPGA接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

一个完整的字节写时序

FPGA视角--I2C接口

一个完整的字节读时序

FPGA视角--I2C接口