传统的Flash读写是通过CPU的软件编程完成的,读写速度慢,占用CPU资源。外,由于闪存芯片本身包含许多功能指令,因此直接操作该芯片非常困难。文提出了一种基于FPGA的读写SPI Flash的硬件实现方案。图使用硬件来控制SPI Flash,这对于完成Flash的读写,擦除,刷新和预加载操作以及同时写入SPI Flash控件非常方便。设备的IP内核可以作为SOC芯片的功能模块进行移植和重用。Flash SPI控制器用VHDL编写,通过了Modelsim 6.5g的功能仿真,并通过了FPGA开发板XUPV5-LX110T的硬件测试。现结果表明了该方案的可行性。存是一种可电擦除的可编程ROM,根据接口可分为两类:并行闪存和串行闪存。行闪存存储容量大,速度快;虽然串行闪存容量较小,但体积小,连接简单,可以减小电路面积,节省成本。SPI Flash是具有集成SPI总线接口的串行闪存。传统的并行总线接口相比,它节省了大量的I / O端口资源,从而为扩展系统功能提供了更多可能性。
于SPI Flash在各个领域越来越多地使用,其传统的读写方法不够快,占用CPU资源,操作也不简单灵活。点更大。点。
过使用硬件来控制SPI Flash,在不占用处理器资源的情况下非常方便地完成Flash的读取,写入,擦除,刷新和预加载操作。存写入的SPI控制器可以移植和重用。为SOC芯片的功能模块。此,提出了一种基于FPGA的Flash SPI控制器设计方案,并使用VHDL来实现。准备的SPI Flash控制器的IP内核已在Modelsim 6.5g上进行了功能仿真,并在FPGA开发板上进行了测试和验证,可以用作SOC芯片设计中的功能模块。解决方案中的SPI闪存芯片采用GigaDevice的GD25Q系列。SPI Flash GD25Q系列包括4M位GD25Q40、2M位GD25Q20、100万位GD25Q10和521K位GD25Q512。里将使用512K位GD25Q512。1显示了GD25Q系列SPI闪存(SOP8外壳)的引脚排列。
中,VCC和VSS均已上电并接地,其他6个引脚可直接连接至FPGA I / O引脚;写保护引脚WP#和HOLD#用于数据保护和低空闲模式功耗操作,如果不使用,可以将其设置为高电平。CS#为芯片选择信号,低电平时表示已选择该设备,否则工作在待机模式; SO是串行数据输出,数据在时钟的下降沿输出到闪存设备;如果它是串行数据条目,包括传输指令,地址和输入数据,则输入信号在时钟的上升沿被锁定在Flash设备中。SCLK是FPGA提供的串行时钟。GDQ25系列中有许多Flash SPI指令,所有指令均为8位,将CS#芯片选择信号拉低以选择器件,然后输入8位操作指令字节,串行数据是在CS#芯片选择信号被拉低之后的。样第一个时钟的上升沿,并且SPI Flash启动内部控制逻辑以自动完成相应的操作。些操作必须在输入指令后输入地址字节和伪字节,然后在操作完成后将片选信号拉至高电平。Flash SPI控制器必须能够生成Flash SPI芯片以执行各种操作(例如写入使能,刷新,预加载,读取芯片ID,读取状态寄存器) ,写入状态寄存器,扇区擦除,块擦除,恒温阀芯批量擦除(数据读取,快速数据读取,页面编程)所需的指令时序,用户只需要输入8位指令值和相应操作的相应操作地址值,SPI接口和SPI Flash之间的数据传输将在控制器内部SPI Flash状态机控制执行本文设计的Flash SPI测试系统由用户终端,FPGA和Flash SPI组成。统框图如图2所示。FPGA使用Xilinx Virtex5系列芯片(Virtex-5 XC5VLX110T),并且该芯片SPI Flash使用具有位容量的GigaDevice GD25Q512的GD25Q 512K系列。Flash SPI控制器由VHDL编写,主要为Flash SPI芯片提供串行时钟,存储在用户端输入的数据(包括指令字节,地址字节和数据字节)并传递在串行时钟的控制下,spi_dout信号线在Flash SPI芯片上逐点输出,并且在Flash SPI芯片上读取的串行数据也转换为并行数据并发送给用户。外,SPI Flash控制器还必须根据用户通过盐,addr和wr的组合发出的操作命令生成一系列控制信号,并在这些控制信号的作用下起作用根据状态机的转换方向,将产生相应的结果。于存在许多Flash SPI操作命令,并且许多操作命令具有相同的操作步骤,因此可以使用状态机来精确地控制Flash SPI操作,并且订购。GDQ25系列SPI闪存数据表的分析可以将SPI闪存控制器的工作状态分为空闲状态(IDLE),传输控制状态(TxCMD)和地址状态d高传输字节(TxADD_H)和中间传输字节地址状态(TxADD_M),传输低字节地址状态(TxADD_L),传输伪字节状态(TxDummy),传输数据状态(TxDATA)和接收数据状态(RxDATA)。外,由于所有接收到的命令值都存储在命令寄存器中,因此在执行一条指令以接收下一条用户命令时必须清除命令寄存器,以使命令状态为一旦操作完成,将为每个完成状态定义擦除(CLR_CMD)。
状态机进入CLR_CMD状态时,这表明正在进行的操作已完成,并且指令寄存器的指令值已擦除;当状态机进入IDLE状态时,用户可以输入以下操作指令以在SPI Flash上执行下一个操作。定SPI Flash的响应时间,某些等待状态(WAIT)将插入上述操作状态的中间。SPI Flash控制器的IP内核可以在Modelsim 6.5g上运行功能仿真。

