[FPGA] IIC I2C 通信协议

目录

  • 简介
  • 帧结构
  • 信号实现
    • 起止条件
    • 有效数据
  • 通信过程
    • 发送
    • 接收
  • 代码实现
    • 模块示例
    • 代码思路
    • 代码获取
    • 时序分析
      • 发送时序
      • 接收时序
  • 同步与裁决
    • 时钟同步
    • 冲突裁决

简介

I 2 ^2 2C(又称I2C、IIC)协议,是一种同步串行半双工通信协议,只需要两根数据线(SCL、SDA)就可以实现多设备通信,同时具有完备的应答机制。

帧结构

一种常用帧结构

S1 A6 A5 A4 A3 A2 A1 A0 W/R A R7 R6 R5 R4 R3 R2 R1 R0 A D7 D6 D5 D4 D3 D2 D1 D0 A S0

帧内数据说明

S1 A6~A0 W/R A R7~R0 D7~D0 S0
起始位 设备地址 读写标志 应答位 寄存器地址 数据位 字节数不限 结束位

实际上,帧结构和设备有关,具体帧结构必须根据设备要求选择

信号实现

起止条件

[FPGA] IIC I2C 通信协议_第1张图片

有效数据

[FPGA] IIC I2C 通信协议_第2张图片

通信过程

以读写EEPROM为例。

发送

单字节地址发送单字节数据流程:
1、主机发送起始位,从机准备
2、主机发送设备地址和写命令,目标从机应答,其他从机进入空闲状态
3、主机发送存储地址,目标从机应答
4、主机发送数据,目标从机写入存储单元后应答
5、主机发送结束位,目标从机进入空闲

接收

单字节地址读取单字节数据流程:
1、主机发送起始位,从机准备
2、主机发送设备地址和写命令,目标从机应答,其他从机进入空闲状态
3、主机发送存储地址,目标从机应答
4、主机发送起始位,目标从机准备
5、主机发送设备地址和读命令,目标从机应答
6、从机发送数据,主机应答则从机继续发送数据,不应答则结束发送
7、主机发送结束位,目标从机进入空闲

代码实现

模块示例

只能单字节读写,若需要页读写请加控制信号one_byte_en。

[FPGA] IIC I2C 通信协议_第3张图片

部分引脚说明

引脚名 类型 作用
start input 为1时表明开始通讯
high_addr input 为1时表明存储地址为两字节

其他引脚命名已包含足够信息,不再赘述。

代码思路

状态转换图
[FPGA] IIC I2C 通信协议_第4张图片

代码获取

HTTPS https://github.com/Ernest789/IIC-protocol.git
SSH [email protected]:Ernest789/IIC-protocol.git

时序分析

以单字节读写为例。

发送时序

[FPGA] IIC I2C 通信协议_第5张图片

起始位、设备地址、读写标志(写)、应答位

[FPGA] IIC I2C 通信协议_第6张图片
存储地址、应答位

[FPGA] IIC I2C 通信协议_第7张图片
写入数据、应答位、停止位

[FPGA] IIC I2C 通信协议_第8张图片

接收时序

[FPGA] IIC I2C 通信协议_第9张图片

起始位、设备地址、读写标志(写)、应答位

[FPGA] IIC I2C 通信协议_第10张图片
存储地址、应答位

[FPGA] IIC I2C 通信协议_第11张图片
读起始位、设备地址、读写标志(读)、应答位

[FPGA] IIC I2C 通信协议_第12张图片
读取数据、非应答位、结束位

[FPGA] IIC I2C 通信协议_第13张图片

同步与裁决

时钟同步

[FPGA] IIC I2C 通信协议_第14张图片

冲突裁决

[FPGA] IIC I2C 通信协议_第15张图片
待续。。。

你可能感兴趣的:(fpga开发)