基于FPGA读写MT25QL FLASH芯片

在FPGA上面根据SPI接口协议用verilog语言读写MT25QL128ABA FLASH芯片

目录

前言

一、FLASH简介

二、管脚信息

三、存储容量

四、操作命令顺序

五、使能命令(06h)

六、4KB区块擦除命令(20h)

七、轮询指令(05h)

八、页写指令(02h)

九、页读指令(03h)

十、SPI时序

参考资料和源代码工程

总结


前言

        FLASH存储器又称闪存,是一种长寿命的非易失性存储器,一般用来保存一些重要的设置信息或者程序等等。本文将在介绍FLASH有关的基础知识后,说明如何配置MT25QL128ABA这块FLASH芯片,包含对相关指令的解析和读写操作需要注意的点,当然,仿真图必不可少了,文中也有给出相应的仿真图。

提示:以下是本篇文章正文内容,希望能帮助到各位,转载请附上链接。

一、FLASH简介

        FLASH存储器又称闪存,是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)存储器,一般用来保存一些重要的设置信息或者程序等等。

        介绍的FLASH芯片型号为MT25QL128ABA,它是由Micron公司生产的一款高性能FLASH芯片。这款芯片的总容量为128Mbit,16MB,整个存储阵列被分成4096个4KB子扇区,每页的容量为256字节。它支持Standard SPI、Dual SPI和Quad SPI三种SPI协议通信方式,最大支持的传输数据频率可达133MHz。

二、管脚信息

芯片架构如下图所示

        阅读该图可知DQ引脚进出的数据与Memory之间有一个I/O shift register ,还有一个256字节的数据缓存器(256 byte data buffer),这将导致写入的时候数据进来后先缓存在data buffer这里,再通过地址寄存器及计数器写入到Memory里面,所以写入是需要一定时间的。另外,写入数据之前要先进行擦除,让Memory里面所有Bit为高电平,擦除完成之后在进行写入。

        需要注意的是,该FLASH芯片的每一页(256个字节)都可以单独编程,但器件不能进行页擦除,最小擦除单位是4KB(4096字节)的子扇区。

        下图是该芯片的管脚定义信息。

S#   输入片选被驱动为高电平时,器件将进入待机模式,除非内部编程、擦除或写入状态寄存器周期正在进行中。所有其他输入引脚均被忽略,输出引脚为三态。然而,在具有提专用 RESET#引脚的 引脚配置的部件上,即使 S# 为高电平,RESET# 输入引脚仍保持活动状态。

C     时钟,提供串行接口的时序。命令输入在上升沿被锁存时钟的边缘。在STR命令或协议中,地址和数据输入被锁存在时钟的上升沿输出,而数据在时钟的下降沿输出。在DTR命令或协议中,地址和数据输入在时钟的两个边沿被锁存,并且数据被锁存且在时钟的两个边沿输出。

RESET#  复位管脚

HOLD#    保持管脚,暂停通信,输入被忽略。

W#           输入写保护

DQ[3:0]    数据IO,当在扩展I/O协议(XIO‑SPI)中使用传统 (x1)SPI命令时DQ0是输入和DQ1是输出。不使用DQ[3:2]。 当在XIO‑SPI 中使用双命令或使用DIO‑SPI时,DQ[1:0]为I/O。DQ[3:2]不是 用过的。 当在XIO‑SPI中使用四指令或使用QIO‑SPI时,DQ[3:0]是I/O。

 注意,带#的是低电平有效

        注意,RESET#、HOLD#、W#这几个管脚与DQ复用,我程序中用的普通SPI,那么未用到的DQ2和DQ3都是驱动为高电平。

三、存储容量

        擦除最小单位为4KB子扇区,读写最小单位为1页,256个字节。

四、操作命令顺序

        在进行擦除命令和写数据命令之前要进行使能,读不需要使能,随时都可以读,但需要注意,每次只能操作一个命令。在擦除和写之后要查看状态寄存器,因为擦除和写命令及数据发送完成后需要等待一定时间芯片方可真正完成擦除和写入。

        如图所示,写和擦除均需要时间。我们会发现全擦至少要38s,不建议全擦,建议写哪里擦哪里。