我们分析SPI Flash页面编程操作和数据读取的功能仿真。面编程操作的仿真波形如图3所示。该图中,截取了输入数据00H和01H的波形,并且最多256个字节的数据可以连续输入。用户(下一轮密封三)(接第137页)输入02H页面编程命令时,状态机进入txcmd状态,并将02H页面编程命令发送到通过spi_dout的SPI Flash。数量tx_bit_cnt达到8时,指令的传输完成,状态机在等待后进入状态txadd_h,并同时擦除tx_bit_cnt。输要写入数据的相应存储空间的起始地址的高字节值89H。
tx_bit_cnt计数到8时,将发送高字节地址值89H,状态机在等待后进入txadd_m状态,并同时擦除tx_bit_cnt。上所述,地址67H和45H的中间字节被发送。add_h,add_m和add_l寄存器的值顺序传输时,状态机进入wait6状态,等待用户输入要写入Flash SPI的数据。用户将{sel,addr,wr}设置为10001b时,状态机进入txdata状态,同时tx_new_data设置为高,指示必须传输新的写入数据。txdata状态下,控制器传输第一个00H字节的写入数据。tx_bit_cnt计数到8时,将发送第一个00H字节数据,将tx_new_data拉低,将tx_empty拉高,指示当前没有可用数据。旦数据被发送,状态机进入wait6状态,等待新数据被写入。用户将{sel,addr,wr}重置为10001b之前,状态机再次进入txdata状态,同时tx_new_data设置为高,指示数据由第二个字节01H写入的将被发送。tx_bit_cnt计数到8时,第二个数据传输字节结束,tx_new_data拉低,tx_empty拉高,状态机进入wait6状态。于GDQ25系列Flash SPI页面编程一次可写入多达256个字节的数据,因此在写入数据时最多写入256次的数据时用户应格外小心,否则多余的数据将覆盖原始数据。
状态机处于wait6状态并且用户希望结束页面编程时,可以在控制器中输入NOP指令以强制结束当前页面编程操作。到NOP指令后,状态机将进入clr_cmd状态和空闲状态未决,等待下一条指令的到来。页面编程操作未完成时,总是会设置忙。

据读取命令的仿真波形如图4所示。用户输入03H数据读取命令时,状态机进入txcmd状态,而读取数据命令进入数据通过spi_dout传输到SPI Flash。数字tx_bit_cnt达到8时,指令的传输完成,状态机等待并进入状态txadd_h,该状态为要读取数据的存储空间的起始地址的高字节。送并删除tx_bit_cnt,为下一次发送做准备。址56H的高字节寄存器的值add_h通过spi_dout发送到SPI Flash。tx_bit_cnt计数到8时,状态机进入txadd_m状态并发送地址的中心字节。样,控制器在txadd_m状态和txadd_l状态下完成传输地址,中间字节34H和低字节地址12H。24位地址传输完成时,状态机在等待后进入rxdata状态,并接收从spi_din输入的第一个数据字节01H。数字rx_bit_cnt达到8时,控制器完成接收数据的第一个字节,rx_data显示01H,状态机状态进入wait8状态,等待用户定义{sel,addr, wr}以接收第二个字节。用户将{sel,addr,wr}设置为10000b时,状态机再次进入rxdata状态,从spi_din接收第二个字节数据02H,同时rx_ready被拉低,rx_empty为被拉高,rd_data被拉高,表示将读取新输入的数据。数字rx_bit_cnt达到8时,接收到第二个数据字节,将rx_ready拉高,将rx_empty拉低,rd_data显示新接收的字节数据02H,并且状态机在此之后再次进入wait8状态等待,等待用户重置。sel,addr,wr}值,接收字节数据的第三个值,类似地,可以读取SPI Flash中的所有数据。状态机处于wait8状态并且用户希望退出数据读取操作时,可以将NOP指令输入到控制器中以强制结束当前数据读取操作。到NOP指令后,状态机将进入clr_cmd状态和非活动非活动状态,等待下一条指令的到来。数据读取操作未完成时,总是会设置忙。前,SPI Flash控制器的IP内核已通过XUPV5-LX110T FPGA开发板上的硬件测试,并将用作SOC芯片设计中的功能模块。践表明,基于FPGA的SPI Flash控制器可以简化SPI Flash的读写过程,从而提高了SPI Flash的读写速度,并且具有不消耗资源的特点。CPU在运行期间,将使SPI Flash的读写更加有利。
本文转载自
恒温阀芯 https://www.wisdom-thermostats.com
