【紫光同创国产FPGA教程】【PGL50H第三章】I2C 读写实验例程

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处
适用于板卡型号:

紫光同创PGL50H开发平台(盘古50K)

一:盘古50K开发板(紫光同创PGL50H开发平台)简介

盘古50K开发板(紫光同创Logos系列PGL50H关键特性评估板)采用核心板+扩展板的结构,并使用高速板对板连接器进行连接。

核心板由 FPGA+2 颗 DDR3+Flash+电源及复位构成,承担 FPGA 的最小系统运行及高速数据处理和存储的功能。FPGA 选用紫光同创 40nm 工艺的 FPGA(logos 系列:PGL50H-6IFBG484)。PGL50H 和 DDR3 之间的数据交互时钟频率最高到 400MHz,2 颗 DDR3 的数据位宽为 32bit,总数据带宽最高 25600(800×32)Mbps,充分满足高速多路数据存储的需求。

PGL50HFPGA带有4路HSST高速收发器,每路速度高达 6.375Gb/s,适合用于光纤通信和PCIe数据通信;电源采用多颗 EZ8303(艾诺)产生不同的电源电压。底板为核心板扩展丰富的外围接口, 预留 HDMI 收发接口用于图像验证及处理;预留的光纤接口、10/100/1000M 以太网接口,PCIE 接口,方便各类高速通信系统验证;预留一个 40pin 的 IO 扩展连接器,方便用户在开发平台基础上验证模块电路功能。

二、实验目的

实验在 EEPROM 的 8’b0 地址写入 8bit 数据 8’b10101010,按下 KEY2 表示写,再按下 KEY4 触发写开始;按下 KEY3 表示在 8’b0 地址读,再按下 KEY4 触发读开始,将读出的数据 以二进制形式用 LED 灯显示,按下 KEY1 使 LED 恢复为全灭状态。

三、实验原理

1.IIC 协议简介

IIC 是一种两线式串行总线,由数据线 SDA 和时钟线 SCL 构成通信线路,属于半双工通信 方式。所有接到 I2C 总线上的设备的串行数据 SDA 都接到总线的 SDA 上,各设备的时钟线 SCL 接到总线的 SCL 上。

IIC 总线上每一个设备都有唯一地址,通过“唯一地址”进行寻址通信。并且数据传输过 程中还必须有应答信号,所以 SDA 数据线是双向的。

 

传输速率:标准模式下可达 100Kbit/s,快速模式下可达 400Kbit/s,高速模式下可达 3.4Mbit/s

2.IIC 时序实现

在空闲状态下,SCL 和 SDA 都为高电平。SCL 输出高电平时,SDA 由高到低变化为开始传 输标志。SCL 为高电平,SDA 再出现上升沿,表示传输结束

 

时序要求:

 

 

 

本实验采用 400Kbit/s 的传输速率,所以 SCL 的频率应设置为 400KHz,切占空比为 50%, 即 tHIGH=1250ns,tLOW=1250ns;

为满足上表中的时序要求,设计一 SCL 周期计数器,在计数器上取 4 个位置:  

SCL 变化点为 scl_cnt 计数器的“half”处和“full”处; SDA 变化点为 scl_cnt 计数器的“dsu”处。

3.IIC 读写操作流程

Byte Write:

Device Address Byte

主设备每传输 8bit 数据需释放 SDA,接收来自从设备的 ACK 应答信号。 Byte Write: 开始第一个字节都为从设备的 device ID:

 

Device Address Byte 的最低位若为“0”表示“写”,若为“1”则表示“读”。 第二个字节是写地址的字节:

 

第三个字节是写数据的字节。其中 Device Address Byte 的 A2、A1和 A0与硬件连接相关:

 

因此,开发板上的 EEPROM 的 device ID 为:7’b1010000;

Random Read:

 

读操作的过程中,先进行 Dummy Write,此部分与写操作类似,不管读或者写,主机首先是要找到从机, 然后指明要读或者写的地址。

Dummy Write 之后,主设备再发送一次从设备 Device Address Byte,最低位为“1”表示读, Data Word 表示读取从设备数据。 IIC 的读写操作流程可总结为:

4.IIC 读写操作流程的状态机实现

 

默认 IDLE 状态,若接收到开始触发信号,则跳转到 Start 状态;

Start 状态下,在计数器计到 full_cycle 跳转到 send_byte 状态;

send_byte 状态下,发送完 8bit 数据时跳转到 s_ack 状态,接收从设备的应答信号; s_ack 状态下:若为写操作,byte 数未发送完成(ID+ADDR+DATA),则跳转到 send_byte 继续发送下一 byte,若 byte 数已发送完成,则跳转到 stop 状态;若为读操作,Dummy Write 阶段的 byte 数(ID+ADDR) 未发送完成则跳转到 send_byte 状态继续发送下一 byte,Dummy Write 阶段的 byte 数(ID+ADDR)发送完 成则跳转到 Start 状态再重新发送一次 device ID,第二次发送完成 device ID 后接收 ack 信号,从 s_ack 状态跳转到 reve_byte 状态。 

reve_byte 状态下,若接收完 8bit 数据则跳转到 rack 状态;

rack 状态下,若需要接收多 byte 数据,为接收完所有 byte 则需要跳转回 reve_byte 状态,若接收完 成所有 byte,接收完 ack 应答信号后跳转到 stop 状态;

Stop 状态下,完成 IIC 传输结束标志后跳转到 IDLE 空闲状态;

IIC 读写操作流程的状态机实现,verilog 代码详见参考工程。

四、实验源码

实验代码主要框架如下:

KEY1 按下表示复位,KEY2 按下后 wr 信号为 1,表示写;KEY3 按下后 wr 信号为 0,表示 读;KEY4 按下表示 IIC 写/读触发开始。 verilog 代码详见参考例程。

五、实验现象

KEY1 为复位按键;

写数据:按下 KEY2 后再按一次 KEY4 开始写入 1byte 数据,代码中固定在 8’b0 地址, 写入 8'b10101010 数据,可在顶层文件 iic_top 中修改此值,如下图:

 读数据:按下 KEY3 再按一次 KEY4,从上一次写入的地址中读出数据,LED 灯的状态为 写入的数据 8'b10101010。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值