Systems and methods for improving the performance of non-volatile memory operations

Information

  • Patent Grant
  • 9176859
  • Patent Number
    9,176,859
  • Date Filed
    Wednesday, January 7, 2009
    15 years ago
  • Date Issued
    Tuesday, November 3, 2015
    8 years ago
Abstract
Disclosed herein are systems and methods that recognize and recapture potentially unused processing time in typical page program and block erase operations in non-volatile memory (NVM) devices. In one embodiment, a characterization module within a controller executes a characterization procedure by performing page program and block erase operations on one or more NVM devices in an array and storing execution time data of the operations in a calibration table. The procedure may be executed at start-up and/or periodically so that the time values are reflective of the actual physical condition of the individual NVM devices. A task manager uses the stored time values to estimate the time needed for completing certain memory operations in its task table. Based on the estimated time for completion, the task manager assigns tasks to be executed during page program and/or block erase cycles, so that otherwise unused processing time can be utilized.
Description
BACKGROUND

1. Technical Field


The present invention relates to non-volatile memory, and more specifically, to systems and methods for improving the performance of non-volatile memory operations performed in a storage subsystem.


2. Description of the Related Art


Non-volatile memory (NVM) manufacturers typically build in timing cycles to accommodate the time that is needed to complete page program and block erase operations. For flash memory, a typical page program cycle may last about 200-250 μs, with a maximum of 500-750 μs, and a typical block erase cycle may last about 1.5 ms, with a maximum of 2 ms. However, timing is not uniform across the physical NVM devices and the actual time it takes to complete a page program or block erase operation can vary. Therefore, in many systems, a controller that executes such an operation is required to constantly poll the status register in a programming loop until the operation is completed. The time spent in this waiting state is often wasted and system performance suffers as a result.


SUMMARY

Disclosed herein are systems and methods for optimizing non-volatile memory (NVM) operations in a storage subsystem. The systems and methods recognize and recapture potentially unused processing time in common page program and block erase operations. In one embodiment, a characterization module within a controller executes a characterization procedure by performing random page program and block erase operations on one or more NVM devices in an array. Actual time values for the NVM devices obtained from the characterization procedure are then stored in a calibration table. The characterization procedure may be executed at start-up, or periodically as triggered by certain monitored events such as every 1,000th hour of power-on time so that the values in the calibration table are reflective of the actual physical condition of the individual NVM devices.


A task manager uses these time values in the calibration table to estimate the time needed for completing certain memory operations. Based on the estimated time for completion, the task manager assigns certain tasks, including memory or non-memory operations, to be executed during page program and/or block erase cycles, so that otherwise unused processing time can be efficiently utilized.





BRIEF DESCRIPTION OF THE DRAWINGS

Preferred embodiments of the invention will now be described with reference to the drawings summarized below. These drawings and the associated description are provided to illustrate preferred embodiments of the invention, and not to limit the scope of the invention.



FIG. 1 is a block diagram illustrating a host system linked to a solid-state storage subsystem according to one embodiment of the invention.



FIG. 2 is a flow diagram showing a typical page program operation.



FIG. 3 is a flow diagram showing a typical block erase operation.



FIG. 4 is a flow diagram illustrating a method of creating a calibration table in accordance with one embodiment.



FIG. 5 is a flow diagram illustrating the time assignment operation of the task manager in accordance with one embodiment.



FIG. 6 is a flow diagram illustrating the task assignment operation of the task manager in accordance with one embodiment.



FIG. 7 is a flow diagram illustrating the operation of the task manager during a page program operation in accordance with one embodiment.



FIG. 8 is a flow diagram illustrating the operation of the task manager during a block erase operation in accordance with one embodiment.





DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS

Systems and methods for improving the performance of non-volatile memory operations will now be described with reference to the drawings. Where possible, the same reference numbers are used throughout the drawings to refer to the same or like components. This description is intended to illustrate certain preferred embodiments, but other embodiments that are apparent to those of ordinary skill in the art, including embodiments which do not provide all of the benefits and features set forth herein, are also within the scope of this invention. Thus, nothing in this detailed description is intended to suggest that any particular feature or component is essential. The invention is defined by the claims.


1. OVERVIEW


FIG. 1 is a block diagram illustrating a host system 110 connected to a solid-state storage subsystem 112 according to one embodiment of the invention. The host system 110 comprises a computer such as a personal computer, workstation, router, blade server or other type of computing device. For example, the host system 110 may be a military system, a flight computer or other flight avionics system, a wearable computer used for military applications, a high-speed data recorder, a medical device, an industrial control system, an interactive kiosk, a personal digital assistant, a laptop computer, an interactive wireless communication device, a point-of-sale device, or the like. The solid-state storage subsystem 112 provides the data storage for the host system 110 and may also provide the operating system functionality as well as the boot process data for the host system 110. The host system 110 executes a driver program 113 that provides functionality for communicating with the subsystem 112, such as by issuing commands in accordance with an ATA or other standard.


