基于FPGA的SPI_FLASH程序设计

SPI_FLASH简介

        

spi_flash是一种通用存储器,也称为SPI NOR Flash或SPI Flash。它使用SPI(Serial Peripheral Interface)接口进行通信,可以通过串行方式读写数据。spi_flash的特点是工作电压低,体积小,读写速度快,并且可擦写次数很大。因此,它被广泛应用于嵌入式系统中,用于存储程序代码、配置信息和数据。

spi_flash的存储单元由位线和字线组成,可以以字节为单位进行读写操作。它通常具有多个扇区,每个扇区又包含许多块。spi_flash的读操作是通过发送地址和读指令来获取数据,写操作是通过发送地址、写指令和数据来存储数据。

spi_flash的容量可以从几十KB到几GB不等。它可以通过软件进行编程,并且支持批量擦除和写入操作。此外,spi_flash还具有保护数据的功能,可以设置写保护位来防止误操作。

spi_flash的接口标准化,可以与许多微控制器和处理器进行连接。它可用于存储启动代码、操作系统、驱动程序和各种应用程序。在嵌入式系统中,spi_flash通常用作存储设备的主要存储介质,提供快速、可靠的数据存储和读取功能。

SPI_FLASH的通信协议

        它支持 Standard SPI、 Dual SPI Quad SPI 三种 SPI 协议通信方 式,最大传输数据速率可达
50MB/S

SPI_FLASH的存储容量 

 我们这里以W25Q128FV芯片为例子进行介绍,如下图所示。

这款芯片的总容量是128Mbit,这个存储阵列被划分为256个BLOCK(64KB),每一个BLOCK块划分为16个Sector(4KB) ,每一个Sector是包含16个page(256个字节)。

SPI_FLASH的指令介绍

 WR_EN指令介绍

WRENWriteEnable):使能指令(06h),写使能指令可将 Flash 芯片设置为写使能锁存(WEL)状态; 在每一次页写操作(PP)、扇区擦除(SE)、全擦除(BE)和写状态寄存器(WRSR)操作之前,都需要先进行写使 能指令写入操作。操作时序为先拉低片选信号,写入写使能指令,在指令写入过程中,片选信号始终保持 低电平,指令写入完成后,将片选信号拉高。

 READ STATUS REGISTER指令介绍

读取状态寄存器指令( 05h ),这条指令的作用就是指令允许读取状态 寄存器。状态寄存器可以在任何时候读取,即使在编程、擦除或写入状态寄存器循环进行操作时也是可以的。每次读取BUSY状态值来判断芯片是否处于工作状态还是空闲状态,从而更好的执行后续命令操作。

 

Page program指令介绍  

页编辑指令( 02h ),可以理解成写数据指令,当执行页编辑指令时就可以往对应的扇区对应的页中写入数据,一次性最多写入 256 个字节数据。 注意一点,当整页写数据时你可以不必写满 256 个字节,小于 256 个字节也是可以的,但是不能超过 256 个字节数据,因为超过 256 个字节,多余的数据就会返回这一页的开头重新写入,这样就会覆盖之前已经写入的数据

 

 

 READ DATA指令介绍

 

读取数据指令( 03h ),当 FLASH 中被写入数据后我们可以使用 ReadData 指令将 数据读取出来。操作过程就是发送命令字+地址,然后flash芯片就会读取数据。

 

 BLOCK ERASE(52h)指令介绍

 

扇区擦除指令( 52h ),扇区擦除指令是将 Flash 芯片中的被选中扇区的所有存储单 元设置为全 1 ,在 Flash 芯片写入扇区擦出指令之前,需要先写入写使能 (WREN) 指令,将芯片设置为写使 能锁存(WEL) 状态;随后要拉低片选信号,写入扇区擦除指令、扇区地址、页地址和字节地址,在指令、 地址写入过程中,片选信号始终保持低电平,待指令、地址被芯片锁存后,将片选信号拉高;扇区擦除指 令、地址被锁存并执行后,需要等待一个完整的扇区擦除周期(tSE) ,才能完成 Flash 芯片的扇区擦除操 作。

 

 备注:擦除命令还有其他几种,这里不再介绍。

SPI_FLASH指令如何操作 

 前面介绍的这些指令就是实际操作spi_flash时要用到的指令,具体如何操作呢?

 对spi_flash操作主要就是分为2个部分:写操作和读操作。

写操作部分

  1. 对空白的地址进行写操作

      第一步:执行写使能命令

       第二步:执行写命令

      第三步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态)  如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。

      2.对写过数据的地址重新进行写操作

第一步:执行写使能命令

第二步:执行擦除命令

第三步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态)  如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。

第四步:执行写使能命令

第五步:执行写命令

 第六步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态)  如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。

 读操作部分

         执行读命令。

系统程序框架设计

 

 本系统通过串口下发相关指令,实时的对SPI_FALSH芯片进行读写操作,从而实现简单的人机交互功能,使用者操作起来更加直观和便利。

上板 实验结果

 首先通过串口下发写操作对spi_flash写入256个递增数据,然后下发回读命令,从spi_flash芯片中将写入的数据读出,最后通过串口发送回传到PC端的串口助手进行显示。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

战斗的青春岁月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值