FPGA实现基于SPI协议的Flash驱动控制(全擦除、页擦除、读数据、页写、连续写—地址写)

基于FPGA 外置qspi Flash的读写 fpga上实现flash读写代码 阅读详情

摘要

本论文使用Verilog HDL硬件描述语言,结合野火可以FPGA征途Pro开发板,实现了SPI通信协议的全擦除,扇区擦除,读数据,页写,连续写的驱动设计。在 Altera Cyclone Ⅳ 芯片上采用“自顶向下”的模块化设计思想及 Verilog HDL 硬件描述语言,设计并实现串行外设接口(SPI)。在 Quartus II 13.0 软件开发平台上编译、仿真后下载到 FPGA 芯片上,进行在线编程调试,实现了 SPI 总线通信功能。基于 FPGA 的系统设计调试维护方便、可靠性高,而且设计具有灵活性,可以方便地进行扩展和移植。
关键词:SPI;串口通信;FPGA;Verilog HDL

1 绪论

1.1研究背景

串行外设接口 (Serial peripheral interface, SPI) 是由Motorola 公司推出的一种同步串行外围设备接口。SPI总线是一种高速、同步、全双工的串行通信总线。SPI 总线接口只有四根外部接口线,结构简单、速度快、可靠性强。典型的 SPI 接口通信由四根信号线实现,分别为:
SCS:从片选信号,逻辑 “0” 为有效状态,表示被选中与主设进行数据传输。
SCLK:串行时钟线,由主设输出,从设按照此时钟进行数据的同步传输。
MOSI:数据传输线,由主设到从设。
MISO:数据传输线,由从设到主设。[1]

1.2 研究目的和意义

SPI 接口是一种全双工、三线通信的系统,是常用的工业标准同步串行接口,它允许主机处理器与各种外围设备之间的通信方式是串行通信。在 SPI 接口中,主/从机之间数据的传输需要 1 个时钟信号和 2 条数据线,所以 SPI 总线区分主机(Master)和从机(Slave)2 部分,结构框图如图 1 所示。
主机和从机之间 SPI 总线由 4 根线构成:①SCK。串行同步时钟信号,用来同步主机和从机的数据传输,
由主机控制输出,从机在 SCK 的边沿接收或发送数据。②MOSI。主机输出/从机输入线,主机在上升沿(或下
降沿)通过该信号线发送数据给从机,从机在下降沿(或上升沿)通过该信号线接收该数据。③MISO。主
机输入/从机输出线,从机在上升沿(或下降沿)通过该信号线发送数据给主机,主机在下降沿(或上升沿)
通过该信号线接收该数据。④SS。从机片选信号线,它同样是由主机控制输出。[2]

1.2.1 SPI通信协议物理层简介

在这里插入图片描述
(图1-2-1-1:一主一从SPI通讯设备连接图)
(Figure 1-2-1: One master and one slave SPI communication device connection diagram)
在这里插入图片描述
(图1-2-1:一主多从SPI通讯设备连接图)
(Figure 1-2-1-2: One master and multiple slave SPI communication device connection diagram)
SPI通信协议采用的是主从通信模式,通信双方有主从之分,根据从机的设备个数,SPI通信设备之间的连接方式可以分为一主一从和一主多从。

SPI通信协议包含1条时钟信号线、2条数据总线和1条片选信号线,时钟信号线为SCK、2条数据总线为MOSI和MISO,片选信号线为CS。它们的作用介绍如下:
1.SCK(Serial Clock) : 时钟信号线,用于同步通信数据。由通信主机产生,决定了通信的速率,不同的设备支持的最高时钟频率不同,两个设备通信时通信速率受限于低速设备。
2.MOSI(MasterOutput ,Slave Input) : 主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机从这条信号线读入主机发送的数据,数据方向由主机到从机。
3.MISO(Master Input , Slave Output) : 主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输入到主机,数据方向由从机到主机。
。CS(Chip Select) : 片选信号线,也称为CS_N。当有多个从设备与主机相连时,设备的其他数据信号线SCK、MOSI、MISO同时并联到相同的SPI总线上,即无论有多少从设备都使用这三条总线,每个从设备都有一条独立的CS_N信号线,本数据线独占主机的一个引脚,既有多少个从设备就有多少个片选信号线。I2C协议中通过设备地址来寻址,选中总线上的某个设备并与其进行通信;而SPI协议中没有设备地址,它使用CS_N信号线来寻址,当主机要选择从设备时,把该设备的CS_N信号线设置为低电平,该设备即被选中,即片选信号有效,接着主机开始与被选中的从设备进行SPI通信。所以SPI通信以CS_N信号线置为低电平为开始信号,以CS_N信号线拉高为结束信号。

