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

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

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

FLASH闪存

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

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

本次工程使用的芯片

 大致flash的芯片结构

页:

页结构=页头+节区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时序。

首先,由主机把片选信号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模式

指令结构

 

   

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vuko-wxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值