WO2006048874A2 - Method of managing a multi-bit-cell flash memory - Google Patents

Method of managing a multi-bit-cell flash memory Download PDF

Info

Publication number
WO2006048874A2
WO2006048874A2 PCT/IL2005/001149 IL2005001149W WO2006048874A2 WO 2006048874 A2 WO2006048874 A2 WO 2006048874A2 IL 2005001149 W IL2005001149 W IL 2005001149W WO 2006048874 A2 WO2006048874 A2 WO 2006048874A2
Authority
WO
WIPO (PCT)
Prior art keywords
value
flag
represent
cell
bits
Prior art date
Application number
PCT/IL2005/001149
Other languages
French (fr)
Other versions
WO2006048874A3 (en
Inventor
Menachem Lasser
Original Assignee
M-Systems Flash Disk Pioneers Ltd.
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by M-Systems Flash Disk Pioneers Ltd. filed Critical M-Systems Flash Disk Pioneers Ltd.
Publication of WO2006048874A2 publication Critical patent/WO2006048874A2/en
Publication of WO2006048874A3 publication Critical patent/WO2006048874A3/en

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5641Multilevel memory having cells with different number of storage levels
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5646Multilevel memory with flag bits, e.g. for showing that a "first page" of a word line is programmed but not a "second page"

Definitions

  • the present invention relates to flash memories and, more particularly, to a method of managing a flash memory, whose cells can be programmed, with either one bit each or more than one bit each, so that the number of bits per cell can be determined upon power-up or during recovery from power loss.
  • Flash memory devices have been known for many years. Typically, each cell within a flash memory stores one bit of information. Traditionally, the way to store a bit has been by supporting two states of the cell - one state represents a logical "0" and the other state represents a logical "1". In a flash memory cell the two states are implemented by having a floating gate above the cell's channel (the area connecting the source and drain elements of the cell's transistor), and having two valid states for the amount of charge stored within this floating gate. Typically, one state is with zero charge in the floating gate and is the initial unwritten state of the cell after being erased (commonly defined to represent the "1 " state) and another state is with some amount of negative charge in the floating gate (commonly defined to represent the "0" state).
  • the threshold voltage of the cell's transistor ⁇ i.e. the voltage that has to be applied to the transistor's control gate in order to cause the transistor to conduct
  • the threshold voltage of the cell's transistor ⁇ i.e. the voltage that has to be applied to the transistor's control gate in order to cause the transistor to conduct
  • Figure IA shows graphically how this works. Specifically, Figure IA shows the distribution of the threshold voltages of a large population of cells. Because the cells in a flash device are not exactly identical in their characteristics and behavior (due, for example, to small variations in impurities concentrations or to defects in the silicon structure), applying the same programming operation to all the cells does not cause all of the cells to have exactly the same threshold voltage. (Note that, for historical reasons, writing data to a flash memory is commonly referred to as "programming" the flash memory.) Instead, the threshold voltage is distributed similar to the way shown in Figure IA.
  • Cells storing a value of " 1 " typically have a negative threshold voltage, such that most of the cells have a threshold voltage close to the value shown by the left peak of Figure IA, with some smaller numbers of cells having lower or higher threshold voltages.
  • cells storing a value of "0" typically have a positive threshold voltage, such that most of the cells have a threshold voltage close to the value shown by the right peak of Figure IA, with some smaller numbers of cells having lower or higher threshold voltages.
  • MLC Multi Level Cells
  • the other three states are typically assigned by the following order from left to right - "10", "00", "01".
  • the range that the cell's threshold voltage is in must be identified correctly; only in this case this cannot always be achieved by comparing to one reference voltage, and several comparisons may be necessary.
  • one way to read the lower bit is first to compare the cell's threshold voltage to a reference comparison voltage F 1 and then, depending on the outcome of the comparison, to compare the cell's threshold voltage to either a zero reference comparison voltage or a reference comparison voltage F 2 .
  • Another way to read the lower bit is to compare the cell's threshold voltage unconditionally to both the zero reference voltage and F 2 . In either case, two comparisons are needed.
  • MBC devices provide a great advantage of cost - using a similarly sized cell one stores two bits rather than one.
  • MBC flash the average read and write times of MBC memories are longer than of SLC memories, resulting in lower performance.
  • the reliability of MBC is lower than SBC.
  • SBC the differences between the threshold voltage ranges in MBC are much smaller than in SBC.
  • a disturbance in the threshold voltage e.g. leaking of the stored charge causing a threshold voltage drift, interference from operations on neighboring cells, etc.
  • SBC a disturbance in the threshold voltage (e.g. leaking of the stored charge causing a threshold voltage drift, interference from operations on neighboring cells, etc.) that may have gone unnoticed in SBC because of the large gap between the two states, might cause an MBC cell to move from one state to another, resulting in an erroneous bit.
  • the end result is a lower quality specification of MBC cells in terms of data retention time or the endurance of the device to many write/erase cycles.
  • FIGS IA and IB illustrate why - suppose a cell was really programmed using 1-bit mode to contain a "0", and the distribution is according to Figure IA. If the system mistakenly assumes the cell was programmed using 2-bit mode, the system will instruct the device to attempt a reading using 2-bit mode, which will cause the device circuitry to try to identify which of the four states exists.
  • a method of managing a flash memory including the steps of: (a) reserving at least one cell of the flash memory to use as a flag cell to represent a value of a number N of bits of data to store in each of a plurality of other cells of a block of the flash memory; (b) selecting a value of N from among at least three candidate values of N; and (c) programming the at least one flag cell to represent the selected value of N.
  • a memory device including: (a) a flash memory including at least one block, each at least one block including a plurality of cells; and (b) a flash memory controller operative, for one of the at least one block: (i) to reserve at least one cell of the one block to use as a flag cell to represent a value, of a number N of bits of data to store in a plurality of other cells of the one block, (ii) to select a value of N from among at least three candidate values of N, and (iii) to program the at least one flag cell to represent the selected value of N.
  • a system including: (a) a flash •memory including at least one block, each at least one block including a plurality of cells; (b) a non-volatile memory for storing program code for, for one of the at least one block: (i) reserving at least one cell of the one block to use as a flag cell to represent a value, of a number JV of bits of data to store in a plurality of other cells of the one block, (ii) selecting a value of JV from among at least three candidate values of JV, and (iii) programming the at least one flag cell to represent the selected value of JV; and (c) a processor for executing the program code.
  • a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a flash memory that includes at least one block, each at least one block including a plurality of cells, the computer-readable code including program code for, for one of the at least one block: (a) reserving at least one cell of the one block to use as a flag cell to represent a value, of a number JV of bits of data to store in a plurality of other cells of the one block; (b) selecting a value of JV from among at least three candidate values of JV; and (c) programming the at least one flag cell to represent the selected value of JV.
  • a method of managing a non ⁇ volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV ⁇ l bits and which are separated from one another including the steps of: (a) reserving at least one storage element to use as a flag storage element to represent a value of JV for each of a plurality of other storage elements of at least a portion of the non- volatile array; (b) selecting a value of JV from among at least three candidate values of JV; and (c) setting the at least one flag storage element to represent the selected value of JV.
  • a memory device including: (a) a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV ⁇ l bits and which are separated from one another; and (b) a controller for: (i) reserving at least one storage element to use as a flag storage element to represent a value of N for each of a plurality of other storage elements of at least a portion of the non- volatile array, (ii) selecting a value of N from among at least three candidate values of JV, and (iii) setting the at least one flag storage element to represent the selected value of JV.
  • a system including: (a) a non ⁇ volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV ⁇ l bits and which are separated from one another; (b) a non-volatile memory for storing program code for: (i) reserving at least one storage element to use as a flag storage element to represent a value of N for each of a plurality of other storage elements of at least a portion of the non- volatile array; (ii) selecting a value of JV from among at least three candidate values of TV, and (iii) setting the at least one flag storage element to represent the selected value of JV; and (c) a processor for executing the program code.
  • a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV ⁇ l bits and which are separated from one another, the computer- readable code including: (a) program code for reserving at least one storage element to use as a flag storage element to represent a value of JV for each of a plurality of other storage elements of at least a portion of the non- volatile array; (b) program code for selecting a value of JV from among at least three candidate values of JV, and (c) program code for setting the at least one flag storage element to represent the selected value of JV.
  • a method of managing a flash memory including the steps of: (a) selecting a value of a number JV>3 of respective bits of data to be stored in each of a plurality of cells of at least a portion of a flash memory; (b) reserving a single other cell of the flash memory to use as a flag cell to represent a value of how many of the N bits are stored in each cell of the plurality; and (c) successively, for each value of n between 1 and JV: (i) programming each cell of the plurality to represent a first respective n bits of the data, and (ii) programming the flag cell to represent n.
  • a memory device including: (a) a flash memory including at least one block, each at least one block including at least one page, each at least one page including a plurality of cells; and (b) a flash memory controller operative, for a portion of the flash memory selected from the group consisting of one of the at least one block and one of the at least one page of one of the at least one block: (i) to select a value of a number JV>3 of respective bits of data to be stored in each of a plurality of cells of the portion, (ii) to reserve a single other cell of the portion to use as a flag cell to represent a value of how many of the JV bits are stored in each cell of the plurality, and (iii) successively, for each value of n between 1 and JV: (A) to program each cell of the plurality to represent a first respective n bits of the data, and (B) to program the flag cell to represent n.
  • a system including: (a) a flash memory including at least one block, each at least one block including at least one page, each at least one page including a plurality of cells; (b) a non-volatile memory for storing program code for, for a portion of the flash memory selected from the group consisting of one of the at least one block ⁇ and one of the at least one page of one of the at least one block: (i) selecting a value of a number N ⁇ 3 of respective bits of data to be stored in each of a plurality of cells of the portion, (ii) reserving a single other cell of the portion to use as a flag cell to represent a value of how many of the N bits are stored in each cell of the plurality, and (iii) successively, for each value of n between 1 and N: (A) programming each cell of the plurality to represent a first respective n bits of the data, and (B) programming the flag cell to represent n; and (c) a processor for executing
  • a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a flash memory that includes at least one block, each at least one block including at least one page, each at least one page including a plurality of cells, the computer-readable code including program code for, for a portion of the flash memory selected from the group consisting of one of the at least one block and one of the at least one page of one of the at least one block: (a) selecting a value of a number N>3 of respective bits of data to be stored in each of a plurality of cells of the portion; (b) reserving a single other cell of the portion to use as a flag cell to represent a value of how many of the N bits are stored in each cell of the plurality; and (c) successively, for each value of n between 1 and N: (i) programming each cell of the plurality to represent a first respective n bits of the data, and (ii) programming the flag cell to represent n.
  • a method of managing a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another including the steps of: (a) selecting a number JV>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non-volatile array; (b) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of the plurality; and (c) successively, for each value of n between 1 and N: (i) setting each storage element of the plurality to represent a first respective n bits of the data, and (ii) setting the flag storage element to represent n.
  • a memory device including: (a) a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another; and (b) a controller for: (i) selecting a number N ⁇ 3 of bits to ⁇ ⁇ be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non-volatile array, (ii) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of the plurality, and (iii) successively, for each value of n between 1 and N: (A) setting each storage element of the plurality to represent a first respective n bits of the data, and (B) setting the flag storage element to represent n.
  • a system including: (a) a non ⁇ volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another; (b) a non-volatile memory for storing program code for: (i) selecting a number JV>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non- volatile array, (ii) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of the plurality, and (iii) successively, for each value of n between 1 and N: (A) setting each storage element of the plurality to represent a first respective n bits of the data, and (B) setting the at least one flag storage element to represent n; and (c) a processor for executing the program code.
  • a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another, the computer-readable code including: (a) program code for selecting a number N ⁇ 3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non- volatile array; (b) program code for reserving a single other storage element to use as a flag storage element to represent a value of how many of the
  • the smallest group of flash cells for which an N-bit programming mode can be jointly selected is referred to herein as a "block" of flash cells.
  • the smallest group of cells within a block of a NAND flash memory which can be programmed together is referred to herein as a "page”.
  • a flash memory is managed by reserving one or more cells of the flash memory to use as (a) flag cell(s) to represent how many ("N") bits of data to store in the cells of a block of the flash memory.
  • a value of N is selected from among at least three candidate values.
  • the flag cell(s) is/are programmed to represent the selected value of N.
  • the cells of the block then are programmed to represent the data in accordance with the selected value of N.
  • only one cell is reserved to be used as a flag cell for the block, or N is selected from among only three candidate values, or N is selected from among four candidate values.
  • a flash memory is managed by selecting a value of a number N>2 of respective data bits to store in each of the cells of a portion (typically a block or a page) of a flash memory (or possibly of the whole memory), and one other cell of the flash memory is reserved to be used as a flag cell to represent a value of how many of the N bits actually are stored in each of the cells that hold the data bits.
  • the flag cell is programmed to represent the number n of bits currently actually represented by the cells that hold the data bits.
  • N is selected to be exactly 3 or 4.
  • a memory device of the present invention includes a flash memory that includes at least one block of cells (for both aspects) or at least one page of cells (for the second aspect), and a flash memory controller that manages the flash memory according to the method of the relevant aspect of the present invention.
  • a system of the present invention includes a flash memoryrthat includes at least one block of cells (for both aspects) or at least one page (for the second aspect), a non-volatile memory (usually but not necessarily separate from the flash memory) for storing program code for implementing the method of the relevant aspect of the present invention, and a processor for executing the code.
  • the scope of the present invention also includes a computer-readable storage medium in which is embedded computer-readable code for implementing the method of one of the two aspects of the present invention.
  • flash memories that include non- volatile arrays of storage elements such that each storage element has a storage window divisible into a plurality of defined ranges of storage levels that represent one or more bits of data.
  • the cells of a MBC flash memory are examples of such storage elements.
  • the blocks of a MBC flash memory are examples of such non- volatile arrays.
  • "programming" or “setting” a flag cell or a non- volatile storage element to represent one member of a set of integers means placing the flag cell or the nonvolatile storage element in a state that corresponds only to that integer and to no other integer of the set.
  • FIGs. IA and 1C illustrate the threshold voltage distributions of flash cells programmed in 1-bit mode
  • FIG. IB illustrates the threshold voltage distributions of flash cells programmed in 2- bit mode
  • FIG. 2 is a high-level block diagram of a flash memory device of the present invention. • ;
  • FIG. 3 is a high-level block diagram of a computer system of the present invention
  • FIG. 4 illustrates the threshold voltage distributions of flash cells programmed in 3-bit mode
  • FIG. 5 illustrates a possible threshold distribution of flash cells that are incompletely programmed in 3-bit mode.
  • the present invention is of a method of managing the programming of the cells of a flash memory with different numbers of bits. Specifically, the present invention can be used, during normal power-up or upon recovery from a power loss, to determine the bit number mode that was used to program the flash cells of each block of the memory or the number of bits that actually have been programmed in the flash cells of each page of the memory.
  • a reference voltage of zero then serves to distinguish the unprogrammed state of any flash cell from the programmed state(s) of any flash cell, independent of the value of N used to program the cell. This is precisely the situation illustrated in Figures IA and IB.
  • each block of a flash memory that supports N>1 a set of one or more cells is reserved for use as flag cells to indicate the value of N to be used for reading and programming the cells of the block.
  • Each page of a NAND flash memory includes both a main portion that -typically is used to store user data and an additional, smaller portion that typically is reserved for management functions. Most conveniently, the flag cells are selected from among the cells assigned to the management portions of the blocks.
  • the threshold voltage of the flag cell is found to be negative, then JV is guaranteed to be equal to 1, and if the threshold voltage of the flag cell is found to be positive, then JV is guaranteed to be equal to 2.
  • FIG. 2 is a high-level block diagram of a flash memory device 10 of the present invention.
  • Figure 2 is adapted from Figure 1 of US Patent No. 5,404,485, to Ban, which patent is incorporated by reference for all purposes as if fully set forth herein.
  • Device 10 includes an MBC NAND flash memory 12, a flash memory controller 14 and a RAM 16. Controller 14 manages memory 12 as taught in US 5,404,485 and in US Patent No. 5,937,425, also to Ban, which patent also is incorporated by reference for all purposes as if fully set forth herein. (US 5,404,485 applies to the management of flash memories generally. US 5,937,425 is specific to NAND flash memories.) Controller 14 exchanges data stored in memory 12 with a host device (not shown) in the conventional manner. For example, if device 10 is used for non- volatile data storage in a system such as a personal computer, then controller 14 communicates with the other components of the system via the system's bus. If device 10 is a portable storage device that is reversibly attached to a host using a suitable interface, for example the USB interface taught in US Patent No. 6,148,354, to Ban et al., then controller 14 communicates with the host via that interface.
  • a host device not shown
  • controller 14 reserves one or more flag cells to store the value of N selected for that block and sets that/those flag cell(s) accordingly, as described above. During normal system power-up, or during recovery from a power failure, controller 14 reads each block's flag cell(s), as described above, to determine which value of N has been used to program the cells of that block.
  • Device 10 is an example of a firmware implementation of the method of the present
  • FIG. 3 is a partial high level block diagram of a computer system 20 of the present invention that is an example of a software implementation of the method of the present invention.
  • System 20 includes a processor 22; a RAM 24; input and output devices such as a keyboard and a display screen, represented collectively by I/O block 32; and two non-volatile mass storage memories: a hard disk 26 and an MBC NAND flash memory 30.
  • Components 22, 24, 26, 30 and 32 communicate with each other via a common bus 34.
  • Among the data stored on hard disk 26 is the code of an operating system 28.
  • processor 22 downloads the code of operating system 28 to RAM 24 and then executes the code of operating system 28 from RAM 24 to manage the operation of system 20.
  • Hard disk 26 thus is an example of a computer-readable storage medium in which is embedded computer-readable code for implementing the method of the present invention.
  • the code of operating system 28 includes code for managing NAND flash memory 30 as taught in US 5,404,485 and in US 5,937,425.
  • the code of operating system 28 also includes code for managing NAND flash memory 30 according to the principles of the present invention.
  • processor 22 reserves one or more flag cells to store the value of JV selected for that block and programs that/those flag cell(s) accordingly, as described above.
  • the above embodiment of the present invention has been described in terms of distinguishing between two different values of N.
  • a similar second embodiment of the present invention can be used to distinguish among more than two possible values of N.
  • N is selectable from a group containing exactly three values. This is for example the case when a block of cells can be programmed in one of three modes such as: a. Each cell storing one bit. b. Each cell storing two bits. c. Each cell storing three bits.
  • the following second embodiment of the present invention achieves this benefit by taking advantage of the following argument - if the data cells of the block are capable of being programmed with X ⁇ 2 N different values of JV bits per cell, then they are necessarily capable of being programmed into at least X different states when used in the mode of highest JV.
  • the highest possible number of bits per cell is equal to the number of different modes.
  • the cells may be operated with JV selectable only from one, two or four bits per cell.
  • flag should be understood to refer, not only to a binary flag which can designate one out of two states, but also to designation of one state out of X, with X being any integer. Because the flag cells are physically the same as the data cells, the flag cells have the same capability as the data cells to represent at least X different states. So a single flag cell is able to represent all possible values of N, and a single flag cell suffices to code the required mode information. Of course, a designer may still decide to duplicate the flag cells for not relying on a single cell, but even using three copies will result now in only three flag cells, a much more efficient result than before.
  • Figure 4 shows the threshold voltage distribution and a possible bits encoding scheme for the case of three bits per cell. Specifically, Figure 4 shows the eight peaks of the distribution corresponding to the eight states required for representing three bits, and also shows (above each peak) the values of the three stored bits corresponding to that state according to the encoding scheme. The un-programmed state (“111 ”) corresponds to the left-most peak.
  • the returned value unambiguously identifies the number of bits stored in the corresponding data cells, as follows: i. "I l l” -no data stored ii. "110” - one bit stored iii. " 100” - two bits stored iv "000”- three bits stored
  • There are some flash cell implementations in which reading in the N 3 mode might not produce reliable results if the cell was programmed with fewer than three bits per cell.
  • the reading of the flag cell may be done in sequential stages. For example: i. A first reading is done comparing the flag cell's threshold voltage to a reference of zero volts that reliably separates the non-programmed state from all programmed states. ii. If the first reading shows the flag cell to have a threshold lower than zero volts, we know the block was not programmed at all, and the process ends here, iii.
  • a second reading is done comparing the flag cell's threshold voltage to a reference F 1 that reliably separates between the state of exactly one bit set to zero and between the states of two or three bits set to zero. All that is required is that F 1 reliably separates between the state of only one bit set to zero and the other two programmed states and thus provides a reliable reading of the flag's second bit, and there is no need to get a full three-bit reading.
  • F 1 reliably separates between the state of only one bit set to zero and the other two programmed states and thus provides a reliable reading of the flag's second bit, and there is no need to get a full three-bit reading.
  • a third reading is done comparing the flag cell's threshold voltage to a reference F 3 that reliably separates between the state of exactly three bits set to zero and between the states of two or fewer bits set to zero. All that is required is that F 3 reliably separates between the state of all bits set to zero and the other two programmed states and thus provides a reliable reading of the flag's third bit, and there is no need to get a full three-bit reading.
  • F 3 reliably separates between the state of all bits set to zero and the other two programmed states and thus provides a reliable reading of the flag's third bit, and there is no need to get a full three-bit reading.
  • the method of the present invention are applicable not only for finding out the number of bits per cell selected for programming a block, but also the current number of bits stored in a portion of a block, even if this number is just an intermediate stage on the way to a different number of bits per cell. If the smallest chunk of programming is smaller than the smallest chunk of erasing (as is typically the case in NAND flash devices, where the smallest chunk for programming is a page and the smallest chunk for erasing is a block, with a block containing several pages), then in this case the flag cells are associated with a page rather than with a block.
  • a page is to store three bits per cell (for example because its containing block is selected to operate in three-bits-per-cell mode), but the prograrnrning process is done in stages, so that first one bit is stored in each cell of the page, then a second bit is added to each cell, and finally a third bit is added to each cell, the methods of the current invention can be used for keeping track where we are in tihe sequence of writing the three bits.
  • Reading the flag cell of a page to determine how many bits (of the N possible bits) of the data cells have been programmed is done as described above, with "page" substituted for "block", i.e. : i.
  • a first reading is done comparing the flag cell's threshold voltage to a reference of zero volts that reliably separates the non-programmed state from all programmed states, ii.
  • the first reading shows the flag cell to have a threshold lower than zero volts, we know the page was not programmed at all, and the process ends here.
  • a second reading is done comparing the flag cell's threshold voltage to a reference F 1 that reliably separates between the state of exactly one bit set to zero and between the states of two or three bits set to zero. All that is required is that F 1 reliably separates between the state of only one bit set to zero and the other two programmed states and thus provides a reliable reading of the flag's second bit, and there is no need to get a full three-bit reading.
  • F 1 reliably separates between the state of only one bit set to zero and the other two programmed states and thus provides a reliable reading of the flag's second bit, and there is no need to get a full three-bit reading.
  • the second reading shows the flag cell to have a threshold lower than F 1 , we know the page was programmed witih exactly one bit per cell, and the process ends here.
  • a third reading is done comparing the flag cell's threshold voltage to a reference Vs that reliably separates between the state of exactly three bits set to zero and between the states of two or fewer bits set to zero. All that is required is that F 3 reliably separates between the state of all bits set to zero and the other two programmed states and thus provides a reliable reading of the flag's third bit, and there is no need to get a full three-bit reading.
  • the third reading shows the flag cell to have a threshold lower than F 3 , we know the page was programmed with exactly two bits, and the process ends here. vii. If the third reading shows the flag cell to have a threshold higher than V 3 then we know the page was programmed with exactly three bits, and the process ends here.
  • the methods of the present invention are useful in both of the following scenarios: a. While attempting to read data, finding out the right mode to use for reading so as to match the mode used for writing the data. This is useful, for example, when powering up the storage system and having to read data without having prior knowledge about the mode in which that data had been written before. b. While attempting to write data, finding out the current number of bits already stored in the page to be written for the purpose of correctly carrying out the next step of programming the next bit to the written cells.
  • FIGS. 2 and 3 that were used above to illustrate a memory device and a computer system for implementing the first embodiment of the present invention, also serve to illustrate a memory device and a computer system for implementing the second embodiment of the present invention.
  • Figure 2 decides, for each block of memory 12, which of at least three possible values of iVto use for programming the data cells of that block.
  • controller 14 reserves one or more flag cells to program so as to represent the value of N selected for that block, and then sets that/those flag cells(s) accordingly, as described above.
  • controller 14 reserves one or more flag cells in each page of the block to program so as to represent the number of bits stored so far in the data cells of that page.
  • controller 14 sets the flag cell(s) of the page to indicate how many bits have been programmed so far in the data cells of the page, as described above.
  • the code of operating system 28 of Figure 3 includes code for managing NAND flash memory 30 as taught in US 5,404,485 and in US 5,937,425, and also code for managing NAND flash memory 30 according to the second embodiment of the present invention.
  • processor 22 executes the appropriate code of operating system 28 to decide, for the blocks of NAND flash memory 30, in which the user data are to be stored, which of at least three possible values of N to use for programming the data cells of that block. In each such block of NAND flash memory 30, processor 22 reserves one .
  • processor 22 reserves one or more flag cells in each page of the block to program so as to represent the number of bits stored so far in the data cells of that page. As each page is programmed successively with more and more bits per data cell, processor 22 sets the flag cell(s) of the page to indicate how many bits have been programmed so far in the data cells of the page, as described above.