1.2.2 SPI 协议层

SPI通信协议一共有4种通信模式:模式0、模式1、模式2、模式3.这四种模式分由时钟极性(CPLD,Clock Polarity)和时钟相位(CPHA,ClockPhase)来定义,其中CPOL参数规定了空闲状态(CS_N为高电平,设备未被选中时SCK时钟信号的电平状态,CPHA规定了数据采样是在SCK时钟奇数边沿还是偶数边沿。

1.2.3 设计SPI总线接口要求

设计的 SPI 总线接口完成工作有:①将主机收到的 16 位并行数据转换为串行数据,并发送给从机;
②接收来自从机的串行数据,将其转换为并行数据,通过并行端口输出;③输出从机所需要的输入信号、
时钟信号 SCK 和片选信号 SS
在这里插入图片描述
在这里插入图片描述

1.3 国内外研究现状(SPI接口的发展)

SPI 接口最早是由美国的Motorola 公司所定义的,它的中文名称叫做串行外设接口,用于 Motorola 公司自己研发的产品之中。SPI 接口可以作为通信的桥梁,连接 CPU 等控制设备和外围设备。SPI 接口能够以串行、同步、高速的特点来传输通信数据,具有简单易用、节省面积等优点,因此具有越来越广泛的用途,并且逐渐应用到其他场景,比如 SD 卡、液晶显示屏、射频通信卡等。传统的 SPI 接口可以连接控制设备和外围设备进行全双工通信,随着通信场景的需求,会引入设计半双工、单工等通信方式,会根据功能设计更多的寄存器进行控制。在规模一般的芯片设计中,可能仅简单设计 SPI 接口、满足基本通信需求即可,但是在芯片性能不断发展的今天,在设计 SPI 接口时需要考虑到 SPI 能否与其他各 IP 进行高效的通信与交互,能否在芯片 IP 复杂化的同时可以尽量复用之前的设计,能否适应芯片设计中新的功能点和需求点。SPI 接口设计好后,会进行功能点的验证。如果以传统的 Verilog 语言验证SPI,需要编写大量激励文件,以众多定向验证覆盖到功能点。如果以单纯的System Verilog 语言验证SPI,可以实现随机化的激励输入,达到高效的验证,但是验证平台环境不容易得到复用,在项目迭代中具有一定的麻烦。所以需要寻求既可以高效验证 SPI 功能点,又可以高效搭建实现验证平台环境的方式。[3]

1.4 研究内容

1.5 研究方法及技术路线

2 设计SPI-FLASH全擦除实验模块

2.1 设计SPI总线接口要求

2.2 设计SPI接口模块结构

在这里插入图片描述

2.3 SPI接口的子模块设计

2.3.1 通讯模块

2.3.2 控制模块

在这里插入图片描述

2.3.3 FIFO模块

2.3.4 数据收发模块

2.4 设计过程波形图绘制及各信号产生原因解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.5 设计的仿真、综合与实现

module  key_filter
#(
    parameter   CNT_20MS_MAX    =   20'd999_999
)
(
    input   wire            sys_clk     ,
    input   wire            sys_rst_n   ,
    input   wire            key_in      ,
    
    output  reg             key_flag
);
reg [19:0]  cnt_20ms;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt_20ms <= 20'd0;
    else    if(key_in == 1'b1)
        cnt_20ms <= 20'd0;
    else    if(cnt_20ms == CNT_20MS_MAX && key_in == 1'b0)
        cnt_20ms <= CNT_20MS_MAX;
    else    if(key_in == 1'b0)
        cnt_20ms <= cnt_20ms + 20'd1;
    else
        cnt_20ms <= cnt_20ms;

always@(posedge sys_clk 
FPGA实现Flash读写操作 本篇文章所使用的Flash型号为M25P16,是ST公司的一款(好像还有一款同名的,是别的公司的)。容量为16Mbit,SPI接口,时钟速率可达50Mhz。要想完成对Flash的读写擦除操作,只需要弄懂两点即可:SPI时序 和 Flash操作指令。其他的细节和一些概念可以学习的过程中了解补充。 阅读详情

相关推荐

【FPGA】FPGA基于spi的flash读写

文章目录一、SPI二、看spi--flash手册找关键1.描述2.flash接口信号3.SPI模式选择4.高字节MSB5.指令6. 写使能时序7.读ID时序8.读寄存器时序(我没用到)9.读数据时序10.页编程11.扇区擦除12.重要的时间三、状态机设计1.i2c接口状态机2.flash读状态机3.flash写状态机四、代码部分1.==spi_interface.v==2.==spi_read_ctrl.v==3.==spi_write_ctrl.v==4.==spi_control.v==5.==top.

weixin_45888898的博客 2万+

FPGA远程升级实战:STARTUPE2原语与SPI NOR Flash MultiBoot避坑指南

在FPGA系统设计中,远程固件升级是一项常见的工程需求,而基于SPI NOR Flash的MultiBoot方案因其实现灵活、成本可控,成为很多产品的首选。该机制的核心在于,用户逻辑需要复用FPGA的专用配置引脚CCLK来驱动外部Flash,此时必须借助STARTUPE2原语完成从配置引擎到用户时钟的安全交接。理解引脚时序、三态控制与时钟路径,是保障升级可靠性的基础。远程升级技术广泛应用于工业控制、通信设备和边缘计算等场景,其工程难点不仅在于功能实现,更在于异常场景下的自动回退与故障恢复。本文基于AXI Q

weixin_33901641的博客 337

FPGA学习笔记(十七)spi与flash,程序固化

spi通信的时钟采样可以通过CPOL与CPHA调整,CPOL设置时钟极性,也就是空闲状态下的时钟,当CPOL为0时,空闲状态下时钟为低电平,当CPOL为1时,空闲状态下的时钟为高电平,CPHA时钟相位,可以设置时钟是奇数边沿采样还是偶数边沿采样,当CPHA为0时,时钟在偶数边沿采样,就是第0,2,4个时钟边沿,当CPHA为1时,时钟在奇数边沿采样,也就是1,3,5个时钟边沿采样,这两可以组成4种采样模式。可以使用一主多从的方式进行通讯,通讯时通过片选,选定你要通讯的从机进行通讯。

2203_75345038的博客 1186

ZYNQ7020 FPGA如何从Flash启动的详细步骤

第一章 创建BOOT.bin 工具vivado 2017.4 1创建工程。包括创建工程,编写程序,添加约束。 2创建一个BD文件。单击 Create Block Design,命名为 system 之后单击 OK。 5修改MIO接口配置 (1)QSPI FLASH接口 (3)配置串口 6修改时钟 (1)CPU和DDR根据开发板的时钟来设置,一般CPU时钟为33.333333MHz。 (2)ZYNQ的主频设置为默认的667MHz,QSPI时钟设置为125MHz(否则无...

a9062985的博客 7146

Xilinx FPGA SPI FLASH 启动加载流程

Xilinx FPGA SPI FLASH外挂FLASH启动设置,步骤详细,每步骤都有截图,如何生成MCS文件,如何匹配所使用的FLASH型号,如何通过SPI加载MCS文件,非常详细

基于FPGA的SPI Flash控制器的设计方案

传统的Flash读写是通过CPU软件编程实现,其读写速度较慢,且占用CPU资源,另外由于Flash芯片本身功能指令较多,使得对芯片进行直接操作变得非常困难。本文提出一个基于FPGA的SPI Flash读写硬件实现方案,该方案利用硬件对SPI Flash进行控制,能够非常方便地完成Flash的读写、擦除、刷新及预充电等操作,同时编写的SPI Flash控制器IP核能够进行移植和复用。

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 440

华北理工大学以升实验班蓝桥杯选拔赛题解

文章目录华北理工大学以升实验班蓝桥杯选拔赛题解A:期末考试题目描述题目讲解代码B:月份题目描述题目讲解代码C:打饭题目描述题目讲解代码D : 正弦波信号题目描述题目讲解代码E : 亲爱的长方形题目描述题目讲解代码F:挖金子题目描述题目讲解代码G : 金金的游戏题目描述题目讲解代码H : 区间和题目描述题目讲解代码详细视频讲解请关注华北理工大学b站账号。 华北理工大学以升实验班蓝桥杯选拔赛题解 A:期末考试 题目描述 Description 期末考试过去许多天了,如今成绩都出来了,那么现在让我们对成绩我分个类

Qq1739206233的博客 1128

从接线到组态:手把手教你搞定PROFIBUS-DP与PA的混合网络搭建(基于西门子TIA Portal)

本文详细介绍了PROFIBUS-DP与PA混合网络的搭建方法,基于西门子TIA Portal平台,从硬件选型、网络架构设计到组态配置和现场调试,提供了一套完整的实战指南。重点解析了DP/PA耦合器的使用、地址映射策略及网络诊断技巧,帮助工程师高效构建高可靠性的工业自动化网络。

weixin_32103009的博客 302

优快云独家首发!万字长文,YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程!小白也能看懂!掌握了这个就掌握了魔改YOLO的核心!

🍀🍀🍀YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程,全网最强,学不会算我输!!!

Coding... 1万+

YOLO项目从零开始:超详细运行教程(图文保姆级教学)

至此,我们已经完整跑通了YOLO项目的安装与启动流程,无论你是零基础小白还是刚入门的AI新兵,只要按部就班操作,也能轻松实现目标检测项目的落地。

一键难忘的博客 4800

图像处理:张量分解在图像处理领域的应用

随着计算机视觉和图像处理技术的快速发展,图像数据呈现出高维、多模态、海量等特点。传统的矩阵分解方法已经无法有效处理这些复杂的图像数据。张量分解作为一种高阶矩阵分解方法,可以很好地捕捉图像数据的高维结构信息,在图像处理领域展现出巨大的应用前景。本节介绍几种常用的张量分解算法,包括高阶SVD(HOSVD)、Tucker-ALS、CP-ALS等。这些算法的核心思想是通过迭代优化的方式,交替更新张量分解的因子矩阵,直到收敛为止。综上所述,本文系统地介绍了张量分解技术在图像处理领域的应用。

AI天才研究院 7104

数据行小于列索引,内部模式表示可能存在问题

通过检查数据源的完整性和一致性,检查Debezium配置,检查列映射以及启用调试模式和日志记录,您应该能够解决这个错误。请注意,具体的解决方法可能因您的具体情况而异,因此您可能需要根据问题的根本原因进行适当的调整和修复。如果问题仍然存在,您可能需要进一步检查您的数据和配置,并根据具体情况进行调整和修复。在Debezium中,您可以使用列重命名和列映射来定义源和目标之间的列映射关系。通过检查日志,您可以查看详细的错误信息和堆栈跟踪,从而更好地理解问题的根本原因。首先,我们应该检查数据源的完整性和一致性。

XbtoMemory的博客 730

YOLO26训练教程,训练自己的数据集教学,从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 。实现0到1的完整教学过程。快速入门必看

本文详细介绍了YOLO26目标检测模型的配置与使用流程:1)下载YOLOv11源码并创建Python3.10虚拟环境;2)安装PyTorch2.5.1及相关依赖库;3)准备数据集并修改配置文件;4)编写训练脚本设置参数(640x640分辨率、500轮次);5)验证模型效果;6)使用训练好的模型进行推理测试;7)生成可视化热力图。整个过程涵盖了从环境搭建到模型应用的全流程,并提供了清华镜像源加速下载。

Ai缝合怪、助力小伙伴高效发论文 5286

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: 简易频率计的设计与验证
下一篇: 基于I2C协议的EEPROM驱动设计
Joney Feng
博客等级 码龄5年 385粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值