In one embodiment, the solid-state storage subsystem 112 comprises a controller 114 and a non-volatile memory (NVM) array 116. The NVM array 116 may, but need not, be implemented using NAND memory components. As is conventional, the controller 114 is configured (typically via firmware) to write data to, and read data from, the NVM array 116 in response to commands from the host 110. The controller may implement a wear-leveling algorithm to distribute write operations across memory blocks of the NVM array 116. The storage subsystem 112 may be in the form of a detachable device and may communicate with any standard or unique communications interface, including but not limited to parallel ATA, serial ATA, RS232/423, PCMCIA, USB, Firewire (IEEE-1394), FibreChannel, PCI Express bus, SD/MMC, SCSI, or SAS. The storage subsystem 112 may also receive its power from the host 110 over this interface.


As discussed in detail below, as the controller 114 performs write operations to the NVM array 116, it updates a non-user-data area of the array (i.e., an area not exposed to the host's operating system) with usage statistics information reflective of the number of program/erase cycles that have been executed. This information preferably includes a set of counters, with different counters corresponding to different blocks or areas of the memory array; however, the usage statistics may be maintained in any of a variety of formats. These counters are initially set to zero (or some other selected starting value) when the device is manufactured or first initialized, and are incremented over time as program/erase cycles are performed. In some embodiments, the usage statistics data stored in the memory subsystem 112 also includes timestamps, or other temporal data, received from the host. This temporal data may be used to calculate the useful life of the subsystem 112 in terms of time (e.g., days and hours), as may be desirable for some applications.


The storage subsystem 112 may, for example, be a solid-state memory card that plugs into a slot of the host system 110 and complies with at least one of the following card specifications: CompactFlash, PCMCIA, SmartMedia, MultiMediaCard, SecureDigital, Memory Stick, and ATA/ATAPI. The storage subsystem 112 may, for example, have a housing and signal interface that complies with one of the following specifications: sub 1 inch hard disk drive, 1.8 inch hard disk drive, 2.5 inch hard disk drive and 3.5 inch hard disk drive. A custom form factor and/or signal interface may alternatively be used.


In one embodiment, the controller 114 executes a firmware program to perform processes as described herein and comprises an ATA flash disk controller, for example, a commercially available ATA flash disk controller. The controller 114 may alternatively be implemented using another type of device, such as an application-specific integrated circuit (ASIC), or may comprise multiple distinct devices. Further, although the controller 114 preferably executes firmware, a controller that does not execute a firmware program may be used.


The NVM array 116 comprises a plurality of solid-state storage devices 118 coupled to the controller 114. The solid-state storage devices 118 may comprise, for example, flash integrated circuits, Chalcogenide RAM (C-RAM), Phase Change Memory (PC-RAM or PRAM), Programmable Metallization Cell RAM (PMC-RAM or PMCm), Ovonic Unified Memory (OUM), Resistance RAM (RRAM), NAND memory, NOR memory, EEPROM, Ferroelectric Memory (FeRAM), or other discrete NVM chips. The solid-state storage devices 118 may be physically divided into blocks, pages and sectors, as is known in the art.


The host system 110 exchanges control signals 122 with the controller 114 to coordinate the reading and writing of data to and from the solid-state storage (NVM) devices 118. The controller 114 handles the read and write operations by sending memory control signals 120 to the NVM array 116. The control signals 122 may include, for example, read commands and write commands. The control signals 122 may be used to send commands selected from, for example, industry standard command sets such as those provided by ATA, CF card or PC card standards to read from or write data to standard storage devices. The host system 110 also exchanges data signals 124 with the controller 114. The data signals may include, for example, data to be written to the NVM array 116, data read from the NVM array, and data that relate to monitored conditions and usage statistics of the NVM array.


2. PROCESSING TIMES IN TYPICAL PAGE PROGRAM AND ERASE BLOCK OPERATIONS

Major NVM manufacturers typically build in timing cycles to accommodate the time that is needed to complete page program and block erase operations. For flash memory, a typical page program cycle lasts about 200-250 μs, with a maximum of 500-750 μs, and a typical block erase cycle lasts about 1.5 ms, with a maximum of 2 ms. FIG. 2 is a flow diagram showing a typical method 200 of programming a page. Once a controller 114 initiates the page program function, it repeatedly polls the status register in a loop at states 202 and 204 until programming is complete. A similar situation takes place in block erase operations. FIG. 3 is a flow diagram showing a typical method 300 of erasing a block. The controller 114 that is erasing a block in the memory also needs to poll the status register at state 302 and loops until the operation is complete at state 304.


In both of the above operations, a substantial amount of processor time in the controller is unused as a result of waiting for either a page program or block erase operation to complete. Because there is a wide disparity between the typical and maximum timing of each operation, the controller is unable to anticipate how long this wait time lasts and thus cannot effectively make use of this “wasted” processor time. The disclosed systems and methods enable the processor to perform other tasks, including memory or non-memory operations, while these memory operations are taking place.


The page program and block erase operations are shown as examples only. Those skilled in the art will recognize that embodiments of the invention are applicable to other memory or non-memory operations as well.


3. CHARACTERIZATION OF NVM DEVICES

In one embodiment, NVM devices are characterized by the characterization module 126 within the controller 114 in order to measure the actual times involved in page program and block erase operations. With the actual time values recorded, the controller can thus anticipate expected wait time during these operations and may perform background tasks, such as housekeeping and streamlining data, during page program and block erase operations. One embodiment provides a characterization function that is run at power-up and/or some other time. In one embodiment, the characterization function performs, for testing purposes, sampled page program and block erase commands on each NVM device within the storage subsystem and stores the execution times in a calibration table. In another embodiment, the characterization module 126 observes and records execution time data related to memory operations that take place during the normal course of operation of the storage sub-system. In other embodiments, the characterization module 126 may store separate execution time data related memory operations for particular blocks. These program and erase times are used to approximate the time needed for actual operations. FIG. 4 shows an example of characterization operation performed on four example NVM devices in the storage subsystem. For example, as shown in the characterization table 404, NVM device No. 1 has a recorded erase time of 1.5 ms and a recorded program time of 240 μs. In one embodiment, the times recorded in the calibration table 404 are averages of the times obtained from the characterization operation. In one embodiment, weighted averages are obtained with greater weight given to values obtained in more recent characterization operations. Other embodiments record the fastest or slowest times from the characterization operation.


Because the timing of page program and block erase operations can vary over the life of the NVM device or change as a result the operating environment, the characterization function may be run at periodic intervals so that values stored in the calibration table remain reflective of the actual operation times of the devices. For example, re-characterization may be used with a monitoring mechanism associated with the NVM so that re-characterization is triggered by one or more monitored events, such as:


1) when there is a temperature change of, for example, every 10 degrees C.,


