FPGA视角--I2C接口
I2C接口特性
2根线
SDA串行数据线(双向数据线)
SCL串行时钟线(必须由主设备发出)
串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。
FPGA与I2C设备之间的总线关系结构
举例说明
I2C协议的通信参数包括设备驱动号,地址和数据;
- 设备驱动号用来区分总线中不同的驱动设备;
- 地址和数据没有固定位宽,一般是以字节作为单位,也就是8个bit。编写FPGA逻辑时,需依据驱动设备手册中的规则编写。
下面举个EEPROM的例子来说明一下I2C的通信过程,型号为AT24C256C,FPGA做主控制器。
该例子中的EEPROM是16位地址寻址,8位数据传输;支持任意单地址的字节读写及页读写。
这里A0、A1、A2是硬件外部拉死的,作为设备寻址的一部分。
基本时序
总线时序的基本要求中,SDA的数据状态需要在SCL高电平时保持,变化应发生在SCL的低电平时。
上图中可以看出总线中的4类动作:开始、数据传输、停止及应答。
- 开始动作:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据;
- 结束动作:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据;
- 数据传输动作:在开始条件以后,时钟信号SCL的高电平周期期问,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作。在时钟信号SCL的低电平周期期间,数据线上数据才允许改变。每位数据需要一个时钟脉冲。
- 应答动作:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。FPGA向受控单元发出一个信号后,等待受控单元发出一个应答信号,FPGA接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。