秦韵FPGA 转载或原创(八)
基于高云fpga ------ GW2A18
1.spi接口的flash操作
2.flash 的控制逻辑介绍
3.flash 控制器的端口介绍
4.控制ip简介
(一)flash命令介绍
spi接口在之前的博客中有介绍,flash的控制就是4线的spi接口,然后通过寄存器的地址实现。在这里简单的放一下W25Q64器件及其引脚:
芯片的端口见手册,简单的贴一下w25Q64的寄存器表,如果要实现读写,可以通过控制flash Ctrl ip 模块实现,后面介绍模块功能,及其port定义。
(二)控制器ip介绍
flash的控制ip模拟了高云的ip风格,主要是通过操作命令和地址来实现flash的读写。
##### (三)端口介绍
dirt | bit | signal | direction |
---|---|---|---|
input | clk | 主时钟 | |
input | rst_n | 复位,低电平有效 | |
output | flash_sclk | flash 时钟 | |
output | flash_ncs | flash cs | |
output | flash_sdo | flash 数据输出 | |
input | flash_sdi | flash 数据输入 | |
input | ctrl_cmd_ready | 写命令有效信号 | |
input | [2:0] | ctrl_cmd | 写命令 |
input | ctrl_wr_enable | 写使能 | |
input | [7:0] | ctrl_wr_din | 写数据 |
input | [23:0] | ctrl_wr_addr | 写地址 |
input | ctrl_rd_enable | 读使能 | |
output | [7:0] | ctrl_rd_dout | 读数据输出 |
output | ctrl_rd_ready | 读数据有效 | |
input | [23:0] | ctrl_rd_addr | 读地址 |
input | ctrl_era_enable | 擦除使能 | |
input | [23:0] | ctrl_era_addr | 擦除地址 |
input | ctrl_wf_enable | 查询是否空闲使能 | |
output | ctrl_wf_free | 是否空闲标志 | |
input | ctrl_id_enable | 读id使能 | |
output | [15:0] | ctrl_id_dout | flash id |
output | ctrl_init_done | 初始化完成 |
(四)操作简介
4.1 初始化
等待ctrl_init_done 拉高,可以操作flash控制器。
4.2 读数据
首先写cmd寄存器,将ctrl_cmd_ready信号拉高,将cyrl_cmd写入,然后使能读控制信号,即ctrl_rd_enable,ctrl_rd_addr,等待ctrl_rd_ready 信号拉高,
可以进行接收数据。
4.3 写数据
首先写cmd寄存器,将ctrl_cmd_ready信号拉高,将cyrl_cmd写入,然后使能读控制信号,即ctrl_wr_enable,ctrl_wr_addr,ctrl_wr_din,然后可进行连续写数据
操作,该ip暂不支持突发写操作,也可进行其他操作。
4.4 读id
首先写cmd寄存器,将ctrl_cmd_ready信号拉高,将cyrl_cmd写入,然后使能读id信号,即ctrl_id_enable,等待ctrl_wf_free为高,可查看ctrl_id_dout寄存器,
得到flash id号,然后可以做其他操作。
4.5 读空闲
首先写cmd寄存器,将ctrl_cmd_ready信号拉高,将cyrl_cmd写入,然后使能读空闲控制信号,即ctrl_wf_enable,等待ctrl_wf_free为高,然后可以做其他操作。
4.6 擦除扇区
首先写cmd寄存器,将ctrl_cmd_ready信号拉高,将cyrl_cmd写入,然后使能擦除扇区控制信号,即ctrl_era_enable,ctrl_era_addr,等待擦除完成,通过查询空闲寄存器
来获得是否擦除完成。
(五)ip手册(暂定第一版)
不能传文件,暂时介绍这么多吧。