2) when there is an NVM usage increase or decrease of, for example, every 10%,


3) when the NVM array has been operating for a certain period (for example, at every 1,000th hour of power-on time),


4) when the NVM array has been powered up for a certain amount of time (for example, at every 10th power-up), and/or


5) when the supply voltage level to the NVM array changes by a certain threshold amount (for example, every 0.1 V for a standard 3.3V supply voltage).


Further examples of trigger events and an example monitoring mechanism for NVM are fully described in co-pending U.S. patent application Ser. No. 11/429,936, filed May 8, 2006, the disclosures of which are hereby fully incorporated by reference. In one embodiment, the characterization module 126 stores, and the task manager 128 uses, different sets of calibration data for different monitored environmental conditions. For example, for each block the characterization module 126 could store two sets of execution times, one for a first temperature range, and the other for a second temperature range.


4. TIME AND TASK ASSIGNMENT FUNCTIONS

In one embodiment, the task manager 128 performs two basic functions: a time assignment function and a task assignment function. FIG. 5 shows the time assignment function in accordance with one embodiment. The controller 114 may have a number of tasks slated for execution in a task table 402. In one embodiment, the task table 402 includes lower priority tasks that the controller may need to perform during the course of normal operation. Examples of low priority tasks include computing usage statistic data, pre-processing queued commands, prioritizing queued commands, etc. As shown, the time assignment function takes tasks in the task table 402 and looks up the recorded execution time in the calibration table 404. For example, the first task shown in the task table 402 is a block erase operation 408 for NVM device No. 1 in the storage subsystem 116. The time assignment function finds a corresponding time in the calibration table 404, which is 1.5 ms. Then the entry 410 in the task table 402 is updated with the time located in the calibration table 404. In one embodiment, the calibration table 402 may include NVM operation with pre-set values that are not obtained through characterization. For example, the calibration table 402 shows NVM operation such as “other function 1” and “other function 2.”



FIG. 6 illustrates the operation of the task assignment function 600 in accordance with one embodiment. At state 602, the task manager 128 determines the duration of the available timeslot based on the current NVM operation at hand. The current operation may be an operation that is not in the task table 402, though in some embodiments that it may be a task within the task table 402. In one embodiment, the controller 114 launches the task manager 128 and provides the task manager with an expected duration of the current NVM operation. The expected duration may be obtained from the task table 402. For example, the topmost operation in task table 402 is a block erase operation that takes 1.5 ms. The value of 1.5 ms is thus supplied to the task manager 128. In another embodiment, the task manager 128 determines the duration by directly obtaining the value from the task table 402.