Abstract

A flash memory is managed by reserving one or more cells as flag cells to represent the number N of bits to store in the cells of a memory block, selecting the value of N from at least three candidates, and programming the flag cell(s) to represent the selected value. A flash memory is managed by selecting a value of the number N>2 of bits to store in the cells of a portion (e.g. a block or page) of the memory, reserving one other cell of the memory as a flag cell to represent how many bits actually are stored in each cell of the portion, and, as the cells of the portion are successively programmed with 1≤n≤N bits, programming the flag cell to represent n.

Description

METHOD OF MANAGING A MULTI-BIT-CELL FLASH MEMORY
FIELD AND BACKGROUND OF THE INVENTION
The present invention relates to flash memories and, more particularly, to a method of managing a flash memory, whose cells can be programmed, with either one bit each or more than one bit each, so that the number of bits per cell can be determined upon power-up or during recovery from power loss.
Flash memory devices have been known for many years. Typically, each cell within a flash memory stores one bit of information. Traditionally, the way to store a bit has been by supporting two states of the cell - one state represents a logical "0" and the other state represents a logical "1". In a flash memory cell the two states are implemented by having a floating gate above the cell's channel (the area connecting the source and drain elements of the cell's transistor), and having two valid states for the amount of charge stored within this floating gate. Typically, one state is with zero charge in the floating gate and is the initial unwritten state of the cell after being erased (commonly defined to represent the "1 " state) and another state is with some amount of negative charge in the floating gate (commonly defined to represent the "0" state). Having negative charge in the gate causes the threshold voltage of the cell's transistor {i.e. the voltage that has to be applied to the transistor's control gate in order to cause the transistor to conduct) to increase. Now it is possible to read the stored bit by checking the threshold voltage of the cell - if the threshold voltage is in the higher state then the bit value is "0" and if the threshold voltage is in the lower state then the bit value is "1". Actually there is no need to accurately read the cell's threshold voltage - all that is needed is to correctly identify in which of the two states the cell is currently located. For that purpose it is enough to make a comparison against a reference voltage value that is in the middle between the two states, and thus to determine if the cell's threshold voltage is below or above this reference value.
Figure IA shows graphically how this works. Specifically, Figure IA shows the distribution of the threshold voltages of a large population of cells. Because the cells in a flash device are not exactly identical in their characteristics and behavior (due, for example, to small variations in impurities concentrations or to defects in the silicon structure), applying the same programming operation to all the cells does not cause all of the cells to have exactly the same threshold voltage. (Note that, for historical reasons, writing data to a flash memory is commonly referred to as "programming" the flash memory.) Instead, the threshold voltage is distributed similar to the way shown in Figure IA. Cells storing a value of " 1 " typically have a negative threshold voltage, such that most of the cells have a threshold voltage close to the value shown by the left peak of Figure IA, with some smaller numbers of cells having lower or higher threshold voltages. Similarly, cells storing a value of "0" typically have a positive threshold voltage, such that most of the cells have a threshold voltage close to the value shown by the right peak of Figure IA, with some smaller numbers of cells having lower or higher threshold voltages.
In recent years a new kind of flash device has appeared on the market, using a technique conventionally called "Multi Level Cells" or MLC for short. (This nomenclature is misleading, because the previous type of flash cells also have more than one level: they have two levels, as described above. Therefore, the two kinds of flash cells are referred to herein as "Single Bit Cells" (SBC) and "Multi-Bit Cells" (MBC).) The improvement brought by the MBC flash is the storing of two bits in each cell. (In principle MBC also includes the storage of more than two bits per cell, but such cells are not in the market yet at the present time. In order to simplify the explanations, the two-bit case is emphasized herein. It should however be understood the present invention is equally applicable to flash memory devices that support more than two bits per cell.) In order for a single cell to store two bits of information the cell must be able to be in one of four different states. As the cell's "state" is represented by its threshold voltage, it is clear an MBC cell should support four different valid ranges for its threshold voltage. Figure IB shows the threshold voltage distribution for a typical MBC cell. As expected, Figure IB has four peaks, each corresponding to one state. As for the SBC case, each state is actually a range and not a single number. When reading the cell's contents, all that must be guaranteed is that the range that the cell's threshold voltage is in is correctly identified. For a prior art example of an MBC flash device see US Patent No. 5,434,825 to Harari.
When encoding two bits in an MBC cell by the four states, it is common to have the left-most state in Figure IB (typically having a negative threshold voltage) represent the case of both bits having a value of "1". (In the discussion below the following notation is used - the two bits of a cell are called the "lower bit" and the "upper bit". An explicit value of the bits is written in the form ["upper bit" "lower bit"], with the lower bit value on the right. So the case of the lower bit being "0" and the upper bit being "1" is written as "10". One must understand that the selection of this terminology and notation is arbitrary, and other names and encodings are possible). Using this notation, the left-most state represents the case of "11". The other three states are typically assigned by the following order from left to right - "10", "00", "01". One can see an example of an implementation of an MBC NAND flash device using such encoding as described above in US Patent No. 6,522,580 to Chen, which patent is incorporated by reference for all purposes as if fully set forth herein. See in particular Figure 8 of the Chen patent. It -should be noted though that the present invention does not depend on this assignment of the states, and any other ordering can be used, provided that the ordering satisfies the condition stated below. When reading an MBC cell's content, the range that the cell's threshold voltage is in must be identified correctly; only in this case this cannot always be achieved by comparing to one reference voltage, and several comparisons may be necessary. For example, in the case illustrated in Figure IB, one way to read the lower bit is first to compare the cell's threshold voltage to a reference comparison voltage F1 and then, depending on the outcome of the comparison, to compare the cell's threshold voltage to either a zero reference comparison voltage or a reference comparison voltage F2. Another way to read the lower bit is to compare the cell's threshold voltage unconditionally to both the zero reference voltage and F2. In either case, two comparisons are needed.
MBC devices provide a great advantage of cost - using a similarly sized cell one stores two bits rather than one. However, there are also some drawbacks to using MBC flash - the average read and write times of MBC memories are longer than of SLC memories, resulting in lower performance. Also, the reliability of MBC is lower than SBC. This can easily be understood - the differences between the threshold voltage ranges in MBC are much smaller than in SBC. Thus, a disturbance in the threshold voltage (e.g. leaking of the stored charge causing a threshold voltage drift, interference from operations on neighboring cells, etc.) that may have gone unnoticed in SBC because of the large gap between the two states, might cause an MBC cell to move from one state to another, resulting in an erroneous bit. The end result is a lower quality specification of MBC cells in terms of data retention time or the endurance of the device to many write/erase cycles. Thus there are advantages to using both MBC cells and SBC cells, and the selection can be different depending on the application's requirements.
It is obvious that a cell designed for MBC operation should also be able to operate as an SBC cell. After all, two states are just a subset of 4 states. Indeed, this idea already has appeared in the prior art - see for example US Patent No. 6,426,893 to Conley et al., where it is proposed to use both MBC and SBC modes within the same device, selecting certain parts of the device to operate with highest density in MBC mode, while other parts are used in SBC mode and provide better performance.
Other prior art goes even further - deciding on the mode a specific flash block operates in (whether MBC or SBC) dynamically during the application's run-time. For example, US Patent No. 5,930,167 to Lee et al. describes a system in which incoming data that has to be stored is first programmed in SBC mode so as to provide fast response time, and later is reprogrammed using MBC mode. The SBC mode thus provides a kind of caching mechanism. The second writing (done in MBC mode) can be done in the same place where the data was originally programmed in SBC mode, so it is clear the same area is dynamically switched between modes. Such programming in SBC mode vs. MBC mode is referred to herein as "iV-bit programming", with N=I referring to SBC mode and N>1 referring to MBC mode.
However, such dynamic mode switching of flash blocks during run-time creates a problem. Think about what happens when power is unexpectedly removed from the device. When the power is later restored and the system's software starts running again, the system has to find out what mode was previously used for writing the data. Without knowing this, a wrong reading might result. Figures IA and IB illustrate why - suppose a cell was really programmed using 1-bit mode to contain a "0", and the distribution is according to Figure IA. If the system mistakenly assumes the cell was programmed using 2-bit mode, the system will instruct the device to attempt a reading using 2-bit mode, which will cause the device circuitry to try to identify which of the four states exists. However, trying to distinguish between the two center states ("10" and "00" in our example) the flash circuitry might place the reference comparison voltage at a voltage value that is within the distribution range of the right-most state of the SBC cell. Figure IB shows such a case: reference comparison voltage F1 is exactly in the middle of the upper threshold voltage distribution of Figure IA. This means the result of this comparison and consequently the result of this reading cannot be predicted - in some cells the reading will return "10" and in others it will return "00", even though all such cells were programmed to "0" in 1-bit mode. Such reading under the wrong mode produces unpredictable results. If such mistakes are allowed to take place, the contents of the storage device will become useless.
Similarly, if the distribution of threshold voltages in a 1-bit mode cell is as shown in Figure 1C, if the system mistakenly assumes that the cell was programmed using 2-bit mode, when trying to distinguish between the two rightmost states ("00" and "01" in our example) the flash circuitry places reference comparison voltage F2 at a voltage value within the distribution of the right-most state of the SBC cell. Sometimes the presumed lower bit of the cell is read as "0", and sometimes the presumed lower bit of the cell is read as "1".
Obviously, one can defend against such mistakes by keeping in the storage device detailed tables in which it is specified which mode -is used for writing each memory block. The table itself must be kept in a fixed predetermined mode and in a pre-known location, so that there are no mistakes in reading the table. But such a solution has very undesirable consequences. First, each "useful" write operation must now be accompanied by an "auxiliary" write for updating the table, resulting in lower write performance. Second, the complexity of the flash management software is significantly increased - protection must be provided against loss of the table due to a block becoming bad; protection must be provided against a power loss occurring in the middle of updating the table, etc.
There is thus a widely recognized need for, and it would be highly advantageous to have, an efficient way to tell which mode, SBC or MBC, was used to program a flash memory block that could have been programmed using either mode.
SUMMARY OF THE INVENTION
According to the present invention there is provided a method of managing a flash memory, including the steps of: (a) reserving at least one cell of the flash memory to use as a flag cell to represent a value of a number N of bits of data to store in each of a plurality of other cells of a block of the flash memory; (b) selecting a value of N from among at least three candidate values of N; and (c) programming the at least one flag cell to represent the selected value of N.
According to the present invention there is provided a memory device including: (a) a flash memory including at least one block, each at least one block including a plurality of cells; and (b) a flash memory controller operative, for one of the at least one block: (i) to reserve at least one cell of the one block to use as a flag cell to represent a value, of a number N of bits of data to store in a plurality of other cells of the one block, (ii) to select a value of N from among at least three candidate values of N, and (iii) to program the at least one flag cell to represent the selected value of N.
According to the present invention there is provided a system including: (a) a flash •memory including at least one block, each at least one block including a plurality of cells; (b) a non-volatile memory for storing program code for, for one of the at least one block: (i) reserving at least one cell of the one block to use as a flag cell to represent a value, of a number JV of bits of data to store in a plurality of other cells of the one block, (ii) selecting a value of JV from among at least three candidate values of JV, and (iii) programming the at least one flag cell to represent the selected value of JV; and (c) a processor for executing the program code.
According to the present invention there is provided a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a flash memory that includes at least one block, each at least one block including a plurality of cells, the computer-readable code including program code for, for one of the at least one block: (a) reserving at least one cell of the one block to use as a flag cell to represent a value, of a number JV of bits of data to store in a plurality of other cells of the one block; (b) selecting a value of JV from among at least three candidate values of JV; and (c) programming the at least one flag cell to represent the selected value of JV. According to the present invention there is provided a method of managing a non¬ volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV≥l bits and which are separated from one another, the method including the steps of: (a) reserving at least one storage element to use as a flag storage element to represent a value of JV for each of a plurality of other storage elements of at least a portion of the non- volatile array; (b) selecting a value of JV from among at least three candidate values of JV; and (c) setting the at least one flag storage element to represent the selected value of JV.
According to the present invention there is provided a memory device including: (a) a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV≥l bits and which are separated from one another; and (b) a controller for: (i) reserving at least one storage element to use as a flag storage element to represent a value of N for each of a plurality of other storage elements of at least a portion of the non- volatile array, (ii) selecting a value of N from among at least three candidate values of JV, and (iii) setting the at least one flag storage element to represent the selected value of JV.
According to the present invention there is provided a system including: (a) a non¬ volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV≥l bits and which are separated from one another; (b) a non-volatile memory for storing program code for: (i) reserving at least one storage element to use as a flag storage element to represent a value of N for each of a plurality of other storage elements of at least a portion of the non- volatile array; (ii) selecting a value of JV from among at least three candidate values of TV, and (iii) setting the at least one flag storage element to represent the selected value of JV; and (c) a processor for executing the program code.
According to the present invention there is provided a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of JV≥l bits and which are separated from one another, the computer- readable code including: (a) program code for reserving at least one storage element to use as a flag storage element to represent a value of JV for each of a plurality of other storage elements of at least a portion of the non- volatile array; (b) program code for selecting a value of JV from among at least three candidate values of JV, and (c) program code for setting the at least one flag storage element to represent the selected value of JV.
According to the present invention there is provided a method of managing a flash memory, including the steps of: (a) selecting a value of a number JV>3 of respective bits of data to be stored in each of a plurality of cells of at least a portion of a flash memory; (b) reserving a single other cell of the flash memory to use as a flag cell to represent a value of how many of the N bits are stored in each cell of the plurality; and (c) successively, for each value of n between 1 and JV: (i) programming each cell of the plurality to represent a first respective n bits of the data, and (ii) programming the flag cell to represent n.
According to the present invention there is provided a memory device including: (a) a flash memory including at least one block, each at least one block including at least one page, each at least one page including a plurality of cells; and (b) a flash memory controller operative, for a portion of the flash memory selected from the group consisting of one of the at least one block and one of the at least one page of one of the at least one block: (i) to select a value of a number JV>3 of respective bits of data to be stored in each of a plurality of cells of the portion, (ii) to reserve a single other cell of the portion to use as a flag cell to represent a value of how many of the JV bits are stored in each cell of the plurality, and (iii) successively, for each value of n between 1 and JV: (A) to program each cell of the plurality to represent a first respective n bits of the data, and (B) to program the flag cell to represent n. According to the present invention there is provided a system including: (a) a flash memory including at least one block, each at least one block including at least one page, each at least one page including a plurality of cells; (b) a non-volatile memory for storing program code for, for a portion of the flash memory selected from the group consisting of one of the at least one block~and one of the at least one page of one of the at least one block: (i) selecting a value of a number N≥3 of respective bits of data to be stored in each of a plurality of cells of the portion, (ii) reserving a single other cell of the portion to use as a flag cell to represent a value of how many of the N bits are stored in each cell of the plurality, and (iii) successively, for each value of n between 1 and N: (A) programming each cell of the plurality to represent a first respective n bits of the data, and (B) programming the flag cell to represent n; and (c) a processor for executing the program code.
According to the present invention there is provided a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a flash memory that includes at least one block, each at least one block including at least one page, each at least one page including a plurality of cells, the computer-readable code including program code for, for a portion of the flash memory selected from the group consisting of one of the at least one block and one of the at least one page of one of the at least one block: (a) selecting a value of a number N>3 of respective bits of data to be stored in each of a plurality of cells of the portion; (b) reserving a single other cell of the portion to use as a flag cell to represent a value of how many of the N bits are stored in each cell of the plurality; and (c) successively, for each value of n between 1 and N: (i) programming each cell of the plurality to represent a first respective n bits of the data, and (ii) programming the flag cell to represent n.
According to the present invention there is provided a method of managing a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another, the method including the steps of: (a) selecting a number JV>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non-volatile array; (b) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of the plurality; and (c) successively, for each value of n between 1 and N: (i) setting each storage element of the plurality to represent a first respective n bits of the data, and (ii) setting the flag storage element to represent n. According to the present invention there is provided a memory device including: (a) a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another; and (b) a controller for: (i) selecting a number N≥3 of bits to ■ ■ be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non-volatile array, (ii) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of the plurality, and (iii) successively, for each value of n between 1 and N: (A) setting each storage element of the plurality to represent a first respective n bits of the data, and (B) setting the flag storage element to represent n.
According to the present invention there is provided a system including: (a) a non¬ volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another; (b) a non-volatile memory for storing program code for: (i) selecting a number JV>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non- volatile array, (ii) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of the plurality, and (iii) successively, for each value of n between 1 and N: (A) setting each storage element of the plurality to represent a first respective n bits of the data, and (B) setting the at least one flag storage element to represent n; and (c) a processor for executing the program code.
According to the present invention there is provided a computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another, the computer-readable code including: (a) program code for selecting a number N≥3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non- volatile array; (b) program code for reserving a single other storage element to use as a flag storage element to represent a value of how many of the
N bits are stored in each storage element of the plurality; and (c) program code for
'- successively, for each value of n between 1 and N: (i) setting each storage element of the plurality to represent a first respective n bits of the data, and (ii) setting the flag storage element to represent n.
The smallest group of flash cells for which an N-bit programming mode can be jointly selected is referred to herein as a "block" of flash cells. The smallest group of cells within a block of a NAND flash memory which can be programmed together is referred to herein as a "page". The JV=2 NAND flash memories presently available commercially are those described in the Chen et al. patent cited above. In these memories, the upper bits and the lower bits of the cells belong to different pages. It also is possible to have each cell of a N=2 NAND flash memory belong to a particular page. The present invention works for both kinds of N=2 NAND flash memories.
According to a first aspect of the present invention, a flash memory is managed by reserving one or more cells of the flash memory to use as (a) flag cell(s) to represent how many ("N") bits of data to store in the cells of a block of the flash memory. A value of N is selected from among at least three candidate values. The flag cell(s) is/are programmed to represent the selected value of N. Preferably, the cells of the block then are programmed to represent the data in accordance with the selected value of N. Li preferred embodiments of this method, only one cell is reserved to be used as a flag cell for the block, or N is selected from among only three candidate values, or N is selected from among four candidate values.
According to a second aspect of the present invention, a flash memory is managed by selecting a value of a number N>2 of respective data bits to store in each of the cells of a portion (typically a block or a page) of a flash memory (or possibly of the whole memory), and one other cell of the flash memory is reserved to be used as a flag cell to represent a value of how many of the N bits actually are stored in each of the cells that hold the data bits. As the cells that hold the data bits are programmed successively to represent 1, 2, ..., N bits per cell, the flag cell is programmed to represent the number n of bits currently actually represented by the cells that hold the data bits. In preferred embodiments of this method, N is selected to be exactly 3 or 4.
A memory device of the present invention includes a flash memory that includes at least one block of cells (for both aspects) or at least one page of cells (for the second aspect), and a flash memory controller that manages the flash memory according to the method of the relevant aspect of the present invention. A system of the present invention includes a flash memoryrthat includes at least one block of cells (for both aspects) or at least one page (for the second aspect), a non-volatile memory (usually but not necessarily separate from the flash memory) for storing program code for implementing the method of the relevant aspect of the present invention, and a processor for executing the code. The scope of the present invention also includes a computer-readable storage medium in which is embedded computer-readable code for implementing the method of one of the two aspects of the present invention. More generally, the scope of the present invention extends beyond flash memories to include any of the memories discussed in the Chen patent cited above: memories that include non- volatile arrays of storage elements such that each storage element has a storage window divisible into a plurality of defined ranges of storage levels that represent one or more bits of data. The cells of a MBC flash memory are examples of such storage elements. The blocks of a MBC flash memory are examples of such non- volatile arrays.
In the context of the present invention, "programming" or "setting" a flag cell or a non- volatile storage element to represent one member of a set of integers means placing the flag cell or the nonvolatile storage element in a state that corresponds only to that integer and to no other integer of the set. For example, one way to program a flag cell to represent a selected one of the integers 1, 2 and 3 is to program the cell with N=3 to be in the second threshold voltage range from the left in Figure 4 below (between a threshold voltage of zero and a threshold voltage of F1) to represent the integer 1 , to be in the fourth threshold voltage range from the left in Figure 4 below (between a threshold voltage of F2 and a threshold voltage of F3) to represent the integer 2, and to be in the rightmost threshold voltage range in Figure 4 below to represent the integer 3. JPreferably, if two or more flag cells are used to represent the same integer for a set of other cells, all of the flag cells are programmed identically.
BRIEF DESCRIPTION OF THE DRAWINGS The invention is herein described, by way of example only, with reference to the accompanying drawings, wherein:
FIGs. IA and 1C illustrate the threshold voltage distributions of flash cells programmed in 1-bit mode;
FIG. IB illustrates the threshold voltage distributions of flash cells programmed in 2- bit mode;
FIG. 2 is a high-level block diagram of a flash memory device of the present invention; ;
FIG. 3 is a high-level block diagram of a computer system of the present invention; FIG. 4 illustrates the threshold voltage distributions of flash cells programmed in 3-bit mode;
FIG. 5 illustrates a possible threshold distribution of flash cells that are incompletely programmed in 3-bit mode.
DESCRIPTION OF THE PREFERRED EMBODIMENTS
The present invention is of a method of managing the programming of the cells of a flash memory with different numbers of bits. Specifically, the present invention can be used, during normal power-up or upon recovery from a power loss, to determine the bit number mode that was used to program the flash cells of each block of the memory or the number of bits that actually have been programmed in the flash cells of each page of the memory.
The principles and operation of a flash memory according to the present invention may be better understood with reference to the drawings and the accompanying description.
The preferred embodiment of the present invention assumes that the reference voltage used to distinguish the unprogrammed state of a cell from any of its programmed states is the same for all values of N. This condition is in fact satisfied by most flash memories that support N>1, because commonly the states of a N=I flash cell are defined so that the "1" state has a negative threshold voltage and the "0" state has a positive threshold voltage; and the states of a N>1 flash cell are defined so that the unprogrammed state (e.g. the "11" state of a N=2 flash cell) has a negative threshold voltage and the other states have positive threshold voltages. A reference voltage of zero then serves to distinguish the unprogrammed state of any flash cell from the programmed state(s) of any flash cell, independent of the value of N used to program the cell. This is precisely the situation illustrated in Figures IA and IB.
Note that it is not necessary for the reference voltage that distinguishes the unprogrammed state from the programmed state(s) to be zero volts, as long as the same reference voltage works for all values of N.
Within each block of a flash memory that supports N>1, a set of one or more cells is reserved for use as flag cells to indicate the value of N to be used for reading and programming the cells of the block. Note that N is allowed to change over the lifetime of the block. For example, if the flash memory is managed as taught in the Lee et al. patent cited above, a block that initially is used with N=I to cache data may subsequently be used with N=2 for long-term storage of data. Each page of a NAND flash memory includes both a main portion that -typically is used to store user data and an additional, smaller portion that typically is reserved for management functions. Most conveniently, the flag cells are selected from among the cells assigned to the management portions of the blocks. No matter what value of JV is assigned to a block, the flag cell(s) is/are programmed as though JV=I, in the sense that only one bit per cell is changed from its unprogrammed value. For example, under the convention used above in which the bit value stored in an unprogrammed JV=2 cell is interpreted as two "1" bits, a flag cell is either left unprogrammed or programmed as either " 10" or "01 ", but never as "00". The simplest way of encoding JV in flag cells of a block whose cells support JV equal to either 1 or 2 uses only one flag cell. hi one preferred embodiment of the present invention, if JV=2, the flag cell is left unprogrammed. If JV=I, the flag cell is programmed as "0". Using the threshold voltage distributions of Figures IA and IB, if the threshold voltage of the flag cell is found to be negative, then JV is guaranteed to be equal to 2, and if the threshold voltage of the flag cell is found to be positive, then JV is guaranteed to be equal to 1. For redundancy, it is preferable to use several flag cells per block; but all the flag cells of the block are set similarly: all the flag cells are left unprogrammed to indicate that JV=2 and are programmed as "0" to indicate that JV=I. Care must be taken never to program the second bit of the flag cell(s) of a JV=2 block, because such programming would change the threshold voltage(s) of the flag cell(s) from negative to positive, thereby changing the meaning of the flag(s) from "JV=2" to "JV=I".
In another preferred embodiment of the present invention, if JV=I, the flag cell is left unprogrammed; and if JV=2, the flag cell is programmed as either "10" or "01". Using the threshold voltage distributions of Figures IA and IB, if the threshold voltage of the flag cell is found to be negative, then JV is guaranteed to be equal to 1, and if the threshold voltage of the flag cell is found to be positive, then JV is guaranteed to be equal to 2. Again, for redundancy, it is preferable to use several flag cells per block; but all the flag cells of the block are set similarly: all the flag cells are left unprogrammed to indicate that JV=I and are programmed as either "10" or "01" to indicate that JV=2. Under this preferred embodiment, it does not matter whether the second bit of the flag cell(s) of a N~2 block are programmed, because the threshold voltage(s) of the flag cell(s) are positive in any case.
Normally, JV is encoded in the flag cell(s) of a block the first time data are programmed to the block either the first time the block is used or following an erasure of the block. An exception to this general rule applies to flash memories that support partial page programming. If the flash memory supports partial page programming, then the flag cell(s) of a block optionally are programmed when N is selected, before any data are programmed to the block. • " Returning- now to the drawings, Figure 2 is a high-level block diagram of a flash memory device 10 of the present invention. Figure 2 is adapted from Figure 1 of US Patent No. 5,404,485, to Ban, which patent is incorporated by reference for all purposes as if fully set forth herein. Device 10 includes an MBC NAND flash memory 12, a flash memory controller 14 and a RAM 16. Controller 14 manages memory 12 as taught in US 5,404,485 and in US Patent No. 5,937,425, also to Ban, which patent also is incorporated by reference for all purposes as if fully set forth herein. (US 5,404,485 applies to the management of flash memories generally. US 5,937,425 is specific to NAND flash memories.) Controller 14 exchanges data stored in memory 12 with a host device (not shown) in the conventional manner. For example, if device 10 is used for non- volatile data storage in a system such as a personal computer, then controller 14 communicates with the other components of the system via the system's bus. If device 10 is a portable storage device that is reversibly attached to a host using a suitable interface, for example the USB interface taught in US Patent No. 6,148,354, to Ban et al., then controller 14 communicates with the host via that interface.
In addition, controller 14 decides, for each block of memory 12, whether to store data in that block in SBC mode (N=I) or ϋi MBC mode (N>1). Which mode is appropriate for which kind of data is up to the programmer of controller 14. For example, as discussed above, Lee et al. advocate using SBC for caching of data that later are transferred to long term storage in MBC mode because of the greater programming speed of SBC mode vs. MBC mode. By contrast, Lasser et al., in US Patent Application Publication No. 2005/0024941, advocate using SBC mode rather than MBC mode for archiving data because of SBC mode's greater reliability. In each block of memory 12, controller 14 reserves one or more flag cells to store the value of N selected for that block and sets that/those flag cell(s) accordingly, as described above. During normal system power-up, or during recovery from a power failure, controller 14 reads each block's flag cell(s), as described above, to determine which value of N has been used to program the cells of that block.
Device 10 is an example of a firmware implementation of the method of the present
- invention. Figure 3 is a partial high level block diagram of a computer system 20 of the present invention that is an example of a software implementation of the method of the present invention. System 20 includes a processor 22; a RAM 24; input and output devices such as a keyboard and a display screen, represented collectively by I/O block 32; and two non-volatile mass storage memories: a hard disk 26 and an MBC NAND flash memory 30. Components 22, 24, 26, 30 and 32 communicate with each other via a common bus 34. Among the data stored on hard disk 26 is the code of an operating system 28. When system 20 is powered up, processor 22 downloads the code of operating system 28 to RAM 24 and then executes the code of operating system 28 from RAM 24 to manage the operation of system 20. Hard disk 26 thus is an example of a computer-readable storage medium in which is embedded computer-readable code for implementing the method of the present invention. The code of operating system 28 includes code for managing NAND flash memory 30 as taught in US 5,404,485 and in US 5,937,425. The code of operating system 28 also includes code for managing NAND flash memory 30 according to the principles of the present invention. When an application being executed by processor 22 requires storage of user data in NAND flash memory 30, processor 22 executes the appropriate code of operating system 28 to decide, for the blocks of NAND flash memory 30 in which the user data are to be stored, whether to store the user data in that block in SBC mode (N=I) or in MBC mode (iV>l). In each such block of NAND flash memory 30, processor 22 reserves one or more flag cells to store the value of JV selected for that block and programs that/those flag cell(s) accordingly, as described above. The above embodiment of the present invention has been described in terms of distinguishing between two different values of N. A similar second embodiment of the present invention can be used to distinguish among more than two possible values of N.
Let us assume (as an example) that N is selectable from a group containing exactly three values. This is for example the case when a block of cells can be programmed in one of three modes such as: a. Each cell storing one bit. b. Each cell storing two bits. c. Each cell storing three bits.
One way of implementing the methods of the first embodiment of the present invention for distinguishing between the possible modes is to assign two cells ("Cl" and "C2") per block as flag cells, use only one bit of each flag cell, and define a correspondence between the values of those bits and the possible modes. For example: i. One bit per cell indicated by cell Cl = left unprogrammed, cell C2 = left unprogrammed. ii. Two bits per cell indicated by cell Cl = left unprogrammed, cell C2 = programmed. iii. Three bits per cell indicated by cell Cl = programmed, cell C2 programmed.
When attempting to find out the mode with which the block was programmed, we read the flag cells according to the methods of the first embodiment (for example by reading according to the 1-bit programming mode), and then translate the reading from the flag cells into the corresponding mode. Although this works, it requires the allocation of at least two cells from each block to act as flag cells. Typically a designer is reluctant to rely on a single reading and elects to have redundancy to overcome cells' failures. So a designer may decide to use three copies of the flag cells and use majority voting to decide among them. In such case the above example requires the allocation of six flag cells per block. The flag cells are not useful for storing user data and therefore are an overhead that reduces the useful amount of space in the device. Therefore there is great benefit in having methods that achieve the same result of distinguishing between the programming modes of a block but that use a lower number of flag cells.
The following second embodiment of the present invention achieves this benefit by taking advantage of the following argument - if the data cells of the block are capable of being programmed with X≤2N different values of JV bits per cell, then they are necessarily capable of being programmed into at least X different states when used in the mode of highest JV. For the case of the above example, if the data cells can be programmed with the three possible modes of one, two or three bits per cell, then they are programmable into three different states when used with the JV=3 mode. (Note that it is not necessarily true that the highest possible number of bits per cell is equal to the number of different modes. For example, the cells may be operated with JV selectable only from one, two or four bits per cell. The highest number of bits per cell is four, but the number X of different modes is three and not four). In the context of the second embodiment of the present invention, the term "flag" should be understood to refer, not only to a binary flag which can designate one out of two states, but also to designation of one state out of X, with X being any integer. Because the flag cells are physically the same as the data cells, the flag cells have the same capability as the data cells to represent at least X different states. So a single flag cell is able to represent all possible values of N, and a single flag cell suffices to code the required mode information. Of course, a designer may still decide to duplicate the flag cells for not relying on a single cell, but even using three copies will result now in only three flag cells, a much more efficient result than before.
Let us see how this can be achieved for the case of the previous example. We use the terminology and notation of US Patent Application No. 11/035,807 filed on January 18, 2005 by the present inventor. (US 11/035,807 is incorporated by reference for all purposes as if fully set forth herein.) Figure 4 shows the threshold voltage distribution and a possible bits encoding scheme for the case of three bits per cell. Specifically, Figure 4 shows the eight peaks of the distribution corresponding to the eight states required for representing three bits, and also shows (above each peak) the values of the three stored bits corresponding to that state according to the encoding scheme. The un-programmed state ("111 ") corresponds to the left-most peak.
The flag cell is programmed according to N=3, no matter what value of N is used for the other cells of the block. If the block of cells is to be programmed at one bit per cell, the first bit (the least significant bit according to our notation) of the flag cell is set to "0", bringing the flag cell to the state of "110". If the block of cells is to be programmed at two bits per cell, the second bit of the flag cell is set to "0", bringing the flag cell to the state of "100". If the block of cells is to be programmed at three bits per cell, the third bit of the flag cell is set to "0", bringing the flag cell to the state of "000".
Reading the flag cell in the N=3 mode returns one of the following values - "111", "110", "100" or "000". The returned value unambiguously identifies the number of bits stored in the corresponding data cells, as follows: i. "I l l" -no data stored ii. "110" - one bit stored iii. " 100" - two bits stored iv "000"- three bits stored There are some flash cell implementations in which reading in the N=3 mode might not produce reliable results if the cell was programmed with fewer than three bits per cell. One such case is the case of Figure 1C of the Field and Background section: reading a cell programmed with N=I using the JV=2 mode might result in errors, as the N=I distribution peak might be different in position and width from the N=Q. distribution peaks. Figure 5 shows such a case for a three-bits-per-cell-device, where only the states applicable to programming flag cells according to the above procedure are shown. As shown in Figure 5, after setting two of the bits of the flag cell to "0", the resulting distribution peak is not as shown for "100" in Figure 4, but is wider and shifted to the left. Attempting to read the flag cell using regular N=3 methods might return "101", which is not a valid value for a flag cell. This is so because the "100" distribution at this stage is wide and overlaps the range occupied by "101" in a regular _¥=3 distribution.
However, even in such cases the methods of the second embodiment of the present invention still are useful. The reading of the flag cell may be done in sequential stages. For example: i. A first reading is done comparing the flag cell's threshold voltage to a reference of zero volts that reliably separates the non-programmed state from all programmed states. ii. If the first reading shows the flag cell to have a threshold lower than zero volts, we know the block was not programmed at all, and the process ends here, iii. If the first reading shows the flag cell to have a threshold higher than zero volts, a second reading is done comparing the flag cell's threshold voltage to a reference F1 that reliably separates between the state of exactly one bit set to zero and between the states of two or three bits set to zero. All that is required is that F1 reliably separates between the state of only one bit set to zero and the other two programmed states and thus provides a reliable reading of the flag's second bit, and there is no need to get a full three-bit reading. iv. If the second reading shows the flag cell to have a threshold lower than V\, we know the block was programmed with N=I , and the process ends here. v. If the second reading shows the flag cell to have a threshold higher than F1, a third reading is done comparing the flag cell's threshold voltage to a reference F3 that reliably separates between the state of exactly three bits set to zero and between the states of two or fewer bits set to zero. All that is required is that F3 reliably separates between the state of all bits set to zero and the other two programmed states and thus provides a reliable reading of the flag's third bit, and there is no need to get a full three-bit reading. vi. If the third reading shows the flag cell to have a threshold lower than F3, we know the block was programmed with N=2, and the process ends here, vii. If the third reading shows the flag cell to have a threshold higher than F3 then we know the block was programmed with N=3, and the process ends here. The method of the present invention are applicable not only for finding out the number of bits per cell selected for programming a block, but also the current number of bits stored in a portion of a block, even if this number is just an intermediate stage on the way to a different number of bits per cell. If the smallest chunk of programming is smaller than the smallest chunk of erasing (as is typically the case in NAND flash devices, where the smallest chunk for programming is a page and the smallest chunk for erasing is a block, with a block containing several pages), then in this case the flag cells are associated with a page rather than with a block. If a page is to store three bits per cell (for example because its containing block is selected to operate in three-bits-per-cell mode), but the prograrnrning process is done in stages, so that first one bit is stored in each cell of the page, then a second bit is added to each cell, and finally a third bit is added to each cell, the methods of the current invention can be used for keeping track where we are in tihe sequence of writing the three bits. This is useful, for example, when the programming sequence might be interrupted before completing programming of all the bits (as may be the case when the data of the first bits are programmed when the data for the last bits are not yet available), as the methods can tell us how many bits had already been stored so far into the cells, enabling us to correctly continue the interrupted sequence and complete storing all bits. Reading the flag cell of a page to determine how many bits (of the N possible bits) of the data cells have been programmed is done as described above, with "page" substituted for "block", i.e. : i. A first reading is done comparing the flag cell's threshold voltage to a reference of zero volts that reliably separates the non-programmed state from all programmed states, ii. If the first reading shows the flag cell to have a threshold lower than zero volts, we know the page was not programmed at all, and the process ends here. iii. If the first reading shows the flag cell to have a threshold higher than zero volts, a second reading is done comparing the flag cell's threshold voltage to a reference F1 that reliably separates between the state of exactly one bit set to zero and between the states of two or three bits set to zero. All that is required is that F1 reliably separates between the state of only one bit set to zero and the other two programmed states and thus provides a reliable reading of the flag's second bit, and there is no need to get a full three-bit reading. iv. If the second reading shows the flag cell to have a threshold lower than F1, we know the page was programmed witih exactly one bit per cell, and the process ends here. v. If the second reading shows the flag cell to have a threshold higher than F1, a third reading is done comparing the flag cell's threshold voltage to a reference Vs that reliably separates between the state of exactly three bits set to zero and between the states of two or fewer bits set to zero. All that is required is that F3 reliably separates between the state of all bits set to zero and the other two programmed states and thus provides a reliable reading of the flag's third bit, and there is no need to get a full three-bit reading. vi. If the third reading shows the flag cell to have a threshold lower than F3, we know the page was programmed with exactly two bits, and the process ends here. vii. If the third reading shows the flag cell to have a threshold higher than V3 then we know the page was programmed with exactly three bits, and the process ends here.
It should be noted that the methods of the present invention are useful in both of the following scenarios: a. While attempting to read data, finding out the right mode to use for reading so as to match the mode used for writing the data. This is useful, for example, when powering up the storage system and having to read data without having prior knowledge about the mode in which that data had been written before. b. While attempting to write data, finding out the current number of bits already stored in the page to be written for the purpose of correctly carrying out the next step of programming the next bit to the written cells. Of course in such case it is possible to store the number of bits already written in the controller performing the writing, but learning this information from the flag cells without having to store this information in the controller is much preferable for simplifying the control logic and for allowing interruptions in the programming sequence between the steps of writing successive bits. Even though the discussion above uses examples in which N is selectable from three possible values, the present invention is not limited to such examples. All of the above is equally applicable to cases in which N is selectable from four possible values (e.g. I9 2, 3 and
4 bits per cell), or to cases in which N is selectable from more than four possible values. It is trivial to extend the above methods to those cases.
Figures 2 and 3, that were used above to illustrate a memory device and a computer system for implementing the first embodiment of the present invention, also serve to illustrate a memory device and a computer system for implementing the second embodiment of the present invention. In the context of the second embodiment of the present invention, controller 14 of
Figure 2 decides, for each block of memory 12, which of at least three possible values of iVto use for programming the data cells of that block. In each block of memory 12, controller 14 reserves one or more flag cells to program so as to represent the value of N selected for that block, and then sets that/those flag cells(s) accordingly, as described above. Optionally, in a block for which controller 14 has set N>1, controller 14 reserves one or more flag cells in each page of the block to program so as to represent the number of bits stored so far in the data cells of that page. As each page is programmed successively with more and more bits per data cell, controller 14 sets the flag cell(s) of the page to indicate how many bits have been programmed so far in the data cells of the page, as described above. Also in the context of the second embodiment of the present invention, the code of operating system 28 of Figure 3 includes code for managing NAND flash memory 30 as taught in US 5,404,485 and in US 5,937,425, and also code for managing NAND flash memory 30 according to the second embodiment of the present invention. When an application being executed by processor 22 requires storage of user data in NAND flash memory 30, processor 22 executes the appropriate code of operating system 28 to decide, for the blocks of NAND flash memory 30, in which the user data are to be stored, which of at least three possible values of N to use for programming the data cells of that block. In each such block of NAND flash memory 30, processor 22 reserves one . or .-more flag cells to program so as to represent the value of N selected for that block, and then sets that/those flag cell(s) accordingly, as described above. Optionally, in a block for which processor 22 has set N>1, processor 22 reserves one or more flag cells in each page of the block to program so as to represent the number of bits stored so far in the data cells of that page. As each page is programmed successively with more and more bits per data cell, processor 22 sets the flag cell(s) of the page to indicate how many bits have been programmed so far in the data cells of the page, as described above.
While the invention has been described with respect to a limited number of embodiments, it will be appreciated that many variations, modifications and other applications of the invention may be made.

