FPGA-利用SPI总线进行flash操作

简介: FPGA-利用SPI总线进行flash操作

first 感谢开源骚客Kevin的视频讲解,需要了解的话自行付费(不算广告吧,,)

学习操作之前,要先清楚概念。要了解什么是flash:

FLASH闪存


是属于内存器件的一种,"Flash"。闪存则是一种非易失性( Non-Volatile )内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。

各类 DDR 、 SDRAM 或者 RDRAM 都属于挥发性内存,只要停止电流供应内存中的数据便无法保持,因此每次电脑开机都需要把数据重新载入内存。

本次工程使用的芯片

image.png 大致flash的芯片结构

image.png

页:


页结构=页头+节区xN+页尾,当然页结构不是固定不变的,对于不同的厂家会有所不同,在FLASH数据恢复大师里面已经集成了常见的页结构信息,用户只需要根据页大小来选择不同的结构,如页长度为2112的就存在以下几种情况:

2112=0+(512+16)x4+0

2112=30+(512+8)x4+2

2112=0+512x4+16x4

通常flash页每页含有512个字节,对于任何flash页的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。而对于页的擦除,需要注意的是,擦除必须擦除完整一页,所以页是最小单位。

字节


是二进制数据的单位。一个字节通常8位长。但是,一些老型号计算机结构使用不同的长度。为了避免混乱,在大多数国际文献中,使用词代替byte。

 大部分FLASH性质存储器都有很多相似的操作规则,比如擦除方式就很特殊,最小擦出单位必须按照扇区来操作,而数据的写入地址的内容必须是擦除状态。这也是为什么EEPROM还能存在的一方面的原因吧(可以字节擦除)。由于这种特殊的性质,导致我们在利用FLASH存储数据的时候必须注意对扇区擦除的操作

以这块 16Mbit 的 Flash 为例,寻址时需要的位数为:
Bulk = 32 Sector -> 5bit
Sector = 256 Page -> 8bit
Page = 256 Byte -> 8bit
总共需要 21 bit

STM32的SPI模式读写FLASH芯片全面讲解

操作上篇帖子很详细的讲述了在stm32 的开发中如何进行flash操作,而今天我们要把他做到FPGA上进行试验和验证

SPI协议简介

SPI协议,即串行外围设备接口,是一种告诉全双工的通信总线,它被广泛地使用在ADC,LCD等设备与MCU间通信的场合。

SPI信号线

SPI包含4条总线,分别为SS,SCK,MOSI,MISO.作用如下:

1) SS:片选信号线,当有多个SPI设备和MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的,而其他的SCK,MOSI,MISO线则为多个设备并联到相同的SPI总线上,当SS信号线为低电平时,片选有效,开始SPI通信.

2) SCK:时钟信号线,由主通信设备产生,不同的设备支持的时钟频率不一样.

3) MOSI:主设备输出/从设备输入引脚,主机的数据从这条信号线输出,从机由这条信号线读入数据,即这条线上的数据方向为从主机到从机.

4)MISO:主设备输入/从设备输出引脚,这条线上数据是从机到主机.

Serial Data Output: 数据输出端口,在串行时钟的下降沿改变数据。
Serial Data Input: 数据输入端口,可传输指令、地址和需要写入的数据,该管脚上的值在串行时钟的上升沿锁存。
Serial Clock: 该输入信号提供SPI的时序参考
Chip Select: 片选信号,为低电平时,表示使能器件。并且在执行任何指令之前都需要把片选信号拉低。

SPI模式

根据时钟极性(CPOL)和时钟相位(CPHA)配置的不同,分为4种SPI模式。

时钟极性是指SPI通信设备处于空闲状态时(也可以认为这是SPI通信开始时,即SS线为低电平),SCK信号线的电平信号。CPOL=0时,SCK在空闲状态时为低电平,CPOL=1时则相反。

时钟相位是指数据采样的时刻,当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的奇数边沿被采样。当CPHA=1时,数据线在SCK的偶数边沿被采样。

sd卡的spi常用的是mode 0 和mode 3,这两种模式的相同的地方是都在时钟上升沿采样传输数据,区别这两种方式的简单方法就是看空闲时,时钟的电平状态,低电平为mode 0 ,高电平为mode 3。


下面以CPHA=0为例讲解SPI时序。

image.png

首先,由主机把片选信号NSS拉低,意为主机输出。

在NSS被拉低的时刻,SCK分为两种情况,若我们设置CPOL=0,则SCK时序在这时为低电平,若设置为CPOL=1,则SCK在这个时刻为高电平。

无论CPOL为0还是1,因为我们配置的时钟相位CPHA=0,在采样时刻的时序中我们可以看到,采样时刻都是在SCK的奇数边沿(注意奇数边沿有时为下降沿,有时为上升沿)。

因此,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,这个信号将会在SCK奇数边沿时被采集,在非采样时刻,MOSI和MISO的有效信号才发生切换。

对于CPHA=1的情况也类似,只是数据信号的采样时刻为偶数边沿。

注意:使用SPI协议通信时,主机和从机的时序要保持一致,即两者都选择相同的SPI模式

指令结构

image.png

image.png

目录
相关文章
|
测试技术 异构计算
【FPGA基础入门实践】Verilog 基本项目操作逐步演示
【FPGA基础入门实践】Verilog 基本项目操作逐步演示
242 0
|
5月前
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(二)
FPGA进阶(1):基于SPI协议的Flash驱动控制
65 0
|
5月前
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
215 0
|
存储 芯片 异构计算
Xilinx FPGA SPI配置芯片都支持哪些型号
Xilinx FPGA SPI配置芯片都支持哪些型号
573 0
Xilinx FPGA SPI配置芯片都支持哪些型号
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
239 0
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
FPGA-流水线操作
FPGA-流水线操作
202 0
|
13天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
113 69
|
17天前
|
移动开发 算法 数据安全/隐私保护
基于FPGA的QPSK调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的QPSK调制解调系统,通过Vivado 2019.2进行仿真,展示了在不同信噪比(SNR=1dB, 5dB, 10dB)下的仿真效果。与普通QPSK系统相比,该系统的软解调技术显著降低了误码率。文章还详细阐述了QPSK调制的基本原理、信号采样、判决、解调及软解调的实现过程,并提供了Verilog核心程序代码。
53 26
|
23天前
|
算法 异构计算
基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4-ASK调制解调系统的算法仿真效果、理论基础及Verilog核心程序。仿真在Vivado2019.2环境下进行,分别测试了SNR为20dB、15dB、10dB时的性能。理论部分概述了4-ASK的工作原理,包括调制、解调过程及其数学模型。Verilog代码实现了4-ASK调制器、加性高斯白噪声(AWGN)信道模拟、解调器及误码率计算模块。
44 8