手写一个SPI FLASH 读写擦除控制器(未完)

文章目录

  • flash读写数据的特点
  • 1. 扇擦除SE(Sector Erase)
    • 1.1 flash_se 模块设计
      • 1.1.1 信号连接示意图:
      • 1.1.2 SE状态机
      • 1.1.3 波形图设计:
      • 1.1.4 代码
  • 2. 页写PP(Page Program)
    • 2.1 flash_pp模块设计
      • 2.1.1 信号连接示意图:
      • 2.1.2 PP状态机
      • 2.1.3 波形图设计(WE部分和DELAY部分和上述一致)
      • 2.1.4 代码
  • 3.读flash操作
    • 3.1 flash_rd模块设计
      • 3.1.1 信号连接示意图
      • 3.1.2 波形图设计
      • 3.1.3 代码
  • 4.控制器设计

开始之前需要先了解一下SPI通信协议的特点:

本篇内容要实现FPGA芯片通过SPI总线与flash芯片进行通信,连接如下图所示: 在这里插入图片描述
信号线解释:

  1. Cs_n:片选线,为 FPGA 的输出信号,Flash 的输入信号,低电平有效;
  2. Sck:时钟线,为 FPGA 的输出信号,Flash 的输入信号,Flash 根据该信 号的上升沿锁存 sdi 发来的数据,根据该信号的下降沿通过 sdo 输出数据;
  3. sdi:mosi,数据线,为 FPGA 的输出信号,Flash 的输入信号,FPGA 可通过 sdi总线串行的传输数据到 Flash;
  4. sdo:miso,数据线,为 FPGA 的输入信号,Flash 的输出信号,Flash 可通过 sdo总线串行的传输数据到 FPGA。

flash读写数据的特点

这里以 M25p16 型号的 flash 为例进行介绍。
M25p16 最大的时钟频率为 50Mhz,在此我们进行擦除时采用 12.5Mhz 的时钟,即 sck 的时钟频率为 12.5Mhz。该款 Flash 芯片的存储空间16Mbit,每个地址内存储 1byte(8bit)的数据,共 2M 的存储深度,其地址分为 32 扇区(sector)、每个扇区包含 256 页(page)、每一页包含 256字节(byte),因此该 Flash 芯片需要用到 21 位地址线,加上扩展的 3bit 地址线
一共用到== 24bit 地址线==,具体如下图 3所示。
在这里插入图片描述

1. 扇擦除SE(Sector Erase)

通过前面的项目我们知道,ram存储器的特点是:,在同一个地址写入新的数据时,旧数据会被覆盖。而flash则不同,在对 Flash 进行写入数据时,首先需要将 Flash内部现有的数据进行擦除,Flash 的擦除分为扇区擦除(sector erase)和全擦除(bulk erase)。下面将以扇区擦除为例进行讲解.
在进行 SE 之前需要给出一个写使能指令
(WREN),然后进行扇区擦除,WREN的指令为8’h06。SE时序图如下:
在这里插入图片描述

注意:

  1. 在 WREN 结束后,cs_n 需要被拉高,为了确保 WREN 被 Flash 存储,因此 cs_n 拉高的时间至少需要 100ns(官方文档虽然没写拉高 100ns 但是为了稳定一定要 拉高 cs_n),之后再次拉低 cs_n 为发送 SE 指令做准备。
  2. 由于是扇区擦除,因此给出的地址位只有高 8bit有效,低 16bit 无论是何值都对该扇区的擦除没有影响。

1.1 flash_se 模块设计

1.1.1 信号连接示意图:

在这里插入图片描述

1.1.2 SE状态机

在这里插入图片描述

1.1.3 波形图设计:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1.4 代码

2. 页写PP(Page Program)

Flash 页写功能,简称 PP,Page Program 命令 8’h02。同样与擦除指令一样,需要再发送 PP 指令之前,执行 Write EN 操作,当执行完 PP 后 Write EN 会自动复位,所以每次 PP 之前必须发送 Write EN 操作。PP时序图如下:
在这里插入图片描述

2.1 flash_pp模块设计

说明:这里:这里pp进去的256byte数据是提前存在fifo的,因此开始向flash里pp数据的时候需要产生读fifo使能(rd_en)。

Fifo的位宽设置为8,fifo一次读出8bit数据,而sdi传输1bit数据,所以需要考虑fifo读使能拉高的时机以及读出的数据移位的时机

2.1.1 信号连接示意图:

在这里插入图片描述

2.1.2 PP状态机

在这里插入图片描述

2.1.3 波形图设计(WE部分和DELAY部分和上述一致)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
rd_en和rd_data数据移位实现并转串细节:
在这里插入图片描述

2.1.4 代码

3.读flash操作

Read data byte 读数据字节指令,简称 RDB 指令,指令码为 8’h03,读指令可以读取 Flash 地址空间的任何一个byte 数据,不受扇区,页的限制,而且可以连续读取出所有数据。
读数据的必要条件:给出读命令码,然后紧跟 24bit 的起始地址,之后会在 SDO 总线串行输出读出数据,直到 Cs_n 信号拉高中断读出数据操作,否则地址在 flash 内部递增读出数据。
flash_rd操作时序图:
在这里插入图片描述