Then at state 604, the task manager 128 selects one or more tasks from the task table 402 to be executed during the execution of the current NVM operation. In the example mentioned above, the task manager finds tasks to be executed within the allotted 1.5 ms. At state 606, the task manager determines if there is still time left in the allotted time for additional tasks. In one embodiment, additional tasks are added until there is no task left that can be executed within the remaining time. Once the last task is added, the task manager 128 causes the selected tasks to be executed in state 608. In one embodiment, the tasks from the task table can be selected out of turn as long as they can be executed during the available time slot. For example, the task manager 128 may select “Other function 1” and “Other function 2” to be executed during the 1.5 ms allotted, since both of those tasks only add up to 1.25 ms (700 μs+550 μs).


Having described the two primary functions of the task manager 128, FIG. 7 shows an example page program operation 700 in which the task manager 128 is executed in accordance with one embodiment. Upon execution of the page program operation, the controller 114 launches or otherwise causes the task manager 128 to be executed at state 702. The task manager is given the expected execution time of the page program command, based on the value obtained from the calibration table 402 in one embodiment. The task manager 128 selects one or more tasks from the task table 404 that can be executed within the recorded execution time of the example page program operation as shown, which is 330 μs. The tasks are selected in accordance with, for example, the method shown in FIG. 6. These selected tasks are then executed, and upon their completion, the controller 114 then polls the status register at state 704. Because the task manager 128 selects the appropriate tasks that the controller 114 can execute during the program page operation, the wait time the controller 114 must spend to poll the status register at state 704 is minimized. When the page program operation completes at state 706, the operation ends. Performance of the controller is improved as a result of utilizing previously unused wait time to execute NVM tasks.



FIG. 8 shows a block erase operation 800 in which the task manager 128 is executed in accordance with one embodiment. Upon execution of the block erase operation, the controller 114 launches or otherwise causes the task manager 128 to be executed at state 802. The task manager is given the expected execution time of the block erase command, based on the value obtained from the calibration table 402 in one embodiment. The task manager 128 selects one or more tasks from the task table 404 that can be executed within the recorded execution time of the example block erase operation as shown, which is 1.4 ms. The tasks are selected in accordance with, for example, the method shown in FIG. 6. These selected tasks are then executed, and upon their completion, the controller 114 then polls the status register at state 804. Because the task manager 128 selects the appropriate tasks that the controller 114 can execute during the block erase operation, the wait time the controller 114 must spend to poll the status register at state 804 is minimized. When the page program operation completes at state 806, the operation ends.


5. CONCLUSION

Embodiments of this invention can be, and typically would be, implemented solely in the storage subsystem, such that no special hardware or software needs to be added to the host. Alternatively, all of the methods and processes described above may be embodied in, and fully automated via, software code modules executed by one or more general purpose computers or processors. The code modules may be stored in any type of computer-readable medium or other computer storage device. Some or all of the methods may alternatively be embodied in specialized computer hardware. In addition, the components referred to herein may be implemented in hardware, software, firmware, or a combination thereof.


In general, the word “module,” as used herein, refers to logic embodied in hardware and/or firmware, or to a collection of software instructions, possibly having entry and exit points, written in a programming language, such as, for example, Java, Lua, C or C++. A software module may be compiled and linked into an executable program, installed in a dynamic link library, or may be written in an interpreted programming language such as, for example, BASIC, Perl, or Python. It will be appreciated that software modules may be callable from other modules or from themselves, and/or may be invoked in response to detected events or interrupts. Software instructions may be embedded in firmware, such as an EPROM. It will be further appreciated that hardware modules may be comprised of connected logic units, such as gates and flip-flops, and/or may be comprised of programmable units, such as programmable gate arrays or processors. The modules described herein can be implemented in hardware (general purpose or application-specific), software, and/or firmware. Generally, the modules described herein refer to logical modules that may be combined with other modules or divided into sub-modules despite their physical organization or storage.


Conditional language, such as, among others, “can,” “could,” “might,” or “may,” unless specifically stated otherwise, or otherwise understood within the context as used, is generally intended to convey that certain embodiments include, while other embodiments do not include, certain features, elements and/or steps. Thus, such conditional language is not generally intended to imply that features, elements and/or steps are in any way required for one or more embodiments or that one or more embodiments necessarily include logic for deciding, with or without user input or prompting, whether these features, elements and/or steps are included or are to be performed in any particular embodiment.


Any process descriptions, elements, or blocks in the flow diagrams described herein and/or depicted in the attached figures should be understood as potentially representing modules, segments, or portions of code which include one or more executable instructions for implementing specific logical functions or steps in the process. Alternate implementations are included within the scope of the embodiments described herein in which elements or functions may be deleted, executed out of order from that shown or discussed, including substantially concurrently or in reverse order, depending on the functionality involved, as would be understood by those skilled in the art.