五、使能命令(06h)

        注意,这里面会有一些时序要求。比如时钟高低电平持续时间,比如相对于时钟,片选有效建立时间等等。

        时序要求具体可参照芯片手册中提供的时序图。

        FPGA操作该命令时序图如下:

六、4KB区块擦除命令(20h)

        52h和20h都可以。

FPGA操作该命令时序图如下(擦的地址为24'h000000):

七、轮询指令(05h)

        我们先来看一下状态寄存器,只用关心第0位,该位为0,说明可以执行擦除和写的命令,为1说明写和擦除正在进行中。

        轮询指令就是用来查状态寄存器,它会一直循环读出状态寄存器的8bit值,我们如果发现最低位为0则可以通过控制时钟信号停止读取。

        FPGA操作该命令时序图如下:

八、页写指令(02h)

        先发命令,再发地址,再传数据。

        FPGA操作该命令时序图如下:

九、页读指令(03h)

        我用的03h这个命令,最大速率可达54MHz,当然实际中用的25MHz。

    FPGA操作该命令时序图如下:

十、SPI时序

       SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制从设备 (Slave)。一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议 还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作。 

        极性全称Clock Polarity,通常简写成CPOL。它是指时钟信号在空闲状态下是高电平还是低电平,当时钟空闲时为低电平即CPOL==0,反之则CPOL==1。

        相位全称Clock Phase,通常简写成CKPHA。它是指时钟信号开始有效的第一个边沿和数据的关系。不管是时钟的上升沿采样还是下降沿采样,采样边沿为了满足建立时间和保持时间一般都是在数据稳定周期的正中间发生触发采样。因此当时钟信号有效的第一个边沿处于数据稳定期的正中间时我们定义CKPHA==0,反之时钟信号有效的第一个边沿不处于数据稳定期的正中间我们定义CKPHA==1。这样当CKPHA==0模式时我们先发生数据采样然后输出数据,当CKPHA==1模式时我们先发生数据输出然后进行数据采样。

        SPI四种模式,我用的模式0。

参考资料和源代码工程

https://download.csdn.net/download/m0_66360845/89695082icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_66360845/89695082

        链接:https://download.csdn.net/download/m0_66360845/88962177


总结

        以上就是今天要分享的全部内容,本文说明了如何配置MT25QL128ABA这块FLASH芯片,包含对相关指令的解析和读写操作需要注意的点,也给出了仿真图,当然,对于该FLASH的读写程序在实际中也已经验证通过了。

FPGA作为可编程逻辑器件,通常需要将程序代码或数据存储在非易失性存储器中,以便设备上电后能够自动加载程序或数据。N25Q128是一款高性能SPI闪存芯片,常用于存储FPGA程序代码和数据。下面介绍FPGA如何读写N25Q128闪存。 首先需要在FPGA开发板上通过硬件电路将N25Q128闪存芯片FPGA连接。通常采用SPI接口连接,FPGA需要通过SPI总线控制N25Q128闪存读写操作。由于闪存芯片容量比较大,数据读写速度相对较慢,因此通常需要使用硬件时钟同步读写操作。 读取N25Q128闪存中的数据需要先设置SPI接口相关的控制寄存器,如时钟分频、传输位数、模式等。然后FPGA发送写命令到N25Q128闪存,包括读取的地址和读取数据的长度。N25Q128闪存收到命令后便开始向SPI总线传输数据FPGA接收到数据后存储到相应的存储器中。 写入数据到N25Q128闪存同样需要设置SPI接口相关的控制寄存器,然后发送写命令到N25Q128闪存,包括要写入数据的地址和写入数据的长度等信息FPGA发送的数据将被写入到N25Q128闪存对应的物理位置中,以供后续读取操作。 需要注意的是,在FPGA读写N25Q128闪存时需要防止读写冲突和数据误码问题,需要采用适当的容错措施和校验机制。此外,如果需要加密数据或保护数据安全,可以在读写数据时加入相应的加密和解密算法来提高安全性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

迎风打盹儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值