Claims

WHAT IS CLAIMED IS:
1. A method of managing a flash memory, comprising the steps of:
(a) reserving at least one cell of the flash memory to use as a flag cell to represent a value of a number N of bits of data to store in each of a plurality of other cells of a block of the flash memory;
(b) selecting a value of N from among at least three candidate values of N; and
(c) programming said at least one flag cell to represent said selected value of N.
2. The method of claim 1 , further comprising the step of:
(d) programming said plurality of other cells to represent said data in accordance with said selected value of N.
3. The method of claim 1, wherein only one said flag cell is reserved.
4. The method of claim 1, wherein a plurality of said flag cells are reserved, and wherien all said flag cells are programmed identically to represent said selected value of N.
5. The method of claim 1, wherein said value of N is selected from among only three candidate values thereof.
6. The method of claim 1, wherein said value of N is selected from among four candidate values thereof.
7. A memory device comprising:
(a) a flash memory including at least one block, each said at least one block including a plurality of cells; and
(b) a flash memory controller operative, for one of said at least one block:
(i) to reserve at least one cell of said one block to use as a flag cell to represent a value, of a number N of bits of data to store in a plurality of other cells of said one block, (ii) to select a value of N from among at least three candidate values of JV, and (iii) to program said at least one flag cell to represent said selected value of
N.
8. The memory device of claim 7, wherein said flash memory controller is operative to reserve only one said flag cell for said one block.
9. The memory device of claim 7, wherein said flash memory controller is operative to reserve a plurality of said flag cells for said one block and to program all said flag cells identically to represent said selected value of JV.
10. The memory device of claim 7, wherein said flash memory controller is operative to select said value of JV from among only three candidate values thereof.
11. The memory device of claim 7, wherein said flash memory controller is operative to select said value of JV from among four candidate values thereof.
12. A system comprising:
(a) a flash memory including at least one block, each said at least one block including a plurality of cells;
(b) a non- volatile memory for storing program code for, for one of said at least one block:
(i) reserving at least one cell of said one block to use as a flag cell to represent a value, of a number JV of bits of data to store in a plurality of other cells of said one block, (ii) selecting a value of JV from among at least three candidate values of JV, and (iii) programming said at least one flag cell to represent said selected value of JV; and
(c) a processor for executing said program code. 13. The system of claim 12, wherein said program code is for reserving only one said cell of said one block to use as said flag cell.
14. The system of claim 12, wherein said program code is for reserving a plurality of said cells of said one block to use as said flag cells and for prgramming all said flag cells identically to represent said selected value of JV.
15. The system of claim 12, wherein said program code is for selecting said value of JV from among only three candidate values thereof.
16. The system of claim 12, wherein said program code is for selecting said value of JV from among four candidate values thereof.
17. A computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a flash memory that includes at least one block, each at least one block including a plurality of cells, the computer-readable code comprising program code for, for one of the at least one block:
(a) reserving at least one cell of the one block to use as a flag cell to represent a value, of a number JV of bits of data to store in a plurality of other cells of the one block;
(b) selecting a value of JV from among at least three candidate values of JV; and
(c) programming said at least one flag cell to represent said selected value of JV.
18. The computer-readable storage medium of claim 17, wherein said program code is for reserving only one said cell of title one block to use as said flag cell.
19. The computer-readable storage medium of daim 17, wherein said program code is for reserving a plurality of said cells of the one block to use as said flag cells and for programming all said flag cells identically to represent said selected value of JV. 20. The computer-readable storage medium of claim 17, wherein said program code is for selecting said value of N from among only three candidate values thereof.
21. The computer-readable storage medium of claim 17, wherein said program code is for selecting said value of N from among four candidate values thereof. ■ . . .
22. A method of managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of N≥l bits and which are separated from one another, the method comprising the steps of:
(a) reserving at least one storage element to use as a flag storage element to represent a value of N for each of a plurality of other storage elements of at least a portion of the non- volatile array;
(b) selecting a value of N from among at least three candidate values of N; and
(c) setting said at least one flag storage element to represent said selected value of N.
23. The method of claim 22, further comprising the step of:
(d) programming said plurality of other storage elements to represent data in accordance with said selected value of N.
24. The method of claim 18, wherein only one said flag storage element is reserved.
25. The method of claim 18, wherein a plurality of said flag storage elements are reserved and wherein all said flag storage elements are set identically to represent said selected value of N.
26. The method of claim 225 wherein said value of N is selected from among only three candidate values thereof.
27. The method of claim 22, wherein said value of N is selected from among four candidate values thereof. 28. A memory device comprising:
(a) a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of N≥l bits and which, are separated from one another; and
(b) a controller for:
(i) reserving at least one said storage element to use as a flag storage element to represent a value of N for each of a plurality of other said storage elements of at least a portion of the non- volatile array,
(ii) selecting a value of N from among at least three candidate values of N, and
(iii) setting said at least one flag storage element to represent said selected value of N.
29. The memory device of claim 28, wherein said flash memory controller is operative to reserve only one said flag storage element for said at least portion.
30. The memory device of claim 28, wherein said flash memory controller is operative to reserve a plurality of said flag storage elements for said at least portion and to set all said flag storage elements identically to represent said selected value of N.
31. The memory device of claim 28, wherein said flash memory controller is operative to select said value of N from among only three candidate values thereof.
32. The memory device of claim 28, wherein said flash memory controller is operative to select said value of N from among four candidate values thereof.
33. A system comprising:
(a) a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of N≥l bits and which are separated from one another;
(b) a non- volatile memory for storing program code for: (i) reserving at least one said storage element to use as a flag storage element to represent a value of N for each of a plurality of other said storage elements of at least a portion of the non- volatile array;
(ii) selecting a value of N from among at least three candidate values of N, and
(iii) setting said at least one flag storage element to represent said selected value of N; and (c) a processor for executing said program code.
34. The system of claim 33, wherein said program code is for reserving only one said storage element to use as said flag storage element.
35. The system of claim 33, wherein said program code is for reserving a pluralty of said storage elements to use as said flag storage elements and to set all said flag storage elements identically to represent said selected value of N.
36. The system of claim 33, wherein said program code is for selecting said value of N from among only three candidate values thereof.
37. The system of claim 33, wherein said program code is for selecting said value of N from among four candidate values thereof.
38. A computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of N>1 bits and which are separated from one another, the computer-readable code comprising:
(a) program code for reserving at least one storage element to use as a flag storage element to represent a value of N for each of a plurality of other storage elements of at least a portion of the non- volatile array;
(b) program code for selecting a value of N from among at least three candidate values of N, and (c) program code for setting said at least one flag storage element to represent said selected value of JV.
39. The computer-readable storage medium of claim 38, wherein said program code is for reserving only one said storage element to use as said flag storage element.
40. The computer-readable storage medium of claim 38, wherein said prgram code is for reserving a plurality of said storage elements to use as said flag storage element and to set all said flag storage elements identically to represent said selected value of JV.
41. The computer-readable storage medium of claim 38, wherein said program code is for selecting said value of JV from among only three candidate values thereof.
42. The computer-readable storage medium of claim 38, wherein said program code is for selecting said value of JV from among four candidate values thereof.
43. A method of managing a flash memory, comprising the steps of:
(a) selecting a value of a number JV>3 of respective bits of data to be stored in each of a plurality of cells of at least a portion of a flash memory;
(b) reserving a single other cell of the flash memory to use as a flag cell to represent a value of how many of said JV bits are stored in each said cell of said plurality; and
(c) successively, for each value of n between 1 and JV:
(i) programming each said cell of said plurality to represent a first respective n bits of said data, and (ii) programming said flag cell to represent n.
. ' 44. The method of claim 43, wherein said at least portion of the flash memory is a block of the flash memory.
45. The method of claim 43, wherein said at least portion of the flash memory is a page of the flash memory. 46. The method of claim 43 , wherein N is selected equal to 3.
47. The method of claim 43, wherein N is selected equal to 4.
48. A memory device comprising:
(a) a flash memory including at least one block, each said at least one block including at least one page, each said at least one page including a plurality of cells; and
(b) a flash memory controller operative, for a portion of said flash memory selected from the group consisting of one of said at least one block and one of said at least one page of one of said at least one block:
(i) to select a value of a number N>3 of respective bits of data to be stored in each of a plurality of cells of said portion, (ii) to reserve a single other cell of said portion to use as a flag cell to represent a value of how many of said N bits are stored in each said cell of said plurality, and (iii) successively, for each value of n between 1 and N:
(A) to program each said cell of said plurality to represent a first respective n bits of said data, and
(B) to program said flag cell to represent n.
49. The memory device of claim 48, wherein N=3.
50. The memory device of claim 48, wherein N=4.
51. A system comprising:
(a) a flash memory including at least one block, each said at least one block including at least one page, each said at least one page including a plurality of cells;
(b) a non-volatile memory for storing program code for, for a portion of said flash memory selected from the group consisting of one of said at least one block and one of said at least one page of one of said at least one block: (i) selecting a value of a number N≥3 of respective bits of data to be stored in each of a plurality of cells of said portion, (ii) reserving a single other cell of said portion to use as a flag cell to represent a value of how many of said JV bits are stored in each said cell of said plurality, and (iii) successively, for each value of n between 1 and JV:
(A) programming each said cell of said plurality to represent a first respective n bits of said data, and
(B) programming said flag cell to represent n; and (c) a processor for executing said program code.
52. The system of claim 51 , wherein JV=3.
53. The system of claim 51 , wherein JV=4.
54. A computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a flash memory that includes at least one block, each at least one block including at least one page, each at least one page including a plurality of cells, the computer-readable code comprising program code for, for a portion of the flash memory selected from the group consisting of one of the at least one block and one of the at least one page of one of the at least one block:
(a) selecting a value of a number JV>3 of respective bits of data to be stored in each of a plurality of cells of the portion;
(b) reserving a single other cell of the portion to use as a flag cell to represent a value of how many of said JV bits are stored in each cell of the plurality; and
(c) successively, for each value of n between 1 and JV:
(i) programming each cell of the plurality to represent a first respective n bits of said data, and (ii) programming said flag cell to represent n.
55. The computer-readable storage medium of claim 54, wherein JV=3. 56. The computer-readable storage emdium of claim 54, wherein N=4.
57. A method of managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels, representative of at least one bit of data and which are separated from one another, the method comprising the steps of:
(a) selecting a number iV>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non- volatile array;
(b) reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each storage element of said plurality; and
(c) successively, for each value of n between 1 and N:
(i) setting each storage element of said plurality to represent a first respective n bits of the data, and (ii) setting said flag storage element to represent n.
58. The method of claim 57, wherein N is selected equal to 3.
59. The method of claim 57, wherein N is selected equal to 4.
60. A memory device comprising:
(a) a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another; and
(b) a controller for:
(i) selecting a number 7V>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of said storage elements of at least a portion of the non- volatile array, (ii) reserving a single other said storage element to use as a flag storage element to represent a value of how many of said JV bits are stored in each said storage element of said plurality, and
(iii) successively, for each value of n between 1 and JV:
(A) setting each said storage element of said plurality to represent a first respective n bits of said data, and
(B) setting said flag storage element to represent n.
61. The memory device of claim 60, wherein JV=3.
62. The memory device of claim 60, wherein JV=4.
63. A system comprising:
(a) a non- volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another;
(b) a non- volatile memory for storing program code for:
(i) selecting a number JV>3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of said storage elements of at least a portion of said non- volatile array, (ii) reserving a single other said storage element to use as a flag storage element to represent a value of how many of said JV bits are stored in each said storage element of said plurality, and (iii) successively, for each value of n between 1 and JV:
(A) setting each said storage element of said plurality to represent a first respective n bits of said data, and
(B) setting said flag storage element to represent n; and
(c) a processor for executing said program code.
64. The system of claim 63 , wherein N=3.
65. The system of claim 63, wherein JV=4. 66. A computer-readable storage medium having computer-readable code embedded on the computer-readable storage medium, the computer-readable code for managing a non-volatile array of storage elements individually having a storage window divisible into a plurality of defined ranges of storage levels representative of at least one bit of data and which are separated from one another, the computer-readable code comprising:
(a) program code for selecting a number N≥3 of bits to be represented by the defined ranges of the storage levels of each of a plurality of the storage elements of at least a portion of the non- volatile array;
(b) program code for reserving a single other storage element to use as a flag storage element to represent a value of how many of the N bits are stored in each said storage element of said plurality; and
(c) program code for successively, for each value of n between 1 and N:
(i) setting each said storage element of said plurality to represent a first respective n bits of said data, and (ii) setting said flag storage element to represent n. 61. The computer-readable storage medium of claim 66, wherein N-3.
68. The computer-readable storage medium of claim 66, wherein N=4.
PCT/IL2005/001149 2004-11-04 2005-11-02 Method of managing a multi-bit-cell flash memory WO2006048874A2 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US62467504P 2004-11-04 2004-11-04
US60/624,675 2004-11-04
US11/198,180 2005-08-08
US11/198,180 US7716413B2 (en) 2004-02-15 2005-08-08 Method of making a multi-bit-cell flash memory

