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

你可能感兴趣的:(fpga,fpga,flash,spi)