3.1 flash_rd模块设计

读控制器要能满足以下功能:
给定读起始地址和需要读取的数据长度,控制器自动启动读 flash, 并把读出数据缓存到 fifo 中,以供其他模块读取调用。

3.1.1 信号连接示意图

在这里插入图片描述

3.1.2 波形图设计

sdo是1bit ,而fifo的wr_data为8bit,因此要合理设计sdo的移位标志,与wr_en的标志,实现串转并写入fifo中。
在这里插入图片描述

3.1.3 代码

4.控制器设计

到目前为止,我们分别完成了flash_se、flash_pp、flash_rd三个对flash进行操作的模块,如何将他们整合在一起,实现:
上位机串口读写 flash 协议定义,我们通过串口给 fpga 发送指令,fpga 解析指令之后,转化为对 flash_se、flash_pp、flash_rd 的控制时序(即fpga能根据接收到的指令产生控制对应模块需要的输入信号),实现对 flash 的读or写or擦除操作。

既然要与上位机串口交互,我们必须制定一个协议,我们制定三种数据包类型,擦除命令包、写命令包、读命令包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/687685.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python注意事项【自我维护版】

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 本篇博客在之前的博客上进行的维护 创建Python…

服务器内存占用不足会怎么样,解决方案

在当今数据驱动的时代,服务器对于我们的工作和生活起着举足轻重的作用。而在众多影响服务器性能的关键因素当中,内存扮演着极其重要的角色。 服务器内存,也称RAM(Random Access Memory),是服务器核心硬件部…

AC/DC电源模块的节能技术与环保优势

BOSHIDA AC/DC电源模块的节能技术与环保优势 AC/DC电源模块是一种广泛应用于各种电子设备中的电源转换器。随着环保意识的增强,节能技术成为了设计和生产这些模块的关键考虑因素。本文将介绍AC/DC电源模块的节能技术以及它们所带来的环保优势。 首先,AC…

Ps 滤镜:深色线条

Ps菜单:滤镜/滤镜库/画笔描边/深色线条 Filter Gallery/Brush Strokes/Dark Strokes 深色线条 Dark Strokes滤镜通过以独特的线条风格重绘图像的暗部和亮部来增强图像的视觉效果,适用于创作具有强烈对比和动态线条效果的艺术作品。 “深色线条”滤镜可以…

MySQL企业级开发重点之事物和索引

事物 -- 解散学工部 delete from tb_dept where id 1;-- 删除部门下的员工 delete from tb_emp where dept_id 1; 介绍和操作 我们应该将两个语句写成一个语句 -- 开启事物 start transaction ;-- 解散学工部 delete from tb_dept where id 3;-- 删除部门下的员工 delete fr…

Java设计模式 _行为型模式_解释器模式

一、解释器模式 1、解释器模式 解释器模式(Interpreter Pattern)是一种行为型模式。它提供了评估语言的语法或表达式的方式。通过实现了一个表达式接口,通常该接口解释一个特定且重复出现的问题。 2、实现思路 (1)、…

担心源代码泄露?五种有效的方式做到源代码加密防泄露!

对于软件开发公司来说,源代码是企业的核心财产,其安全性不容忽视。源代码泄露不仅可能导致技术秘密被窃取,还可能给企业带来法律纠纷和经济损失。因此,保护源代码的安全至关重要。本文将介绍五种有效的方式进行源代码保护&#xf…

一次完整的GC流程

Java堆中内存区分 Java的堆由新生代(Young Generation)和老年代(Old Generation)组成。新生代存放新分配的对象,老年代存放长期存在的对象。 新生代(Young)由年轻区(Eden&a…

macOS Sonoma 无法打开分段式Dmg文件的解决办法

在macOS Sonoma 14.X及更高版本的系统中,用户可能会遇到一个棘手的问题:无法直接打开“分段式”DMG(磁盘映像)安装包文件。这种情况通常发生在尝试安装一些大型软件或游戏时,尤其是那些因为文件体积巨大而采用分段压缩…

java项目之汽车资讯网站源码(springboot+mysql+vue)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的汽车资讯网站。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 汽车资讯网站的主要使用者管…

安卓微信聊天记录恢复

实验环境 微信8.0.49(最新版)小米手机(miui14)未rootU盘(可选) 导出聊天记录 因为手机没有root,因此是无法直接在文件管理中复制微信的聊天文件。这里我用小米自带的备份工具,将微…

如何使用 ArcGIS Pro 制作地震动画

在做某些汇报的时候,除了图文,如果有动画肯定会成为加分项,这里为大家介绍一下如何使用 ArcGIS Pro 制作地震动画,希望能对你有所帮助。 添加时间 在图层属性内,选择时间选项卡,图层时间选择每个要素具有…