Publications (2)

Publication Number Publication Date
WO2006048874A2 true WO2006048874A2 (en) 2006-05-11
WO2006048874A3 WO2006048874A3 (en) 2009-04-30

Family

ID=36319558

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/IL2005/001149 WO2006048874A2 (en) 2004-11-04 2005-11-02 Method of managing a multi-bit-cell flash memory

Country Status (3)

Country Link
US (2) US7716413B2 (en)
KR (1) KR100963707B1 (en)
WO (1) WO2006048874A2 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101329914A (en) * 2007-06-22 2008-12-24 三星电子株式会社 Semiconductor device, memory reading method and memory programming method
US7715232B2 (en) 2007-12-24 2010-05-11 Hynix Semiconductor Inc. Method of determining a flag state of a non-volatile memory device

Families Citing this family (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7333364B2 (en) * 2000-01-06 2008-02-19 Super Talent Electronics, Inc. Cell-downgrading and reference-voltage adjustment for a multi-bit-cell flash memory
US7660941B2 (en) * 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
WO2007023674A1 (en) * 2005-08-22 2007-03-01 Matsushita Electric Industrial Co., Ltd. Memory controller, nonvolatile storage, nonvolatile memory system, and method for writing data
JP4575288B2 (en) * 2005-12-05 2010-11-04 株式会社東芝 Storage medium, storage medium playback apparatus, storage medium playback method, and storage medium playback program
CN103280239B (en) 2006-05-12 2016-04-06 苹果公司 Distortion estimation in memory device and elimination
WO2007132456A2 (en) * 2006-05-12 2007-11-22 Anobit Technologies Ltd. Memory device with adaptive capacity
KR101202537B1 (en) * 2006-05-12 2012-11-19 애플 인크. Combined distortion estimation and error correction coding for memory devices
US7697326B2 (en) * 2006-05-12 2010-04-13 Anobit Technologies Ltd. Reducing programming error in memory devices
US8060806B2 (en) * 2006-08-27 2011-11-15 Anobit Technologies Ltd. Estimation of non-linear distortion in memory devices
KR100782329B1 (en) * 2006-10-02 2007-12-06 삼성전자주식회사 Nonvolatile memory device having a separately arranged flag cell array in memory cell array and method of operating the same
US7975192B2 (en) 2006-10-30 2011-07-05 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
US7821826B2 (en) 2006-10-30 2010-10-26 Anobit Technologies, Ltd. Memory cell readout using successive approximation
US7924648B2 (en) 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
WO2008068747A2 (en) * 2006-12-03 2008-06-12 Anobit Technologies Ltd. Automatic defect management in memory devices
US7900102B2 (en) * 2006-12-17 2011-03-01 Anobit Technologies Ltd. High-speed programming of memory devices
US7593263B2 (en) * 2006-12-17 2009-09-22 Anobit Technologies Ltd. Memory device with reduced reading latency
US8151166B2 (en) * 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
US7751240B2 (en) 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
US7646636B2 (en) * 2007-02-16 2010-01-12 Mosaid Technologies Incorporated Non-volatile memory with dynamic multi-mode operation
US8369141B2 (en) * 2007-03-12 2013-02-05 Apple Inc. Adaptive estimation of memory cell read thresholds
US8001320B2 (en) * 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
WO2008139441A2 (en) 2007-05-12 2008-11-20 Anobit Technologies Ltd. Memory device with internal signal processing unit
US8234545B2 (en) * 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8259497B2 (en) 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
US7869273B2 (en) * 2007-09-04 2011-01-11 Sandisk Corporation Reducing the impact of interference during programming
US8174905B2 (en) * 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
US7773413B2 (en) 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
US8068360B2 (en) * 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
US8527819B2 (en) * 2007-10-19 2013-09-03 Apple Inc. Data storage in analog memory cell arrays having erase failures
US8000141B1 (en) 2007-10-19 2011-08-16 Anobit Technologies Ltd. Compensation for voltage drifts in analog memory cells
WO2009063450A2 (en) * 2007-11-13 2009-05-22 Anobit Technologies Optimized selection of memory units in multi-unit memory devices
US7633798B2 (en) * 2007-11-21 2009-12-15 Micron Technology, Inc. M+N bit programming and M+L bit read for M bit memory cells
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
US8209588B2 (en) * 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
US8456905B2 (en) 2007-12-16 2013-06-04 Apple Inc. Efficient data storage in multi-plane memory devices
US8085586B2 (en) * 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
US8156398B2 (en) * 2008-02-05 2012-04-10 Anobit Technologies Ltd. Parameter estimation based on error correction code parity check equations
US7924587B2 (en) * 2008-02-21 2011-04-12 Anobit Technologies Ltd. Programming of analog memory cells using a single programming pulse per state transition
US7864573B2 (en) 2008-02-24 2011-01-04 Anobit Technologies Ltd. Programming analog memory cells for reduced variance after retention
US8230300B2 (en) * 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
US8059457B2 (en) 2008-03-18 2011-11-15 Anobit Technologies Ltd. Memory device with multiple-accuracy read commands
US8400858B2 (en) 2008-03-18 2013-03-19 Apple Inc. Memory device with reduced sense time readout
US8341331B2 (en) * 2008-04-10 2012-12-25 Sandisk Il Ltd. Method, apparatus and computer readable medium for storing data on a flash device using multiple writing modes
US8111548B2 (en) 2008-07-21 2012-02-07 Sandisk Technologies Inc. Programming non-volatile storage using binary and multi-state programming processes
US8498151B1 (en) 2008-08-05 2013-07-30 Apple Inc. Data storage in analog memory cells using modified pass voltages
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US8169825B1 (en) 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8239734B1 (en) 2008-10-15 2012-08-07 Apple Inc. Efficient data storage in storage device arrays
US8713330B1 (en) 2008-10-30 2014-04-29 Apple Inc. Data scrambling in memory devices
US7852671B2 (en) 2008-10-30 2010-12-14 Micron Technology, Inc. Data path for multi-level cell memory, methods for storing and methods for utilizing a memory array
US8208304B2 (en) * 2008-11-16 2012-06-26 Anobit Technologies Ltd. Storage at M bits/cell density in N bits/cell analog memory cell devices, M>N
US8248831B2 (en) * 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8397131B1 (en) 2008-12-31 2013-03-12 Apple Inc. Efficient readout schemes for analog memory cell devices
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
KR101005120B1 (en) * 2009-02-04 2011-01-04 주식회사 하이닉스반도체 Method of programming a non volatile memory device
US8228701B2 (en) 2009-03-01 2012-07-24 Apple Inc. Selective activation of programming schemes in analog memory cell arrays
US8458114B2 (en) * 2009-03-02 2013-06-04 Analog Devices, Inc. Analog computation using numerical representations with uncertainty
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8179731B2 (en) * 2009-03-27 2012-05-15 Analog Devices, Inc. Storage devices with soft processing
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
US8694814B1 (en) 2010-01-10 2014-04-08 Apple Inc. Reuse of host hibernation storage space by memory controller
US8572311B1 (en) 2010-01-11 2013-10-29 Apple Inc. Redundant data storage in multi-die memory systems
US8218366B2 (en) 2010-04-18 2012-07-10 Sandisk Technologies Inc. Programming non-volatile storage including reducing impact from other memory cells
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
US8595591B1 (en) 2010-07-11 2013-11-26 Apple Inc. Interference-aware assignment of programming levels in analog memory cells
US9104580B1 (en) 2010-07-27 2015-08-11 Apple Inc. Cache memory for hybrid disk drives
US8767459B1 (en) 2010-07-31 2014-07-01 Apple Inc. Data storage in analog memory cells across word lines using a non-integer number of bits per cell
US8856475B1 (en) 2010-08-01 2014-10-07 Apple Inc. Efficient selection of memory blocks for compaction
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
KR20120119331A (en) * 2011-04-21 2012-10-31 에스케이하이닉스 주식회사 Memory and method for operating the same
US20120297248A1 (en) * 2011-05-17 2012-11-22 Alan David Bennett Block write handling after corruption
US9588883B2 (en) * 2011-09-23 2017-03-07 Conversant Intellectual Property Management Inc. Flash memory system
JP2013131275A (en) * 2011-12-22 2013-07-04 Toshiba Corp Nonvolatile semiconductor memory device
KR102005888B1 (en) 2012-07-06 2019-07-31 삼성전자주식회사 Nonvolatile memory device and read method thereof
US9236136B2 (en) 2012-12-14 2016-01-12 Intel Corporation Lower page read for multi-level cell memory
US8913428B2 (en) 2013-01-25 2014-12-16 Sandisk Technologies Inc. Programming non-volatile storage system with multiple memory die
US9026757B2 (en) 2013-01-25 2015-05-05 Sandisk Technologies Inc. Non-volatile memory programming data preservation
US9117530B2 (en) 2013-03-14 2015-08-25 Sandisk Technologies Inc. Preserving data from adjacent word lines while programming binary non-volatile storage elements
US9009568B2 (en) 2013-08-09 2015-04-14 Sandisk Technologies Inc. Sensing parameter management in non-volatile memory storage system to compensate for broken word lines
US10096355B2 (en) 2015-09-01 2018-10-09 Sandisk Technologies Llc Dynamic management of programming states to improve endurance
US11556416B2 (en) 2021-05-05 2023-01-17 Apple Inc. Controlling memory readout reliability and throughput by adjusting distance between read thresholds
US11847342B2 (en) 2021-07-28 2023-12-19 Apple Inc. Efficient transfer of hard data and confidence levels in reading a nonvolatile memory

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6297988B1 (en) * 2000-02-25 2001-10-02 Advanced Micro Devices, Inc. Mode indicator for multi-level memory

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5268870A (en) * 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5544312A (en) * 1994-04-29 1996-08-06 Intel Corporation Method of detecting loss of power during block erasure and while writing sector data to a solid state disk
US5671388A (en) * 1995-05-03 1997-09-23 Intel Corporation Method and apparatus for performing write operations in multi-level cell storage device
US5815434A (en) * 1995-09-29 1998-09-29 Intel Corporation Multiple writes per a single erase for a nonvolatile memory
DE69635105D1 (en) * 1996-01-31 2005-09-29 St Microelectronics Srl Multi-stage memory circuits and corresponding reading and writing methods
US5930167A (en) * 1997-07-30 1999-07-27 Sandisk Corporation Multi-state non-volatile flash memory capable of being its own two state write cache
US5937425A (en) * 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
US6226728B1 (en) * 1998-04-21 2001-05-01 Intel Corporation Dynamic allocation for efficient management of variable sized data within a nonvolatile memory
JP2000040375A (en) * 1998-07-17 2000-02-08 Mitsubishi Electric Corp Semiconductor memory
KR20000031100A (en) 1998-11-03 2000-06-05 이종수 Electronic gauge using flash memory
US6148354A (en) * 1999-04-05 2000-11-14 M-Systems Flash Disk Pioneers Ltd. Architecture for a universal serial bus-based PC flash disk
US6687325B1 (en) * 1999-06-23 2004-02-03 Intel Corporation Counter with non-uniform digit base
US6426893B1 (en) * 2000-02-17 2002-07-30 Sandisk Corporation Flash eeprom system with simultaneous multiple data sector programming and storage of physical block characteristics in other designated blocks
US6834331B1 (en) * 2000-10-24 2004-12-21 Starfish Software, Inc. System and method for improving flash memory data integrity
US6522580B2 (en) * 2001-06-27 2003-02-18 Sandisk Corporation Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states
US6549457B1 (en) * 2002-02-15 2003-04-15 Intel Corporation Using multiple status bits per cell for handling power failures during write operations
US6988175B2 (en) * 2003-06-30 2006-01-17 M-Systems Flash Disk Pioneers Ltd. Flash memory management method that is resistant to data corruption by power loss
US6903972B2 (en) * 2003-07-30 2005-06-07 M-Systems Flash Disk Pioneers Ltd. Different methods applied for archiving data according to their desired lifetime
US7181672B2 (en) * 2003-09-25 2007-02-20 Intel Corporation Method, system, and apparatus for supporting power loss recovery in ECC enabled memory devices
US7310347B2 (en) * 2004-03-14 2007-12-18 Sandisk, Il Ltd. States encoding in multi-bit flash cells
US7272041B2 (en) * 2005-06-30 2007-09-18 Intel Corporation Memory array with pseudo single bit memory cell and method

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6297988B1 (en) * 2000-02-25 2001-10-02 Advanced Micro Devices, Inc. Mode indicator for multi-level memory

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
TANENBAUM. A.S. STRUCTURED COMPUTER ORGANIZATION. 1984, pages 10 - 12 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101329914A (en) * 2007-06-22 2008-12-24 三星电子株式会社 Semiconductor device, memory reading method and memory programming method
US7715232B2 (en) 2007-12-24 2010-05-11 Hynix Semiconductor Inc. Method of determining a flag state of a non-volatile memory device

Also Published As

Publication number Publication date
US7716413B2 (en) 2010-05-11
US20060004952A1 (en) 2006-01-05
KR100963707B1 (en) 2010-06-14
US20080123412A1 (en) 2008-05-29
US8024509B2 (en) 2011-09-20
KR20070087556A (en) 2007-08-28
WO2006048874A3 (en) 2009-04-30

Similar Documents

Publication Publication Date Title
US7716413B2 (en) Method of making a multi-bit-cell flash memory
US8019928B2 (en) Method of managing a multi-bit-cell flash memory
US11150808B2 (en) Flash memory system
US8553457B2 (en) Non-volatile memory with dynamic multi-mode operation
US7706181B2 (en) Multi-bit programming device and method using single-bit memory cells
US20060155919A1 (en) Method of managing a multi-bit cell flash memory with improved reliability and performance
US20080031042A1 (en) Method of avoiding errors in flash memory
EP2048667B1 (en) Methods of programming non-volatile memory cells
WO2007135660A1 (en) Method of storing data in a multi-bit-cell flash memory
JP2007520801A (en) Flash storage system having write / erase failure detection mechanism
WO2009151933A2 (en) Method of storing data on a flash memory device
US20090013139A1 (en) Apparatus and method to prevent data loss in nonvolatile memory
US20060143368A1 (en) Method for using a multi-bit cell flash device in a system not designed for the device
US20080270682A1 (en) Method for using a multi-bit cell flash device in a system not designed for the device
KR20080100079A (en) Method for operating system with writing program code and mass data on nand flash memory and system for executing the method

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A2

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BW BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE EG ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KM KN KP KR KZ LC LK LR LS LT LU LV LY MA MD MG MK MN MW MX MZ NA NG NI NO NZ OM PG PH PL PT RO RU SC SD SE SG SK SL SM SY TJ TM TN TR TT TZ UA UG US UZ VC VN YU ZA ZM ZW

AL Designated countries for regional patents

Kind code of ref document: A2

Designated state(s): BW GH GM KE LS MW MZ NA SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HU IE IS IT LT LU LV MC NL PL PT RO SE SI SK TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

WWE Wipo information: entry into national phase

Ref document number: 1020077010170

Country of ref document: KR

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 05802343

Country of ref document: EP

Kind code of ref document: A2