fpga使用spi协议擦除读写flash芯片

一.需求说明
fpga首先全擦除flash芯片,然后往flash芯片中写入一页数据,再接着读取这一页数据。
二.硬件介绍
1.flash资源介绍

  • M25P16芯片是flash芯片,容量是16Mbit。
  • 16Mbit=16×1024×1024bit=2×1024×1024byte=2,097,152 bytes 。
  • 总共有32个扇区,每个扇区有512×1024bit=65536byte。
  • 每个扇区有256页,每页有256个字节。
  • 每个地址占三个字节,第一个字节表示扇区,第二个字节表示页数,第三个字节表示页内地址。
    flash芯片的地址
    2.命令介绍
    注:在页编程(PP),扇区擦除(SE),全擦除(BE),写入状态寄存器(WRSR)这些操作之前必须先写入写使能指令(WREN)。
    flash芯片的命令
    三.时序说明
    1.两种SPI模式
    模式1:CPOL=0, CPHA=0。时钟信号在空闲状态是低电平,fpga在偶数延(下降沿)改变数据,flash在奇数延(上升沿)采集数据。
    模式2:CPOL=1, CPHA=1 。时钟信号在空闲状态是高电平,fpga在奇数延(下降沿改变数据),flash在偶数延(上升沿采集数据)。
    SPI模式
    SPI四种模式
    2.时钟频率
    fC是指令操作的频率,fR是读数据的频率。fC的最大值是50M,fR的最大值是20M,可以取12.5M,这样能满足所有的操作。
    在这里插入图片描述
    3.时序延时
    下图1处,表示当S使能信号拉低之后,与第一个上升沿之间的延时为tSLCH,大于5ns
    下图2处,表示当指令最后一位的上升沿到S使能信号拉高之间的延时为tCHSH,大于5ns
    下图3处,表示当指令写完成之后,S使能信号拉高维持的时间tSHSL,大于100ns,这样才能保证写入的指令让flash有足够的时间去执行。
    在这里插入图片描述
    发送完指令之后,需要将片选信号拉高,让flash有执行相关操作。比如发送完写使能之后,需要将片选信号拉高保持一段时间。发送全擦除指令之后,需要将片选信号拉高并保持40秒,flash才能把所有字节数据置为1(擦除),时间值如下图所示。
    在这里插入图片描述
    4.写使能时序
    在这里插入图片描述
    5.全擦除时序
    在这里插入图片描述
    在这里插入图片描述
    6.扇区擦除时序
    写入扇区擦除指令之后紧接着写入扇区的三个字节的地址。只要这个地址在这个扇区内有效即可,不用关系具体地址。
    在这里插入图片描述
    7.(页编程)页写数据时序
    页编程
    8.连续写时序
    连续写时序和页写时序类似,区别只是数据的个数。如果只写一个字节,那么data就是一个字节,写完之后把片选信号拉高即可。也可以写多个数据,想要停止写,把片选拉高就行。
    9.连续读时序
    . 读数据操作不需要发送写使能指令,且执行数据读操作过程中,片选信号拉低后和拉高前无需做规定时间等待,发送读指令+三字节地址之后,就可以在miso端口接收数据了。下图的时序图就是完整的数据普通读操作时序(对应还有一种快读模块)。
    . 数据读取首地址可以为芯片中的任何一个有效地址,使用数据读(READ)指令可以对芯片内数据连续读取,当首地址数据读取完成,会自动对首地址的下一个地址进行数据读取。若最高位地址内数据读取完成,会自动跳转到芯片首地址继续进行数据读取,只有再次拉高片选信号,才能停止数据读操作,否者会对芯片执行无线循环读操作。
    连续读数据
  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值