It should be emphasized that many variations and modifications may be made to the above-described embodiments, the elements of which are to be understood as being among other acceptable examples. All such modifications and variations are intended to be included herein within the scope of this disclosure.

Claims
  • 1. A storage subsystem for storing data provided by a host system, the storage subsystem comprising: a non-volatile solid-state memory array; anda controller comprising: a characterization module configured to record, in a calibration table, a first set and a second set of execution times of memory access operations performed on a plurality of memory devices in the non-volatile solid-state memory array, the first set of execution times corresponding to a first environmental condition and the second set of execution times corresponding to a second environmental condition; anda task manager configured to: determine a first execution time associated with a current memory access operation;select a set of execution times from the first set and the second set of execution times based on a current environmental condition;determine, for each task in a plurality of available tasks, a task execution time based on a type of the task and the selected set of execution times, wherein the determined task execution time corresponds to a recorded execution time in the selected set of execution times; andselect from the plurality of available tasks, based on the first execution time and the task execution time for each task in the plurality of available tasks, one or more memory access tasks to be executed on the plurality of memory devices while the controller is performing the current memory access operation, the selected one or more memory access tasks having a total execution time that is less than the first execution time associated with the current memory access operation, wherein the one or more memory access tasks to be executed comprise at least one of: a read host data operation, a program operation, and an erase operation, and wherein the current environmental condition corresponds to one of the first environmental condition and the second environmental condition.
  • 2. The storage subsystem of claim 1, wherein the memory access operations are memory access operations executed during the course of normal usage of the storage subsystem.
  • 3. The storage subsystem of claim 1, wherein the memory access operations are calibration operations.
  • 4. The storage subsystem of claim 3, wherein the characterization module is configured to perform calibration operations as triggered by a monitored event.
  • 5. The storage subsystem of claim 4, wherein the monitored event is a temperature change by one or more present threshold values.
  • 6. The storage subsystem of claim 4, wherein the monitored event is an increase in usage of the storage subsystem by a threshold amount.
  • 7. The storage subsystem of claim 4, wherein the monitored event is reaching a threshold amount of power-on time.
  • 8. The storage subsystem of claim 4, wherein the monitored event is reaching a threshold number of power up.
  • 9. The storage subsystem of claim 4, wherein the monitored event is a voltage level change by a threshold amount.
  • 10. The storage subsystem of claim 1, wherein the recorded execution times comprise execution time data associated with particular blocks of the non-volatile memory array.
  • 11. The storage subsystem of claim 10, wherein the recorded execution times comprise separate execution time data associated with particular blocks of the non-volatile memory array.
  • 12. The storage subsystem of claim 10, wherein the recorded execution times comprise execution time data associated with page programming cycles of particular blocks of the non-volatile memory array.
  • 13. The storage subsystem of claim 10, wherein the recorded execution times comprise execution time data associated with block erase cycles of particular blocks of the non-volatile memory array.
  • 14. The storage subsystem of claim 1, wherein the recorded execution times comprise execution time data associated with different monitored conditions of the non-volatile memory array.
  • 15. A method for optimizing memory operations executed by a controller for a storage subsystem for storing data provided by a host system, the method comprising: executing a plurality of memory access operations on a plurality of memory devices in a storage subsystem for a first environmental condition and for a second environmental condition;recording a first set of execution times of the plurality of memory access operations corresponding to the first environmental condition;recording a second set of execution times of the plurality of memory access operations corresponding to the second environmental condition;determining a first execution time associated with a current memory access operation;selecting a set of execution times from the first set and the second set of execution times based on a current environmental condition;determining, for each task in a plurality of available tasks, a task execution time based on a type of the task and the selected set of execution times, wherein the determined task execution time corresponds to a recorded execution time in the selected set of execution times;selecting from the plurality of available tasks, based on the first execution time and the task execution time for each task in the plurality of available tasks, one or more memory access tasks with a total recorded execution time that is less than the first execution time associated with the current memory access operation; andexecuting the selected one or more memory access tasks while the current memory access operation is being executed;wherein the selected one or more memory access tasks comprise at least one of: a read host data operation, a program operation, and an erase operation, andwherein the current environmental condition corresponds to one of the first environmental condition and the second environmental condition.
  • 16. The method of claim 15, wherein the memory access operations are memory operations executed during the course of normal usage of the storage subsystem.
  • 17. The method of claim 15, wherein the memory access operations are calibration operations.
  • 18. The method of claim 15, wherein the current memory access operation is a page programming operation.
  • 19. The method of claim 15, wherein the current memory access operation is a block erase operation.
  • 20. The method of claim 15, wherein the executing and recording are performed when triggered by a monitored event.
  • 21. The method of claim 20, wherein the monitored event is a temperature change by one or more present threshold values.
  • 22. The method of claim 20, wherein the monitored event is an increase in usage of the storage subsystem by a threshold amount.
  • 23. The method of claim 20, wherein the monitored event is reaching a threshold amount of power-on time.
  • 24. The method of claim 20, wherein the monitored event is reaching a threshold number of power up.
  • 25. The method of claim 20, wherein the monitored event is a voltage level change by a threshold amount.
  • 26. A non-transitory computer-readable medium having stored thereon executable code which, when executed by a storage subsystem, causes the computer to perform the method of claim 15.
  • 27. A storage subsystem, comprising: a solid state non-volatile memory array, anda controller configured to write data to, and read data from, the solid state non-volatile memory in response to memory access commands received from a host system, the controller additionally configured to record, for each of a plurality of regions of the non-volatile solid state memory array, execution time data reflective of memory access operation execution times for the respective regions for a first environmental condition and for a second environmental condition, the controller further operative configured to:select a set of execution times from the recorded execution times based on a current environmental condition;determine, for each task in a plurality of available tasks, a task execution time based on a type of the task and the selected set of execution times, wherein the determined task execution time corresponds to a recorded execution time in the selected set of execution times; andselect from the plurality of available tasks, based on the task execution time for each task in the plurality of available tasks, memory access tasks to perform concurrently with particular memory access operations initiated by the host system, the selected memory access tasks comprising at least one of: a read host data operation, a program operation, and an erase operation, and the current environmental condition corresponding to one or the first environmental condition and the second environmental condition.
