本发明涉及固态硬盘技术领域,特别是涉及一种基于spiflash的数据写入方法、装置、计算机设备和存储介质。
背景技术:
目前,随着固态硬盘技术的发展,spiflash作为非易失性存储介质有着越来越广泛的应用。
在传统技术中,芯片在使用spiflash存储数据时,往往设置好spi模块的度参数后,就直接运行模块往spiflash中写数据,但是这种方式存在着问题。当spi模块的速度过快时,cpu会没有及时将数据写入到spi模块中,出现输出的spi数据有时间间隔,这会使得数据不符合spiflash协议,从而造成写入失败等问题,影响了芯片写spiflash的效率。
技术实现要素:
基于此,有必要针对上述技术问题,提供一种可以提高spiflash写入速度的基于spiflash的数据写入方法、装置、计算机设备和存储介质。
一种基于spiflash的数据写入方法,所述方法包括:
获取基于spiflash的数据写入请求;
根据所述基于spiflash的数据写入请求启动芯片并对spi进行初始化;
判断所述spi速度相对于cpu是否为高速;
若所述spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输;
若所述spi速度相对于cpu不为高速则直接进行数据传输。
在其中一个实施例中,所述若所述spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输的步骤还包括:
若所述spi速度相对于cpu为高速则cpu向spififo中写入数据直至所述spififo满;
当所述spififo满时,使能spiflash开始数据传输,同时cpu不断向spififo中写入数据;
判断所述spififo是否为空;
若所述spififo不为空则等待数据传输,若所述spififo为空则重复写入数据的步骤直至所有数据全部传输完毕。
在其中一个实施例中,所述若所述spi速度相对于cpu不为高速则直接进行数据传输的步骤包括:
若所述spi速度相对于cpu不为高速则直接使能spiflash开始数据传输;
判断数据是否传输完成;
若数据传输完成则结束数据传输。
在其中一个实施例中,在所述判断数据是否传输完成步骤之后还包括:
若数据没有传输完成,则继续向spififo中写入数据;
判断所述spififo是否为满;
若所述spififo不满,则cpu继续向spi中写入数据直至fifo为满;若所述spififo为满,则等待数据传输直至所有数据传输完毕。
一种基于spiflash的数据写入装置,所述基于spiflash的数据写入装置包括:
获取模块,所述获取模块用于获取基于spiflash的数据写入请求;
初始化模块,所述初始化模块用于根据所述基于spiflash的数据写入请求启动芯片并对spi进行初始化;
判断模块,所述判断模块用于判断所述spi速度相对于cpu是否为高速;
第一传输模块,所述第一传输模块用于若所述spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输;
第二传输模块,所述第二传输模块用于若所述spi速度相对于cpu不为高速则直接进行数据传输。
在其中一个实施例中,所述第一传输模块还用于:
若所述spi速度相对于cpu为高速则cpu向spififo中写入数据直至所述spififo满;
当所述spififo满时,使能spiflash开始数据传输,同时cpu不断向spififo中写入数据;
判断所述spififo是否为空;
若所述spififo不为空则等待数据传输,若所述spififo为空则重复写入数据的步骤直至所有数据全部传输完毕。
在其中一个实施例中,所述第二传输模块还用于:
若所述spi速度相对于cpu不为高速则直接使能spiflash开始数据传输;
判断数据是否传输完成;
若数据传输完成则结束数据传输。
在其中一个实施例中,所述第二传输模块还用于:
若数据没有传输完成,则继续向spififo中写入数据;
判断所述spififo是否为满;
若所述spififo不满,则cpu继续向spi中写入数据直至fifo为满;若所述spififo为满,则等待数据传输直至所有数据传输完毕。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项方法的步骤。
上述基于spiflash的数据写入方法、装置、计算机设备和存储介质,通过获取基于spiflash的数据写入请求;根据所述基于spiflash的数据写入请求启动芯片并对spi进行初始化;判断所述spi速度相对于cpu是否为高速;若所述spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输;若所述spi速度相对于cpu不为高速则直接进行数据传输。本发明通过根据spi速度,将spi的写入方式分成两种:直接数据传输方式和先写spififo至满再开始数据传输的方法,实现了提高spiflash的写入速度,将芯片的性能充分发挥出来,节约spiflash写入时间。
附图说明
图1a为传统技术中spiflash数据写入方式的示意图;
图1b为图1a下写入方式中传输的数据流的示意图;
图2a为传统技术中spiflash数据写入方式中当spi模块传输速度比cpu写入速度快时的示意图;
图2b为图2a下写入方式中传输的数据流的示意图;
图3为一个实施例中基于spiflash的数据写入方法的流程示意图;
图4为另一个实施例中基于spiflash的数据写入方法的流程示意图;
图5为再一个实施例中基于spiflash的数据写入方法的流程示意图;
图6为又一个实施例中基于spiflash的数据写入方法的流程示意图;
图7为一个实施例中基于spiflash的数据写入方法的完整实现的流程示意图;
图8为一个实施例中基于spiflash的数据写入装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
现有的spiflash写入方式主要是在使能spiflash后,cpu将数据写入spi模块的fifo中,然后由spi模块将数据输出。
如图1a所示,为目前通用的spiflash写入方式,cpu不断的将数据写入到spi模块的fifo中(fifo满时不写入),spi模块将cpu写入的数据按照spiflash协议的方式写入到spiflash中,如图1b所示。
图1a的数据传输方式存在着一定问题。如图2a所示,当spi模块传输速度比cpu写入速度快时,就会导致spi模块的fifo变成空,出现spi等待cpu将数据写入spififo中的情况,从而导致spi输出的数据出现断裂(无有效数据输出)。如图2b所示,传输数据的时序上出现了无数据的情况,这样的数据时序无法满足spiflash写入协议,从而导致spiflash写入数据失败的情况发生。
针对这个问题,本发明提出了一种能够有效提高spiflash写入速度的方法。针对spi写入速度的快慢,区别对待,使用两种不同的方式往spiflash中写数据,这大大提高了spiflash的写入速度,更好的发挥出芯片的性能,节约了时间,提高了效率。
在一个实施例中,如图3所示,提供了一种基于spiflash的数据写入方法,该方法包括:
步骤302,获取基于spiflash的数据写入请求;
步骤304,根据基于spiflash的数据写入请求启动芯片并对spi进行初始化;
步骤306,判断spi速度相对于cpu是否为高速;
步骤308,若spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输;
步骤310,若spi速度相对于cpu不为高速则直接进行数据传输。
具体地,首先,获取基于spiflash的数据写入请求,并根据该请求的具体内容对芯片上电启动芯片。芯片启动后初始化spi模块。初始化spi模块之后,对比芯片的cpu传输速度以及spi传输速度,并判断spi速度相对于cpu是否为高速。若spi速度相对于cpu为高速,则开始传输数据,想fifo中压入数据至满,当spififo被写至满后再通过使能spiflash开始进行数据传输。若spi速度相对于cpu不为高速则直接通过使能spiflash进行数据传输。
在本实施例中,通过获取基于spiflash的数据写入请求;根据基于spiflash的数据写入请求启动芯片并对spi进行初始化;判断spi速度相对于cpu是否为高速;若spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输;若spi速度相对于cpu不为高速则直接进行数据传输。本实施例通过根据spi速度,将spi的写入方式分成两种:直接数据传输方式和先写spififo至满再开始数据传输的方法,实现了提高spiflash的写入速度,将芯片的性能充分发挥出来,节约spiflash写入时间。
在一个实施例中,如图4所示,提供了一种基于spiflash的数据写入方法,该方法中若spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输的步骤还包括:
步骤402,若spi速度相对于cpu为高速则cpu向spififo中写入数据直至spififo满;
步骤404,当spififo满时,使能spiflash开始数据传输,同时cpu不断向spififo中写入数据;
步骤406,判断spififo是否为空;
步骤408,若spififo不为空则等待数据传输,若spififo为空则重复写入数据的步骤直至所有数据全部传输完毕。
具体地,参考图7,在芯片启动初始化spi模块后,进行判断,判别spi速度是否相对于cpu为高速,如果是高速则判断数据是否传输完成,若完成,则结束传输,若没有则cpu向spififo中写入数据,至fifo满。当spififo满时,使能spiflash,开始数据传输,同时cpu不断的向fifo中写入数据。最后,判断spififo的fifo是否为空,若不为空,则等待数据传输,若为空则重复上述步骤,直至数据全部传输完毕
在本实施例中,避免了当spi模块的速度过快时,由于cpu会没有及时将数据写入到spi模块中,出现输出的spi数据有时间间隔,进而使得数据不符合spiflash协议,从而造成写入失败等问题,实现了提高芯片写spiflash的效率。
在一个实施例中,如图5所示,提供了一种基于spiflash的数据写入方法,该方法中若spi速度相对于cpu不为高速则直接进行数据传输的步骤包括:
步骤502,若spi速度相对于cpu不为高速则直接使能spiflash开始数据传输;
步骤504,判断数据是否传输完成;
步骤506,若数据传输完成则结束数据传输。
在一个实施例中,如图6所示,提供了一种基于spiflash的数据写入方法,该方法中在判断数据是否传输完成步骤之后还包括:
步骤602,若数据没有传输完成,则继续向spififo中写入数据;
步骤604,判断spififo是否为满;
步骤606,若spififo不满,则cpu继续向spi中写入数据直至fifo为满;若spififo为满,则等待数据传输直至所有数据传输完毕。
具体地,参考图7为本实施例中提出的提高spiflash写入速度的方法,步骤如下:
步骤1、芯片启动后初始化spi模块。
步骤2、判断spi的速度相对于cpu的速度是否为高速,如果spi是高速,则直接步骤7,否则步骤3。
步骤3、spi为低速,使能spiflash。
步骤4、判断数据是否传输完成,若完成,则结束传输,若没有则继续向spififo中写入数据,开始数据传输。
步骤5、判断spififo是否满,若不满则cpu继续向spi中写入数据,若满则等待数据不满。
步骤6、重复步骤4-5,直至数据全部传输完毕。
步骤7、spi为高速。
步骤8、判断数据是否传输完成,若完成,则结束传输,若没有则cpu向spififo中写入数据,至fifo满。
步骤9、当spififo满时,使能spiflash,开始数据传输,同时cpu不断的向fifo中写入数据。
步骤10、判断spififo的fifo是否为空,若不为空,则等待数据传输,若为空则重复步骤8-9,直至数据全部传输完毕。
在本实施例中,能够大大提高spiflash的写入速度,节约时间,以充分发挥芯片性能。
应该理解的是,虽然图3-7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3-7中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图8所示,提供了一种基于spiflash的数据写入装置800,包括:
获取模块801,用于获取基于spiflash的数据写入请求;
初始化模块802,用于根据基于spiflash的数据写入请求启动芯片并对spi进行初始化;
判断模块803,用于判断spi速度相对于cpu是否为高速;
第一传输模块804,用于若spi速度相对于cpu为高速则先写spififo至满后再开始进行数据传输;
第二传输模块805,用于若spi速度相对于cpu不为高速则直接进行数据传输。
在一个实施例中,第一传输模块804还用于:
若spi速度相对于cpu为高速则cpu向spififo中写入数据直至spififo满;
当spififo满时,使能spiflash开始数据传输,同时cpu不断向spififo中写入数据;
判断spififo是否为空;
若spififo不为空则等待数据传输,若spififo为空则重复写入数据的步骤直至所有数据全部传输完毕。
在一个实施例中,第二传输模块805还用于:
若spi速度相对于cpu不为高速则直接使能spiflash开始数据传输;
判断数据是否传输完成;
若数据传输完成则结束数据传输。
在一个实施例中,第二传输模块805还用于:
若数据没有传输完成,则继续向spififo中写入数据;
判断spififo是否为满;
若spififo不满,则cpu继续向spi中写入数据直至fifo为满;若spififo为满,则等待数据传输直至所有数据传输完毕。
关于基于spiflash的数据写入装置的具体限定可以参见上文中对于基于spiflash的数据写入方法的限定,在此不再赘述。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器以及网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于spiflash的数据写入方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以上各个方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上各个方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。