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

目录
相关文章
|
5月前
|
测试技术 异构计算
【FPGA基础入门实践】Verilog 基本项目操作逐步演示
【FPGA基础入门实践】Verilog 基本项目操作逐步演示
77 0
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
185 0
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
FPGA-流水线操作
FPGA-流水线操作
158 0
|
3天前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
19 7
|
2月前
|
算法 异构计算
基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench
基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench
|
1月前
|
算法 异构计算
m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件
该文介绍了基于FPGA的电子钟设计,利用Vivado2019.2平台进行开发并展示测试结果。电子钟设计采用Verilog硬件描述语言,核心包括振荡器、分频器和计数器。时间显示为2个十进制格式,闹钟功能通过存储器和比较器实现,当当前时间等于设定时间时触发。文中给出了Verilog核心程序示例,展示了时钟信号、设置信号及输出的交互。
27 2
|
3月前
|
算法 5G 数据处理
m基于FPGA的PPM光学脉位调制解调系统verilog实现,包含testbench
m基于FPGA的PPM光学脉位调制解调系统verilog实现,包含testbench
45 0
|
3月前
|
算法 异构计算 索引
m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
42 1
|
5月前
|
算法 测试技术 开发工具
m基于FPGA的2ASK调制解调系统verilog实现,包含testbench测试文件
m基于FPGA的2ASK调制解调系统verilog实现,包含testbench测试文件
52 0
|
1月前
|
算法 异构计算
m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件
m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件
13 0