FPGA读写Flash模块 Verilog程序设计
采用黑金Spartan6的开发板,板内的硬件电路设计如图
电路严格按照datasheet的规定连接。
按照上图 控制FLASH芯片仅需要控制QSPI_MIS0、QSPI_MIS1、QSPI_MIS2、QSPI_MIS3以及QSPI_CS、QSPI_CLK
按照程序实现的功能需要
1. 读Manufacturer / Device ID (90h):先发送命令字90(1001 0000),再发送24位的地址(全0),然后接收2个byte的数据(第一个数据是Manufacturor:FEh,第二个是设备的Device ID:17h)。数据在时钟的上升沿采样。
2.写使能(06):发送命令字06(0000 0110),数据都在时钟的上升沿采样。
3.写不使能(04):发送命令字04(0000 0100),数据都在时钟的上升沿采样。
4.Sector擦除(20):先发送命令字20(0010 0000),再发送24位的地址。数据都在时钟的上升沿采样。
5.读状态寄存器1 (05):先发送命令字05(0000 0101),然后接收16位的寄存器数据。数据都在时钟的上升沿采样。
6. Page编程(02):先发送命令字02(0000 0010),再发送24位的地址,然后写入256个编程的数据(数据的数量可以自己修改, 但不能超过256个)。数据都在时钟的上升沿采样。
7. 数据读(03):先发送命令字03(0000 0011),再发送24位的地址,然后接收数据。数据在时钟的上升沿采样。
根据时序图只需要用到IO0、IO1发送命令,命令都是8个二进制数,需要8个clk。
顶层的电路设计图FLASH_TEST
flash_test内部采用flash_spi模块实现数据的传输
flash_spi使用状态机控制逻辑。cmd_type[3:0]为自定义编码,用于区分不同的操作。
接收flash的数据的程序,接收read_num个数的byte数据。
需要设计的控制标志有:
开始读写标志 datacome
bit的计数标志 cntb
byte计数标志 read_cnt
数据输出有效标志 myvaild
结束标志 read_finish
*****通过移位操作接收数据*****
mydata <= {mydata[6:0],flash_out};
完成上述后,我们就完成了flash的控制器,下面用小例子来使用我们的控制器。
通过简易的状态机完成状态的跳转,下面的操作完全按照协议即可。
i=0:读FLASH的Device ID;
4'd0 :
if( Done_Sig ) begin
flash_cmd <= 8'h00;
i <= i + 1'b1; cmd_type <= 4'b0000;
end else begin flash_cmd <= 8'h90;
flash_addr <= 24'd0;
cmd_type <= 4'b1000;
end
i=1:发送FLASH写使能命令;
4'd1:
if( Done_Sig ) begin
flash_cmd <= 8'h00;
i <= i + 1'b1;
cmd_type <= 4'b0000;
end
else begin
flash_cmd <= 8'h06;
cmd_type <= 4'b1001;
end
其余同理。
i=2:发送Sector擦除命令,擦除从地址0开始的4KB的数据;
i=3:等待100个clock;
i=4:读状态寄存器的数据,等待Busy标志位为0;
i=5:发送FLASH写不使能命令;
i=6:读状态寄存器的数据,等待Busy标志位为0;
i=7:发送FLASH写使能命令;
i=8:等待100个clock;
i=9:发送FLASH编程命令,从地址0开始写入256个数据(0~255);
i=10:等待100个clock;
i=11:读状态寄存器的数据,等待Busy标志位为0;
i=12:发送FLASH写不使能命令;
i=13:读状态寄存器的数据,等待Busy标志位为0;
i=14:发送FLASH读命令,读取256个数据;
i=15:结束;
flash_cmd 传输控制字
flash_addr 24位传输地址
cmd_type为自定义编码的操作代码
之后根据协议控制flash进行相应的读写操作
FPGA读写Flash模块 Verilog程序设计相关推荐
- FPGA 读写访问 Flash
目录 前言 1.AT25DF641A flash芯片简介 2.AT25DF641A flash读访问时序 3.AT25DF641A flash写访问时序 (1)关于Protect Sector (2) ...
- FPGA学习之路—接口(1)—URAT Verilog程序设计
FPGA学习之路--URAT Verilog程序设计 UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是广泛使用的异步串行数据通信协议 ...
- FPGA接口_N25Q128型号的spi flash驱动verilog代码编写
# N25Q128型号的spi flash驱动verilog代码编写 提示:使用正点原子达芬奇pro做的小例子,由于教程中无flash的读写,因此撰写记录 文章目录 # N25Q128型号的spi f ...
- 快速上手Xilinx DDR3 IP核(2)----MIG IP核的官方例程与读写测试模块(Native接口)
写在前面 接上一篇文章(配置MIG IP过程): 快速上手Xilinx DDR3 IP核(1)----MIG IP核的介绍及配置(Native接口) DDR3系列文章: 快速上手Xilinx DDR3 ...
- stm32中spi可以随便接吗_STM32的SPI模式读写FLASH芯片全面讲解
例程完整代码: SPI协议简介 SPI协议,即串行外围设备接口,是一种告诉全双工的通信总线,它被广泛地使用在ADC,LCD等设备与MCU间通信的场合. SPI信号线 SPI包含4条总线,分别为SS,S ...
- STM32F103配合STM32CubeMX实现SPI读写flash
本人采用的是正点原子的精英STM32F103开发板,其包含一块W25Q128型号的flash芯片.该flash与STM32F103的SPI2相连. 下面根据正点原子提供的开发指南文档,实现FreeRT ...
- FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码
FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码, 方案为单FPGA方案才用底层verilog + 应用层nios2的软件架构,很具有学习价值. 包括编码器模块算法, 坐标变 ...
- 开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码
开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码, 方案为单FPGA方案才用底层verilog + 应用层nios2的软件架构,很具有学习价值. 包括编码器模块算法, ...
- 基于FPGA开发板使用Verilog设计PWM呼吸灯实验
基于FPGA开发板使用Verilog设计PWM呼吸灯实验 1,实验原理 2,实验模块设计 2.1 RTL设计,呼吸灯模块设计 2.2,测试数据,下载到FPGA开发板板级的数据 2.3,两个模块综合的n ...
最新文章
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
- Pycharm ipynb
- (转)字符串匹配算法总结
- 未排序数组中累加和为给定值的最长子数组系列问题
- linux 平均磁盘请求数量,Linux之 iostat 解读磁盘io
- jmete 学习--基础之名词解释
- 将旧对象装箱可自动关闭
- 【渝粤教育】国家开放大学2018年秋季 1133t文献检索 参考试题
- Python案例:倒置英文句子
- UI设计师收好!哪些会说故事的插画素材!
- 终于把W32.Spybot.Worm给消灭了(这个标题不能用了)
- 【转参考】MySQL利用frm和ibd文件进行数据恢复
- 用BT搜宝快速找种子
- 英文环境中Wine微信不能显示中文
- 实时渲染学习(十一)渲染加速算法总结
- java tomcat热部署_intellij idea tomcat热部署配置教程
- 如何查找oracle漏洞对应补丁号,Oracle 漏洞补丁如何查找下载并打补丁,什么漏洞都可用Opatch?...
- C#百度OCR本地图片识别文字
- Spring Cloud 系列之 Netflix Eureka 注册中心
- (P57-P61)正则表达式
热门文章
- java毕业生设计一中体育馆管理系统计算机源码+系统+mysql+调试部署+lw
- mysql常用的两种数据库引擎_Mysql数据库常用两种引擎的介绍
- 北大软微19计算机考研招生,19年北大软微初试高分学长学姐经验贴
- java calendar转string_Date、String、long、Calendar类型之间的转化及时间加减
- 用户手册 操作手册 区别
- FDR土壤水分检测传感器设计方案
- XXTea算法Java版
- UG二次开发教程(基于NX12.0/VS2015版本)
- c语言循环龙珠,《今天赛亚人也在拯救世界!》c语言黑板擦 ^第5章^ 最新更新:2020-01-09 03:52:51 晋江文学城手机版...
- cad坐标归零lisp_CAD怎么将Z轴的标高一次性归零