CN101833995A - 闪存介质的编程方法 - Google Patents
闪存介质的编程方法 Download PDFInfo
- Publication number
- CN101833995A CN101833995A CN200910127109A CN200910127109A CN101833995A CN 101833995 A CN101833995 A CN 101833995A CN 200910127109 A CN200910127109 A CN 200910127109A CN 200910127109 A CN200910127109 A CN 200910127109A CN 101833995 A CN101833995 A CN 101833995A
- Authority
- CN
- China
- Prior art keywords
- page
- leaf
- data
- programming
- flash media
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
- G11C16/102—External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
公开了一种闪存介质的编程方法,包括:接收用来对所述闪存介质的至少一个页面进行编程的命令;从所述至少一个页面中选择出当前要编程的目标页;基于所述闪存介质中各页面之间的预定关联关系,确定与所述当前要编程的目标页相关联的关联页;以及判断所确定出的关联页中的数据是否不可丢失,其中,如果所述关联页中的数据可丢失则对所述目标页编程。该方法可以使得即使对页编程出错也不会导致闪存介质中已有数据的丢失,从而可以保护已有数据。
Description
技术领域
本申请涉及半导体存储领域,特别涉及闪存介质的编程方法。
背景技术
目前闪存介质广泛应用于多种存储设备。然而,闪存介质因其结构的固有缺陷,当对其中的某一页进行编程(即,写操作)的时候,有可能出现写入失败的情况。由于闪存介质的每一页都与特定的页相关联,因此,如果对某一页的写入出错,则与该页关联的页也可能出错。如果关联页里存储了有用数据,就会造成数据的丢失。
发明内容
本申请针对现有技术中存在的上述缺点而提出。
根据本申请的闪存介质的编程方法,包括:
接收用来对所述闪存介质的至少一个页面进行编程的命令;
从所述至少一个页面中选择出当前要编程的目标页;
基于所述闪存介质中各页面之间的预定关联关系,确定与所述当前要编程的目标页相关联的关联页;以及
判断所确定出的关联页中的数据是否不可丢失,其中,如果所述关联页中的数据可丢失则对所述目标页编程。
此外,如果所述判断步骤判断的结果是所述关联页中的数据不可丢失,则从所述至少一个页面中选择其它的页面作为当前要编程的目标页。
根据本发明的一个实施例,如果所述关联页与其在所述闪存介质中的逻辑地址之间已经建立了对应关系,则所述关联页中的数据不可丢失。根据本发明的另一个实施例,如果所述目标页的页号大于所述关联页的页号,则所述关联页中的数据不可丢失。
可选地,上述判断所确定出的关联页中的数据是否不可丢失的步骤进一步包括:判断所述目标页与其关联的关联页是否都为所述接收的命令所指向的页面,如果不是,则所述关联页中的数据不可丢失。
上述方法可以使得即使对页编程出错也不会导致闪存介质中已有数据的丢失,从而可以保护已有数据。
附图说明
图1是本申请公开的一个实施方式的闪存介质编程的流程图;以及
图2是本申请公开的另一个实施方式的闪存介质编程的流程图。
具体实施方式
下面参照附图对本申请公开的的具体实施方式进行描述。
实施方式1
参照图1,根据本申请公开的一个实施方式的闪存介质的编程处理100从步骤S11开始操作。在步骤S11,接收对闪存介质编程的命令。如背景技术部分所述,由于闪存介质的每一页都与另一页具有关联关系,如果对某一页的写入操作出错,则与该页关联的页也可能出错。如果关联页里存储了有用数据,就会造成数据的丢失。
在步骤S12,将接收到的命令所指向的第一页作为当前要编程的页面。
在步骤S13,根据闪存介质中各页面之间的预定关联关系,确定与当前要编程的目标页相关联的关联页。具体地,根据一个实施例,闪存介质中各页面之间的关系可以用一个或多个关联表来记录,关联表内容的示例见表1:
页号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... |
关联页号 | 4 | 5 | 8 | 9 | 0 | 1 | 12 | 13 | 2 | 3 |
表1
其中,上述关联表可存储在闪存介质中,然而,本领域技术人员应该理解,上述关联表还可以存储在其它位置,只要在需要的时候能读取即可,例如存储在ROM,PROM,OTPROM,EEPROM等中。
以表1为例,假设在步骤S12中确定出页号为“0”的页面为当前要写入的页面,则在步骤S13中将根据表1确定出其关联页面的页号为“4”。
在步骤S14,确定在步骤S13中确定的关联页中的数据是否不可丢失。
根据本申请,可以依据该关联页与其在闪存介质中的逻辑地址的对应关系来判断。具体地,如果该页与其在存储介质中的逻辑地址建立了对应关系,则该页的数据不可丢失;否则,该页的数据可丢失。
作为一种选择,执行对多页编程可以是按照页号顺序向后进行的(例如对0页编程后再对1页编程),因此,在步骤S14中,可以依据确定的目标页与其关联的关联页的页号大小关系来判断关联页中的数据是否不可丢失。具体地,如果确定的目标页的页号大于关联页的页号,则关联页中的数据不可丢失。例如,从0页开始对连续多页编程,当目标页为3页时,认为第3页之前的关联页0页、1页和2页中的数据都不可丢失。
如果在步骤S14中判断的结果是关联页中的数据可丢失,则在步骤S15中对目标页进行编程。否则在步骤S16中选择另一页面作为要编程的目标页。
具体地,在执行步骤S15时,首先将写入命令和待要写入的数据发送到闪存介质,并根据写入命令将数据写入到相应的目标页中。在一个实施方式中,在数据写入操作之后,还读取闪存介质的编程状态(编程状态包括“成功写入”和“写入出错”)。如果编程状态为“成功写入”,则进行后续编程;如果编程状态为“写入出错”则停止后续编程,并通过与闪存介质关联的主机的通信线路(如USB接口)向主机报告编程出错。具体报告编程出错的做法采用通信线路协议的标准定义,如闪存盘遵循USB/SCSI协议向主机报告编程出错等。
下面,以表1为例描述根据逻辑地址判断关联页中的数据是否可丢失的、连续多页编程的具体处理过程。为了简洁,下面的描述省略了步骤标号S11-S16。
假设接收到对闪存介质中的多页编程的命令,则先将命令所指的页号为0的页作为目标页,并查找到第0页的关联页为第4页。经判断第4页未与任何逻辑地址建立对应关系,即第4页的数据可丢失,则对第0页编程。之后,将命令所指的下一页即第1页作为目标页,并查找第1页的关联页为第5页,经判断第5页的数据可丢失,则对1页编程。重复执行上述流程,直到命令所指的第4页为目标页,这时查找到第4页的关联页为第0页。因为第0页已存储了数据,所以第0页的数据不可丢失,这时选取闪存介质中的另一页例如第5页作为目标页。由于第5页的关联页为第1页,而第1页也已存储了数据,因此选取闪存介质中的另一页如第6页作为目标页。第6页的关联页为第12页,经判断第12页的数据可丢失,因此可以对第12页编程。在这里,选取闪存介质中的下一页的操作可以选取闪存介质中命令所指页的下一页,也可选取其他空页。
实施方式2
以上参照图1所示的方法虽然可根据命令依次对存储介质中的多页进行编程,但若一页中的数据不可丢失则不对其关联页进行编程,这样,虽能保证有用数据不会因编程出错而丢失,但可能造成大量页闲置浪费。
为避免闲置浪费闪存介质,根据本申请公开的另一实施方式提出了另外一种对闪存介质编程的处理方法200。根据该方法,当某一命令所指的所有页都完成写入操作后,该命令才成功执行,并向主机返回命令成功执行的结果。若其中任一页写入失败,则该命令执行失败,向与存储介质关联的主机进行出错处理(如向发出命令的主机报告出错等),在这种情况下,已写入成功的页中的数据也认为是可丢失的,可以对这些页的关联页进行写入操作。下面将参照图2描述其具体操作。
在步骤S21,从主机接收请求对闪存介质中的至少一页进行写入的命令。在步骤S22,从命令所指的第一页作为待要写入数据的目标页。在步骤S23,根据预先建立的页面之间的关联关系查找目标页的关联页。在步骤S24,判断关联页与目标页是否为同一命令所指向的页面,如果是,则在步骤S27中将数据写入目标页,否则进行步骤S25。
在步骤S25,判断关联页中的数据是否不可丢失,如果数据可丢失,则在目标页中写入数据,否则执行步骤S26。
在步骤S26,选取闪存介质中的另一页作为目标页,并返回到步骤S23,依次执行步骤S23-26。
当在步骤S27中对目标页编程结束后,在步骤S28中判断编程是否出错,如果出错,则进行步骤S210,否则进行步骤S29;
在步骤S29,判断该命令所指向的页面是否已全部执行完毕。如果已执行完毕,则对连续多页进行编程的流程结束,并向主机报告命令执行完毕;如果尚未执行完毕,则返回步骤S22。
在步骤S210,进行出错处理。例如,中止执行编程命令,并向主机报告出错等。
具体地,以对连续十个页进行编程为例来对上述步骤进行进一步的说明。在步骤S22中,先从命令所指的第1页作为目标页,执行如图2所示的步骤23及后续步骤。当执行到步骤S29时,判断出命令尚未执行完毕,则回到步骤22中顺序获取命令所指的下一页(即第2页)作为目标页,并接着执行步骤23及后续步骤,......。如此类推,直到命令所指的第10页也编程完毕,则在步骤S29判断出命令所指的所有页都执行了编程,则命令执行完毕。
为便于实现上述流程,本实施方式可用关联页表RelatedPage记录页之间的关联关系。沿用上述表1,关联页表RelatedPage的数据结构如下:
const BYTE RelatedPage[128]=
{
4,//Page 0
5,//Page 1
8,//Page 2
9,//Page 3
0,//Page 4
1,//Page 5
12,//Page 6
13,//Page 7
2,//Page 8
3,//Page 9
......
}。
本实施方式设置变量FirstFreePage记录存储介质中的第一个可以进行编程的空页,设置变量FirstRiskPage记录存储介质中哪一页之前的页中数据不可丢失,即页号在FirstRiskPage之前的页的数据都是不可丢失的。根据一个实施例,变量FirstFreePage和FirstRiskPage,例如但不限于,设置在对闪存介质进行编程的控制器内存中,取值均为整数,初始化取值均为0。
设某一命令要求对存储介质进行编程,则在执行上述步骤S22时,读FirstFreePage的取值为0,即将第0页作为目标页;在步骤S23,查找关联页表,找出第0页的关联页是第4页;在步骤S24,根据命令指定的编程长度和闪存介质每页的长度判断第4页与第0页是否为同一命令所指向的页面。具体来说,设命令指定编程长度为100扇区,闪存介质每页长度为2k即4扇区,且当前目标页为第0页,则用命令指定编程长度除以闪存介质每页长度,得到执行该命令需要的页数为25,即0页到25页都为同一命令所指向的页面,因此,判断得第4页与第0页为同一命令所指。相应地,第25页与第26页就不是同一命令所指向的页面。
在步骤S25,将关联页的页号为4的页面与FirstRiskPage取值比较,得到关联页页号大于FirstRiskPage取值0,因此,判断出第4页的数据可丢失,执行步骤S27,对第0页编程。
当执行到步骤S29中时,判断出尚未执行完毕命令,则返回执行步骤S22,将FirstFreePage取值加1,FirstRiskPage的取值置为与FirstFreePage相同的取值,即1,并重新执行上述流程,接收下一命令。
设另一命令要求对当前块的四个页面编程时,按照上述流程,在执行步骤S22时,读出FirstFreePage的取值为1;在步骤S23中找出第1页的关联页是第5页,该关联页的页号5比FirstRiskPage的取值大,因此可以对第1页编程。因为这四个页的数据是一段连续完整的数据,在编程过程中,任何一页的数据都可丢失,因此不必在连续对多页编程过程中对FirstRiskPage取值进行递加,而只需在连续编程过程结束后进行一次总的加法即可。即每完成对一页的编程,FirstFreePage取值加1,FirstRiskPage不变,直到四个页都完成编程,此时FirstFreePage可能等于6,将FirstRiskPage也置为与FirstFreePage相同的取值6,再接收下一命令。
根据本发明的一个实施例,在上述流程中,每次执行步骤S27对页面进行编程后,都要读取该页的编程状态,确认对该页编程是否出错。如果编程出错则向主机报告命令执行失败,要求主机重发数据,或把缓存中的数据写入到其他块或其他页里。
根据闪存介质特性,一般页之间的关联范围限于六个页内,即页与其关联页之间的页号差不超过6,因此本实施方式可仅在目标页的前六页内查找关联页,以提高查找效率。当然,本领域技术人员应该理解,上述实施方式还有可能适用于页之间的关联范围不限于六个页的情况。上述实施方式可以仅在目标页的关联范围内查找关联页。此外,上述实施方式也可不使用变量FirstRiskPage记录数据不可丢失的页,而是将所有数据不可丢失的页的信息记录在闪存介质的预留区,查找该记录即可判断关联页数据是否可丢失。
以上所述仅为本发明的优选实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种闪存介质的编程方法,包括:
接收用来对所述闪存介质的至少一个页面进行编程的命令;
从所述至少一个页面中选择出当前要编程的目标页;
基于所述闪存介质中各页面之间的预定关联关系,确定与所述当前要编程的目标页相关联的关联页;以及
判断所确定出的关联页中的数据是否不可丢失,其中,如果所述关联页中的数据可丢失则对所述目标页编程。
2.如权利要求1所述的方法,还包括:
如果所述判断步骤判断的结果是所述关联页中的数据不可丢失,则从所述至少一个页面中选择其它的页面作为当前要编程的目标页。
3.如权利要求1所述的方法,判断所确定出的关联页中的数据是否不可丢失的步骤进一步包括:
依据所述关联页与其在所述闪存介质中的逻辑地址的关系判断所述关联页中的数据是否不可丢失,如果所述关联页与其在所述闪存介质中的逻辑地址之间已经建立了对应关系,则所述关联页中的数据不可丢失。
4.如权利要求1所述的方法,判断所确定出的关联页中的数据是否不可丢失的步骤进一步包括:
依据所述选择出的目标页与其关联的关联页的页号大小关系,判断该关联页中的数据是否不可丢失,如果所述目标页的页号大于所述关联页的页号,则所述关联页中的数据不可丢失。
5.如权利要求1所述的方法,判断所确定出的关联页中的数据是否不可丢失的步骤进一步包括:
判断所述目标页与其关联的关联页是否都为所述接收的命令所指向的页面,如果不是,则所述关联页中的数据不可丢失。
6.如权利要求1所述的方法,还包括:
如果对所述目标页进行编程的过程中发生错误,则向与所述存储介质关联的主机发送出错报告。
7.如权利要求1所述的方法,其中,所述预定关联关系记录在关联表格中。
8.如权利要求7所述的方法,其中,所述关联表格存储于所述存储介质中。
9.如权利要求1至8中任意一项所述的方法,其中,对所述目标页编程包括向所述目标页写入数据。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910127109.0A CN101833995B (zh) | 2009-03-11 | 2009-03-11 | 闪存介质的编程方法 |
PCT/CN2010/070967 WO2010102566A1 (zh) | 2009-03-11 | 2010-03-10 | 闪存介质的编程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910127109.0A CN101833995B (zh) | 2009-03-11 | 2009-03-11 | 闪存介质的编程方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101833995A true CN101833995A (zh) | 2010-09-15 |
CN101833995B CN101833995B (zh) | 2017-06-20 |
Family
ID=42718035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910127109.0A Active CN101833995B (zh) | 2009-03-11 | 2009-03-11 | 闪存介质的编程方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101833995B (zh) |
WO (1) | WO2010102566A1 (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1226709A (zh) * | 1997-11-17 | 1999-08-25 | 国际商业机器公司 | 与硬件设备进行远程交互的方法和装置 |
US20030177302A1 (en) * | 2002-03-18 | 2003-09-18 | Pasquale Pistilli | Flash memory programming |
US7280398B1 (en) * | 2006-08-31 | 2007-10-09 | Micron Technology, Inc. | System and memory for sequential multi-plane page memory operations |
CN101246738A (zh) * | 2007-01-03 | 2008-08-20 | 三星电子株式会社 | 具有备份电路的存储系统及编程方法 |
-
2009
- 2009-03-11 CN CN200910127109.0A patent/CN101833995B/zh active Active
-
2010
- 2010-03-10 WO PCT/CN2010/070967 patent/WO2010102566A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1226709A (zh) * | 1997-11-17 | 1999-08-25 | 国际商业机器公司 | 与硬件设备进行远程交互的方法和装置 |
US20030177302A1 (en) * | 2002-03-18 | 2003-09-18 | Pasquale Pistilli | Flash memory programming |
US7280398B1 (en) * | 2006-08-31 | 2007-10-09 | Micron Technology, Inc. | System and memory for sequential multi-plane page memory operations |
CN101246738A (zh) * | 2007-01-03 | 2008-08-20 | 三星电子株式会社 | 具有备份电路的存储系统及编程方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2010102566A1 (zh) | 2010-09-16 |
CN101833995B (zh) | 2017-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8868851B2 (en) | Data access method of a memory device | |
US20080195833A1 (en) | Systems, methods and computer program products for operating a data processing system in which a file system's unit of memory allocation is coordinated with a storage system's read/write operation unit | |
CN110032333B (zh) | 存储器系统及其操作方法 | |
CN110008136A (zh) | 管理闪存模块的方法及相关的闪存控制器及电子装置 | |
US8996791B2 (en) | Flash memory device, memory control device, memory control method, and storage system | |
US20060129750A1 (en) | Method and apparatus for storing multimedia data in nonvolatile storage device in units of blocks | |
US8614913B2 (en) | Method and apparatus for controlling page buffer of non-volatile memory device | |
US20050157561A1 (en) | Data recovery apparatus and method used for flash memory | |
CN101004664A (zh) | 存储卡、非易失性存储器、及其拷回操作的方法 | |
US20090013123A1 (en) | Storage Bridge and Storage Device and Method Applying the Storage Bridge | |
US20090037646A1 (en) | Method of using a flash memory for a circular buffer | |
CN101800071A (zh) | 固态盘设备及其编程失败处理方法 | |
CN111338562B (zh) | 数据存储装置与数据处理方法 | |
CN101615410A (zh) | 盘存储装置和程序 | |
US20140372831A1 (en) | Memory controller operating method for read operations in system having nonvolatile memory device | |
CN102243884B (zh) | 一种存储流媒体数据的方法及装置 | |
CN103389942A (zh) | 控制装置、存储装置及存储控制方法 | |
CN103019969A (zh) | 闪存储存装置及其不良储存区域的判定方法 | |
US8949491B1 (en) | Buffer memory reservation techniques for use with a NAND flash memory | |
CN101266828B (zh) | 混合型闪存存储装置及其操作方法 | |
CN104133640A (zh) | 从休眠快速恢复 | |
CN117873568A (zh) | 一种ssd控制器、固态硬盘及数据处理方法 | |
CN103218300A (zh) | 数据处理方法、存储器控制器与存储器储存装置 | |
US8065468B2 (en) | Data storing methods and apparatus thereof | |
US8489802B2 (en) | Recordable memory device which writes data to reformatted user area of nonvolatile semiconductor memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |