专利名称:基于sd接口使用环形队列快速写闪存介质的方法
技术领域:
本发明涉及一种通过SD卡Secure Digital Memory Card)接口对闪存的操作方法,特别是涉及一种基于SD接口使用环形队列快速写闪存介质的方法。
背景技术:
SD卡的技术是基于Multi-Media卡(MMC)格式上发展而来。SD卡共支持三种传输模式SPI模式,1位SD模式,4位SD模式。低速卡通常支持0 400Kbit/s数据传输率,采用SPI和1位SD传输模式。高速卡支持0 100Mbit/S数据传输率,采用4位SD传输模式。随着SD卡传输速率的提高,理论上SD卡的读写速度可以达到25Mbyte/s。在现有的技术中,闪存的上层操作是通过逻辑地址访问闪存,并认为闪存是一个逻辑地址连续分布的物理存储介质,而SD卡的固化软件则通过物理地址来实际访问闪存中的块。所以SD卡的固化软件中建立了一个逻辑地址到物理地址的对应表,即地址对照表。SD卡在接收到SD Host的写命令时,其固化软件先解析所述写命令的逻辑地址,并寻找一个物理地址来对应这个逻辑地址,即在地址对照表中建立该逻辑地址与改物理地址的对应关系。由于闪存的物理块只能对空块编程且必须顺序写,且只能按页编程,按块擦除。如果直接对逻辑地址对应的物理地址编程,则需要更多的擦除和搬移数据的工作。所以建立若干临时逻辑块,与部分逻辑地址对应。固化软件寻找与该逻辑块对应的临时逻辑块,如果不存在,则按照一定的原则,选择一个临时逻辑块和其对应的物理块整理合并,形成空块,映射到新的逻辑块,即形成与该逻辑地址对应的临时逻辑块。如果存在则直接对临时逻辑块编程,并记录逻辑页和物理页对应关系。遇到临时逻辑块写满时,就将该临时逻辑块,和对应的物理块进行整理。保存新的映射关系,并更新出新的临时逻辑块。临时逻辑块写满时,如果临时逻辑块的页记录连续,整理只需要建立临时逻辑块和逻辑地址之间的映射,并将原物理块更新为临时逻辑块,整理比较简单。如果临时逻辑块的页记录不连续,需要将临时逻辑块和物理块之间的记录进行合并整理,形成新的逻辑块,并建立其和逻辑地址之间的映射关系。
发明内容
本发明要解决的技术问题是提供一种基于SD接口使用环形队列快速写闪存介质的方法。该方法通过将SD传输数据和对闪存编程同时进行,并且环形队列使闪存数据尽量连续,减少闪存的数据搬移次数,避免产生大量碎片。为解决上述技术问题,本发明的基于SD接口使用环形队列快速写闪存介质的方法,包括步骤(1)建立环形队列,并设置环形队列地址;其中,环形队列地址包括环形队列起始地址、环形队列结束地址、当前接收数据地址、当前写闪存数据起始地址;通过当前接收数据地址和当前写闪存数据起始地址控制接收SD数据和对闪存编程;其中,每收到1包SD数据,当前接收数据地址向后移动1个单位(1个SD block大小),本次最大能处理的数据数目也相应减1 ;已接收数据数目(当前接收数据地址和当前写闪存数据起始地址之间的缓存数目)每满一个闪存页,则对闪存编程,在编程成功后,当前写闪存数据起始地址向后移动闪存页大小(N)个单位(每闪存页包含的SD block数目,下文中均记为N);(2)在接收到写命令前,接收数据数目已默认设置为1,然后接收SD写命令和第一包SD数据;(3)处理临时碎片块中的残留数据记录;其中,临时碎片块保存一次SD接口写操作结束时不满一个闪存页的记录,每个逻辑块最多只有一个这样的记录,如果该临时碎片块中包含有该逻辑块的记录,将该数据读出到环形队列中(位置在第一包数据的前面),在写操作时判断写数据的起始逻辑地址和临时碎片块中记录的数据结束地址是否连续,做相应处理当连续时,将环形队列中的数据和本次写数据拼接,保持地址连续;当不连续时,则将不满闪存页记录写入该临时逻辑块中;(4)重新设置本次接收数据数目,继续接收SD数据;在处理完临时碎片块中记录和接收完第一包SD数据后,重新设置接收数据数目;如果临时碎片块中记录和本次写数据地址连续,在临时碎片块中数据读出到环形队列中和接收完第一包SD数据后,环形队列中空闲的缓存数目将减少;所述本次接收数据数目设置为环形队列中空闲缓存的数目和本次最大能处理的数据数目两者中较小的一个;如果在此期间接收到SD写结束命令,则停止接收数据,并在编程结束后退出;若有环形队列中残留数据不满一页,则记录残留数据的逻辑地址和长度;而本次接收数据数目在闪存编程成功后会重新设置,其值会加上闪存页大小N和本次最大能处理的数据数目中较小的一个;(5)闪存换块处理并重新控制SD数据接收和闪存编程。其中,如果闪存读写遇到逻辑换块或者物理换块,则停止数据接收,并更新逻辑和物理地址映射关系,并将其保存在闪存介质中,重新计算最大能处理的数据数目后,继续接收数据;在接收到写结束命令后,设置接收数据数目默认值为1。上述步骤⑵、(4)、(5)中,SD数据接口和环形队列之间,环形队列和闪存之间的数据传输是通过DMA (Direct Memory Access,直接内存访问)方式完成的,这使SD数据接口和环形队列之间、环形队列和闪存之间能够并行操作,提高数据传输的速率。本发明的方法是通过采用内嵌式软件(即固化软件)实现。为此,适用于本发明的SD卡至少应具备控制芯片和闪存芯片,其中,控制芯片包括固化软件。由于使用环形队列接收数据,所以控制芯片必须具备额外的RAM (random access memory,随机存储器),对环形队列的初始化仅在SD卡上电初始化时进行一次。本发明以闪存块页结合的映射方式为基础,是一种提高SD卡速读写速度的方法,该方法使SD接口接收数据和对闪存编程并行工作。环形队列在物理上是一块地址连续的内存空间。本发明通过对环形队列地址的控制,预先完成闪存逻辑物理地址转换,并接收SD接口数据,同时完成对闪存的编程,在确认成功后释放队列。在接收到SD写结束命令后,如果环形队列中的数据不满闪存的页大小,数据将保留在环形队列中,或者写入临时碎片块,如果其逻辑地址与下次写SD卡的逻辑地址连续, 则可以通过控制环形队列的指针,达到闪存按页连续写的效果,避免产生大量碎片。
下面结合附图与具体实施方式
对本发明作进一步详细的说明图1是本发明利用环形队列写闪存的总体流程图;图2是本发明处理残留数据的流程图。
具体实施例方式以下实施例中的SD卡,包括SD卡控制芯片和闪存芯片,其中,控制芯片包括固化软件,控制芯片还具备额外的RAM。本实施例的基于SD接口使用环形队列快速写闪存介质的方法,如图1所示,具体步骤包括上电初始化,初始化等待接收SD写数据的环形队列,设置环形队列起始地址和环形队列结束地址。其中,环形队列包括若干个数据缓存,根据闪存的页大小而定。由于SD卡在接收到写命令后,第一包数据必须立刻接收。在接收到SD HOST的写命令后,固化软件还未计算本次最大能处理的数据数目,本实施方案提出在接收到SD HOST的写命令前已经设置好当前接收数据地址、当前写闪存数据起始地址和本次接收数据数目。步骤S10,设置当前接收数据地址和当前写闪存数据起始地址。步骤Sll,设置本次接收数据数目为1,并使能接收数据。步骤S12,在接收到写命令和第一包数据后即停止接收数据(SD DATAO线设置成忙状态)。查询到逻辑地址对应的临时逻辑块后,判断临时碎片块中是否包含本逻辑块中的临时记录,临时碎片块是用于保存一次SD接口写操作结束时不满一个闪存页的记录,每个临时逻辑块最多只有一个这样的记录,本次写临时逻辑块时会将上次的碎片块中的记录写入临时逻辑块。步骤S13,处理当前临时逻辑块的残余记录,具体流程见图2 步骤S20,判断临时碎片块中是否包含本逻辑块中的临时记录;如果包含,则按照步骤S21操作;如果不包含,则接收数据,执行数据操作;步骤S21,从临时碎片块读出临时记录到环形队列;步骤S22,根据本逻辑块的临时记录的地址信息,判断本次写数据的逻辑地址和残留在环形队列中的数据结束地址是否连续;步骤S23,如果不连续,则将残留在环形队列中的数据写入该临时逻辑块中,并记录逻辑页和物理页对应关系,重新设置当前写闪存数据起始地址;步骤S24,如果连续,则将残留在环形队列中的数据和第一包数据拼接,重新设置当前写闪存数据起始地址;在处理完残留数据后,需要重新计算本次最大能处理的数据数目,计算方法较关键,即步骤S14。SD在写临时逻辑块的过程中会遇到闪存逻辑换块或者物理换块的情况。逻辑换块,即临时逻辑块写到最后一页,需要更新。物理换块,即写到逻辑块对应物理块的最后一页,需要更新映射关系。步骤S15,设置本次接收数据数目。本次能写的扇区的最大数目为距离逻辑换块和物理换块,还能写的扇区数。本次接收数据数目设置为环形队列中空闲缓存的数目和本次最大能处理的数据数目两者中较小的一个。步骤S16,接收数据,并操作环形队列地址。每接收到1包SD数据,当前接收数据地址所指向的缓存地址向后移动一个单位(IfSD block大小),若遇到队列结束,其后的指向记为起始地址。这样就形成了环形队列。本次接收数据数目和本次最大能处理的数据数目均减一。步骤S17,如果在写的过程中收到写结束命令,则将环形队列中满页的数据编程到闪存中,不对不满一页的残留数据,仅记下其逻辑地址和长度。在一定时间内不对SD卡操作则将该不满页记录写入临时碎片块。在下次写该逻辑块时按照步骤S20中的方法对其处理。这样处理主要是尽量保持临时逻辑块的编程尽量物理连续。步骤S18,如果没有收到写结束命令,在接收SD数据的同时,当环形队列中的数据数目满一个闪存页(计算方法为当前接收数据地址和当前写闪存数据起始地址之间的缓存数目),则对闪存编程。在编程确认成功后,将当前写闪存数据起始地址向后移动N(闪存页大小)个单位。重新设置本次接收数据数目,如果此时本次最大能处理的数据数目不小于N,由于队列中空闲缓存的增加,本次接收数据数目加上N;如果本次最大能处理的数据数目小于N,本次接收数据数目加上本次最大能处理的数据数目。直到两者同时减为0。步骤S19,如果SD HOST继续写操作,则执行逻辑换块或者物理换块。设置SD DATAO线设置成忙状态,固化软件对当前页编程结束后,将对该临时逻辑块和及其对应的物理块进行整理。如果是物理换块,则重新分配新的临时逻辑块。如果是逻辑换块,则重新计算新的逻辑块对应的物理块地址,分配对应的新临时逻辑块。然后按照步骤S14,设置新的本次接收数据数目和本次最大能处理的数据数目,重新使能接收SD数据和编程。按照上述步骤进行操作,能提高SD卡速读写速度,而且能避免产生大量碎片。
权利要求
1.一种基于SD接口使用环形队列快速写闪存介质的方法,包括步骤(1)建立环形队列,并设置环形队列地址;(2)在接收到写命令前,接收数据数目已默认设置为1,然后接收SD写命令和第一包SD数据;(3)处理临时碎片块中的残留数据记录;(4)重新设置本次接收数据数目,继续接收SD数据;(5)闪存换块处理并重新控制SD数据接收和闪存编程。
2.如权利要求1所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述步骤(1)中,环形队列地址包括环形队列起始地址、环形队列结束地址、当前接收数据地址、当前写闪存数据起始地址。
3.如权利要求2所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述步骤(1)中,每接收到1包SD数据,当前接收数据地址向后移动1个单位,本次最大能处理的数据数目也相应减1 ;已接收数据数目每满一个闪存页,则对闪存编程,在编程成功后,当前写闪存数据起始地址向后移动闪存页大小N个单位。
4.如权利要求1所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述步骤⑵、⑷、(5)中,SD数据接口和环形队列之间,环形队列和闪存之间的数据传输是通过直接内存访问方式完成。
5.如权利要求1所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述步骤(3)中,临时碎片块保存一次SD接口写操作结束时不满一个闪存页的记录,每个逻辑块最多只有一个这样的记录,如果该临时碎片块中包含有该逻辑块的记录,将该数据读出到环形队列中,在写操作时判断写数据的起始逻辑地址和临时碎片块中记录的数据结束地址是否连续,做相应处理当连续时,将环形队列中的数据和本次写数据拼接,保持地址连续;当不连续时,则将不满闪存页记录写入该临时逻辑块中。
6.如权利要求5所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述连续时,在临时碎片块中数据读出到环形队列中和接收完第一包SD数据后,环形队列中空闲的缓存数目各减少。
7.如权利要求1所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述步骤中,本次接收数据数目设置为环形队列中空闲缓存的数目和本次最大能处理的数据数目两者中较小的一个。
8.如权利要求7所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述本次接收数据数目在闪存编程成功后会重新设置,其值会加上闪存页大小N和本次最大能处理的数据数目中较小的一个。
9.如权利要求1所述的基于SD接口使用环形队列快速写闪存介质的方法,其特征在于所述步骤(5)中,如果闪存读写遇到逻辑换块或者物理换块,则停止数据接收,并更新逻辑和物理地址映射关系,并将其保存在闪存介质中,重新计算最大能处理的数据数目后,继续接收数据;在接收到写结束命令后,设置接收数据数目默认值为1。
全文摘要
本发明公开了一种基于SD接口使用环形队列快速写闪存介质的方法,包括步骤(1)建立环形队列,并设置环形队列地址;(2)在接收到写命令前,接收数据数目已默认设置为1,然后接收SD写命令和第一包SD数据;(3)处理临时碎片块中的残留数据记录;(4)重新设置本次接收数据数目,继续接收SD数据;(5)闪存换块处理并重新控制SD数据接收和闪存编程。本发明可以减少闪存的数据搬移次数,避免产生大量碎片,提高SD卡速读写速度。
文档编号G11C16/06GK102568570SQ20101057674
公开日2012年7月11日 申请日期2010年12月7日 优先权日2010年12月7日
发明者石磊 申请人:上海华虹集成电路有限责任公司