US Referenced Citations (183)
Number Name Date Kind
4644494 Muller Feb 1987 A
4937736 Chang et al. Jun 1990 A
5018096 Aoyama May 1991 A
5640529 Hasbun Jun 1997 A
5768189 Takahashi Jun 1998 A
5781783 Gunther et al. Jul 1998 A
5860137 Raz et al. Jan 1999 A
5929590 Tang Jul 1999 A
6052799 Li et al. Apr 2000 A
6134631 Jennings, III Oct 2000 A
6173360 Beardsley et al. Jan 2001 B1
6286087 Ito et al. Sep 2001 B1
6324627 Kricheff et al. Nov 2001 B1
6484229 Ichikawa et al. Nov 2002 B1
6633963 Ellison et al. Oct 2003 B1
6640268 Kumar Oct 2003 B1
6654850 Fox et al. Nov 2003 B2
6661724 Snyder et al. Dec 2003 B1
6694381 Lo et al. Feb 2004 B1
6792519 Constable et al. Sep 2004 B2
6856556 Hajeck Feb 2005 B1
6968434 Kamano et al. Nov 2005 B2
7003644 Heath et al. Feb 2006 B2
7024410 Ito et al. Apr 2006 B2
7114051 Guu et al. Sep 2006 B2
7126857 Hajeck Oct 2006 B2
7139871 Mizuno Nov 2006 B2
7139890 Moran et al. Nov 2006 B2
7149046 Coker et al. Dec 2006 B1
7170788 Wan et al. Jan 2007 B1
7213117 Wakabayashi et al. May 2007 B2
7224604 Lasser May 2007 B2
7287118 Chang et al. Oct 2007 B2
7307881 Chen et al. Dec 2007 B2
7315917 Bennett et al. Jan 2008 B2
7330954 Nangle Feb 2008 B2
7408804 Hemink et al. Aug 2008 B2
7430136 Merry, Jr. et al. Sep 2008 B2
7441067 Gorobets et al. Oct 2008 B2
7447807 Merry et al. Nov 2008 B1
7450436 Salessi et al. Nov 2008 B2
7467253 Yero Dec 2008 B2
7502256 Merry, Jr. et al. Mar 2009 B2
7509441 Merry et al. Mar 2009 B1
7515471 Oh et al. Apr 2009 B2
7596643 Merry, Jr. et al. Sep 2009 B2
7609565 Lee Oct 2009 B2
7653778 Merry, Jr. et al. Jan 2010 B2
7654466 Maeda et al. Feb 2010 B2
7685337 Merry, Jr. et al. Mar 2010 B2
7685338 Merry, Jr. et al. Mar 2010 B2
7685374 Diggs et al. Mar 2010 B2
7733712 Walston et al. Jun 2010 B1
7765373 Merry et al. Jul 2010 B1
7870128 Jensen et al. Jan 2011 B2
7898855 Merry, Jr. et al. Mar 2011 B2
7912991 Merry et al. Mar 2011 B1
7936603 Merry, Jr. et al. May 2011 B2
7962792 Diggs et al. Jun 2011 B2
8078918 Diggs et al. Dec 2011 B2
8090899 Syu Jan 2012 B1
8095851 Diggs et al. Jan 2012 B2
8108692 Merry et al. Jan 2012 B1
8122185 Merry, Jr. et al. Feb 2012 B2
8127048 Merry et al. Feb 2012 B1
8135903 Kan Mar 2012 B1
8151020 Merry, Jr. et al. Apr 2012 B2
8161227 Diggs et al. Apr 2012 B1
8166245 Diggs et al. Apr 2012 B2
8243525 Kan Aug 2012 B1
8254172 Kan Aug 2012 B1
8261012 Kan Sep 2012 B2
8296625 Diggs et al. Oct 2012 B2
8312207 Merry, Jr. et al. Nov 2012 B2
8316176 Phan et al. Nov 2012 B1
8341339 Boyle et al. Dec 2012 B1
8375151 Kan Feb 2013 B1
8392635 Booth et al. Mar 2013 B2
8397107 Syu et al. Mar 2013 B1
8407449 Colon et al. Mar 2013 B1
8423722 Deforest et al. Apr 2013 B1
8433858 Diggs et al. Apr 2013 B1
8443167 Fallone et al. May 2013 B1
8447920 Syu May 2013 B1
8458435 Rainey, III et al. Jun 2013 B1
8478930 Syu Jul 2013 B1
8489854 Colon et al. Jul 2013 B1
8503237 Horn Aug 2013 B1
8521972 Boyle et al. Aug 2013 B1
8549236 Diggs et al. Oct 2013 B2
8583835 Kan Nov 2013 B1
8601311 Horn Dec 2013 B2
8601313 Horn Dec 2013 B1
8612669 Syu et al. Dec 2013 B1
8612804 Kang et al. Dec 2013 B1
8615681 Horn Dec 2013 B2
8638602 Horn Jan 2014 B1
8639872 Boyle et al. Jan 2014 B1
8683113 Abasto et al. Mar 2014 B2
8700834 Horn et al. Apr 2014 B2
8700950 Syu Apr 2014 B1
8700951 Call et al. Apr 2014 B1
8706985 Boyle et al. Apr 2014 B1
8707104 Jean Apr 2014 B1
8713066 Lo et al. Apr 2014 B1
8713357 Jean et al. Apr 2014 B1
8719531 Strange et al. May 2014 B2
8724422 Agness et al. May 2014 B1
8725931 Kang May 2014 B1
8745277 Kan Jun 2014 B2
8751728 Syu et al. Jun 2014 B1
8769190 Syu et al. Jul 2014 B1
8769232 Suryabudi et al. Jul 2014 B2
8775720 Meyer et al. Jul 2014 B1
8782327 Kang et al. Jul 2014 B1
8788778 Boyle Jul 2014 B1
8788779 Horn Jul 2014 B1
8788880 Gosla et al. Jul 2014 B1
8793429 Call et al. Jul 2014 B1
8825940 Diggs Sep 2014 B1
20020073272 Ko et al. Jun 2002 A1
20030162549 Carlsson Aug 2003 A1
20030163633 Aasheim et al. Aug 2003 A1
20030182496 Yoo Sep 2003 A1
20030188092 Heath et al. Oct 2003 A1
20040015653 Trantham Jan 2004 A1
20050160195 Bruner et al. Jul 2005 A1
20050196165 Dybsetter et al. Sep 2005 A1
20060095699 Kobayashi et al. May 2006 A1
20060143426 Wu Jun 2006 A1
20060184736 Benhase Aug 2006 A1
20060190696 Ito et al. Aug 2006 A1
20060236392 Thomas et al. Oct 2006 A1
20060294338 Fisher et al. Dec 2006 A1
20070033362 Sinclair Feb 2007 A1
20070050536 Kolokowsky Mar 2007 A1
20070079065 Bonella et al. Apr 2007 A1
20070079097 Karnowski et al. Apr 2007 A1
20070136553 Sinclair Jun 2007 A1
20070192538 Dawkins Aug 2007 A1
20070208604 Purohit et al. Sep 2007 A1
20070233939 Kim Oct 2007 A1
20070245065 Kagan et al. Oct 2007 A1
20070247933 Kagan Oct 2007 A1
20080019189 Lin Jan 2008 A1
20080019196 Lin Jan 2008 A1
20080082726 Elhamias Apr 2008 A1
20080091872 Bennett et al. Apr 2008 A1
20080098164 Lee et al. Apr 2008 A1
20080126449 Haitsma May 2008 A1
20080162798 Lofgren et al. Jul 2008 A1
20080270678 Cornwell et al. Oct 2008 A1
20080282024 Biswas et al. Nov 2008 A1
20080294813 Gorobets Nov 2008 A1
20090089492 Yoon et al. Apr 2009 A1
20090091979 Shalvi Apr 2009 A1
20090125782 Josefiak et al. May 2009 A1
20090138654 Sutardja May 2009 A1
20090150599 Bennett Jun 2009 A1
20090172213 Jayachandran et al. Jul 2009 A1
20090204853 Diggs et al. Aug 2009 A1
20100061152 De Caro et al. Mar 2010 A1
20100174849 Walston et al. Jul 2010 A1
20100250793 Syu Sep 2010 A1
20110099323 Syu Apr 2011 A1
20110191526 Haukness et al. Aug 2011 A1
20110283049 Kang et al. Nov 2011 A1
20120260020 Suryabudi et al. Oct 2012 A1
20120278531 Horn Nov 2012 A1
20120284460 Guda Nov 2012 A1
20120324191 Strange et al. Dec 2012 A1
20130132638 Horn et al. May 2013 A1
20130145106 Kan Jun 2013 A1
20130290793 Booth et al. Oct 2013 A1
20140059405 Syu et al. Feb 2014 A1
20140101369 Tomlin et al. Apr 2014 A1
20140115427 Lu Apr 2014 A1
20140133220 Danilak et al. May 2014 A1
20140136753 Tomlin et al. May 2014 A1
20140149826 Lu et al. May 2014 A1
20140157078 Danilak et al. Jun 2014 A1
20140181432 Horn Jun 2014 A1
20140223255 Lu et al. Aug 2014 A1
Foreign Referenced Citations (3)
Number Date Country
1662886 Aug 2005 CN
1761935 Apr 2006 CN
1985239 Jun 2007 CN
Non-Patent Literature Citations (26)
Entry
Micron Technical Note, “NAND Flash 101: An Introduction to NAND Flash and How to Design It in to Your Next Product”, TN-29-19, Nov. 2006, http://download.micron.com/pdf/technotes/nand/tn2919.pdf, pp. 1-28.
Office Action dated Feb. 28, 2011 from U.S. Appl. No. 12/410,304, 11 pages.
Office Action dated Nov. 16, 2010 from U.S. Appl. No. 12/410,304, 22 pages.
Office Action dated May 25, 2011 from U.S. Appl. No. 12/326,780, 37 pages.
Office Action dated Jun. 3, 2011 from U.S. Appl. No. 12/410,304, 4 pages.
Notice of Panel Decision dated Aug. 18, 2011 from U.S. Appl. No. 12/410,304, 2 pages.
Brief on Appeal submitted on Sep. 19, 2011 in U.S. Appl. No. 12/410,304 in 14 pages.
Examiner's Answer mailed on Oct. 7, 2011 received in U.S. Appl. No. 12/410,304 in 14 pages.
Office Action dated Nov. 8, 2011 from U.S. Appl. No. 12/326,780, 39 pages.
Office Action mailed on Mar. 20, 2012 received in U.S. Appl. No. 12/326,780 in 24 pages.
Advisory Action dated May 22, 2013 from U.S. Appl. No. 12/326,780, 11 pages.
Office Action dated Nov. 30, 2012 received in U.S. Appl. No. 12/326,780, 46 pages.
Office Action dated Oct. 8, 2013 from Chinese Patent Application No. 201010134420.0, filed Mar. 16, 2010, 16 pages.
Interview Summary dated Sep. 2, 2011 from U.S. Appl. No. 12/326,780, 3 pages.
Notice of Allowance dated Dec. 11, 2013 from U.S. Appl. No. 12/326,780, 15 pages.
Decision on Appeal dated Jul. 31, 2014 from U.S. Appl. No. 12/410,304, filed Mar. 24, 2009, 10 pages.
Office Action dated Jul. 25, 2013 from Chinese Patent Application No. 201010134420.0 filed Jan. 7, 2010 and English translation of the State Intellectual Property Office of P.R.C. Search Report, 20 pages.
Office Action dated Apr. 15, 2014 from Chinese Patent Application No. 201010134420.0 filed Jan. 7, 2010 and English translation of the State Intellectual Property Office of P.R.C. Search Report, 13 pages.
Chinese Office Action dated Dec. 16, 2014 from related Chinese Application Serial No. 201010002144.2, 11 pages.
Meiman Lin Syu, U.S. Appl. No. 12/410,304, filed Mar. 24, 2009, 27 pgs.
Second Office Action dated Jun. 26, 2014 from Chinese Patent Application No. 201010134420.0 filed Mar. 16, 2010 and English Translation, 8 pages.
Notice of Allowance dated Apr. 25, 2014 from U.S. Appl. No. 12/326,780, 10 pgs.
Notice of Allowance dated Oct. 24, 2014 from U.S. Appl. No. 12/410,304, 36 pgs.
Notice of Allowance dated Mar. 13, 2015, from U.S. Appl. No. 12/410,304 11 pgs.
First Office Action, and translation thereof, from Chinese Application No. 201010002144.2, dated Jul. 25, 2013, 20 pp.
Second Office Action, and translation thereof, from Chinese Application No. 201010002144.2, dated Apr. 15, 2014, 26 pp.
Related Publications (1)
Number Date Country
20100174849 A1 Jul 2010 US