The present technology relates to non-volatile memory.
Semiconductor memory has become increasingly popular for use in various electronic devices. For example, non-volatile semiconductor memory is used in cellular telephones, digital cameras, personal digital assistants, mobile computing devices, non-mobile computing devices and other devices. Electrically Erasable Programmable Read Only Memory (EEPROM) and flash memory are among the most popular non-volatile semiconductor memories. With flash memory, also a type of EEPROM, the contents of the whole memory array, or of a portion of the memory, can be erased in one step, in contrast to the traditional, full-featured EEPROM.
Both the traditional EEPROM and the flash memory utilize a floating gate that is positioned above and insulated from a channel region in a semiconductor substrate. The floating gate is positioned between the source and drain regions. A control gate is provided over and insulated from the floating gate. The threshold voltage (Vth) of the transistor thus formed is controlled by the amount of charge that is retained on the floating gate. That is, the minimum amount of voltage that must be applied to the control gate before the transistor is turned on to permit conduction between its source and drain is controlled by the level of charge on the floating gate.
Some EEPROM and flash memory devices have a storage element or cell with a floating gate that is used to store two ranges of charges and, therefore, the storage element can be programmed/erased between two states, e.g., an erased state and a programmed state. Such a flash memory device is sometimes referred to as a binary flash memory device because each storage element can store one bit of data.
A multi-state (also called multi-level) flash memory device is implemented by identifying multiple distinct allowed/valid programmed threshold voltage ranges. Each distinct threshold voltage range corresponds to a predetermined value for the set of data bits encoded in the memory device. For example, each storage element can store two bits of data when the element can be placed in one of four discrete charge bands corresponding to four distinct threshold voltage ranges.
Typically, the storage elements are provided in one or more arrays on a memory die with associated control circuitry. The control circuitry in turn communicates with an external controller, which itself may communicate with a host electronic device. However, techniques are need with which allow the external controller to have greater control over the control circuitry.
In the drawings, like-numbered elements correspond to one another.
A method and non-volatile storage system are provided in which an external controller has greater control over control circuitry on a memory die.
In an embedded system application for non-volatile storage, an external controller is used to control on-chip control circuitry which in turn communicates with a storage element array. The external controller acts as an interface between a host/user and the control circuitry. The control circuitry can include a state machine which manages algorithms for a flash memory chip. The external controller can manage protocols, error correction coding (ECC) and decoding, wear leveling and other processes for one or more memory die.
The control circuitry can perform tasks such as program, read, erase, garbage collecting and entering a low power mode, in response to commands from the external controller. Garbage collecting is a form of automatic memory management in which memory space occupied by data that is no longer needed reclaimed. The control circuitry can automatically suspend and resume a task such as to service a higher-priority command received from the external controller. However, the external controller may experience unknown or unacceptable delays in waiting for the control circuitry to automatically suspend and resume a task. In one approach, the external controller has the ability to issue a manual suspend command on a communication path or channel which is constantly monitored by the control circuitry, and the control circuitry responds by suspending a currently-executing task as soon as possible. The control circuitry is configured to suspend a task either immediately, with essentially no delay, or at a next acceptable point in the task. The external controller similarly has the ability to issue a manual resume command, which can be provided on the communication path when the control circuitry has a ready status.
Example scenarios include manual suspend without manual resume, manual resume without manual suspend and combining a manual suspend and/or resume with an automatic suspend and/or resume. An automatic suspend is performed by the control circuitry in response to a command sequence, which is something other than a manual suspend command, from the external controller. An automatic suspend is performed by the control circuitry on its own, and not in response to a manual suspend command or other command. In some cases, a task is not suspended even when a manual suspend command is issued since, e.g., the task has completed.
In another embodiment, the external controller does not issue a manual suspend command, but can issue an illegal command which causes a task to be suspended. Further, the external controller can issue a command which causes a suspended task to be aborted, so that it cannot be resumed. Many variations are possible in which the external controller has an improved ability to control the control circuitry.
Generally, in the discussion below,
The communication path can have a ready or busy status (identified by the signal ExternalBusyn discussed further below) which is set by the control circuitry to indicate whether it is ready or busy. In one possible option, the external controller can access a ready/busy pin to determine the ready/busy status, via an auxiliary channel. In another possible option, the external controller accesses the ready/busy status via the same communication path over which it communicates commands and data. When the control circuitry is ready, the external controller knows that it is able to send commands and data to the control circuitry via the one or more communication paths, and the control circuitry is waiting to receive such commands, address and data. When the control circuitry is busy, the external controller waits to send most commands and data to the control circuitry. Commands for suspending and resuming tasks can be provided from the external controller to the control circuitry when the status is ready or busy, but may not be acted on by the control circuitry immediately when the status is busy depending on the stage of flash operation.
The external controller can thus communicate with the control circuitry at any time, even when the busy status is set for the communication path. In one approach, the external controller 26 provides a manual suspend command (MSuspend) to the control circuitry via the communication path and provides other commands and data to, and receives data from, the control circuitry via the communication path. Each control circuitry 18, 24 can communicate with its storage elements via a respective communication path 17, 19 internal to the memory chip. This internal communication path can have a ready or busy status (identified by the signal InternalBusyn discussed further below).
The commands provided to the control circuitry can include a manual resume command (MResume), a program command, a read command, an erase command, a command to enter a low power mode and a status check command. The data provided to the control circuitry can include program data which is to be written to storage elements. The data received from the control circuitry can include read data which was read from storage elements, and status data which includes a task status and a suspend status. The status data can be returned to the external controller from the control circuitry in response to a status check command from the external controller. The status data can be a byte of data, for instance, in which the bit positions and values have pre-assigned meanings.
The task status can indicate whether a task has been successfully completed by the control circuitry, e.g., using a pass/fail indication, as well as providing a progress of the task. The progress of a program task, for instance, could indicate whether storage elements which are to be programmed to a certain target data state (e.g., A-state, B-state, . . . ) have completed programming. The task status could indicate that the A-state storage elements have completed programming but the B-state storage elements have not completed programming. The task status can be for a previous task or a current task. The task status can indicate a type of the task, including multilevel cell (MLC) erasing (read does not have status normally) or programming, or single level cell (SLC) erasing or programming. An MLC read task uses two or more control gate/word line voltages to distinguish between three or more data states, while an SLC read task uses one control gate/word line voltage to distinguish between only two data states. An MLC program task uses two or more verify voltages to program a set of storage elements to two or more data states, while an SLC program task uses one verify voltage to program a set of storage elements to only one data state. A read operation can be made up of one or more read tasks, and a program operation can be made up of one or more program tasks. A task can involve a cache of the memory die so that data is transferred into the cache from the external controller, or out of the cache to the external controller, concurrently while the control circuitry is performing another task and the primary communication path has a ready status. A program or read with cache operation is efficient because multiple tasks are performed in parallel.
The suspend status can indicate whether a task is currently suspended by the control circuitry. This is a value which is latched within the memory chip.
The storage system 12 is discussed next in connection with the memory device 196, and the memory die 14 and 20 are discussed next in connection with the memory die 198 (
The memory array 105 is addressable by word lines via a row decoder 130 and by bit lines via a column decoder 160. The read/write circuits 165 include multiple sense blocks 100 and allow a page of storage elements to be read or programmed in parallel. Typically a external controller, also referred to as a control module, 150 is included in the same memory device 196 as the one or more memory die 198. Commands and Data are transferred between the host 155 and external controller 150 via lines 120 and between the external controller 150 and the one or more memory die 198, including the control circuitry 110, via a communication path 118 (including a bus 119).
The control circuitry 110 cooperates with the read/write circuits 165 to perform memory operations on the memory array 105. The control circuitry 110 includes a state machine 112, an on-chip address decoder 114, and a power control module 116. The state machine 112 provides chip-level control of memory operations. The on-chip address decoder 114 provides an address interface between that used by the host or a memory controller to the hardware address used by the decoders 130 and 160. The power control module 116 controls the power and voltages supplied to the word lines and bit lines during memory operations. In one approach, path 121 represents a path for voltage to be applied to word line, and path 123 represents a path in which read and program data is carried. Path 123 is analogous to path 17 or 19 in
In some implementations, some of the components can be combined. In various designs, one or more of the components (alone or in combination), other than storage element array 105, can be thought of as a managing or control circuit. For example, one or more managing or control circuits may include any one of or a combination of control circuitry 110, state machine 112, decoders 114/160, power control 116, sense blocks 100 (including the processor xxx in
In another embodiment, a non-volatile memory system uses dual row/column decoders and read/write circuits. Access to the memory array 105 by the various peripheral circuits is implemented in a symmetric fashion, on opposite sides of the array, so that the densities of access lines and circuitry on each side are reduced by half. Thus, the row decoder is split into two row decoders and the column decoder into two column decoders. Similarly, the read/write circuits are split into read/write circuits connecting to bit lines from the bottom and read/write circuits connecting to bit lines from the top of the array 105. In this way, the density of the read/write modules is reduced by one half.
Sense module 180 comprises sense circuitry 170 that performs sensing by determining whether a conduction current in a connected bit line is above or below a predetermined threshold level. Sense module 180 also includes a bit line latch 182 that is used to set a voltage condition on the connected bit line. For example, a predetermined state latched in bit line latch 182 will result in the connected bit line being pulled to a state designating program inhibit (e.g., 1.5-3 V). As an example, a flag=0 can inhibit programming, while flag=1 does not inhibit programming.
Managing circuit 190 comprises a processor 192, four example sets of data latches 194-197 and an I/O Interface 196 coupled between the set of data latches 194 and data bus 120. One set of data latches can be provide for each sense module, and data latches identified by XDL, DDL, ADL, BDL and CDL may be provided for each set. In some cases, additional data latches may be used. The use of data latches is discussed further, e.g., in connection with
Processor 192 performs computations, such as to determine the data stored in the sensed storage element and store the determined data in the set of data latches. Each set of data latches 194-197 is used to store data bits determined by processor 192 during a read operation, and to store data bits imported from the data bus 120 during a programming operation which represent write data meant to be programmed into the memory. I/O interface 196 provides an interface between data latches 194-197 and the data bus 120.
During reading, the operation of the system is under the control of state machine 112 that controls the supply of different control gate voltages to the addressed storage element. As it steps through the various predefined control gate voltages corresponding to the various memory states supported by the memory, the sense module 180 may trip at one of these voltages and a corresponding output will be provided from sense module 180 to processor 192 via bus 172. At that point, processor 192 determines the resultant memory state by consideration of the tripping event(s) of the sense module and the information about the applied control gate voltage from the state machine via input lines 193. It then computes a binary encoding for the memory state and stores the resultant data bits into data latches 194-197. In another embodiment of the managing circuit 190, bit line latch 182 serves double duty, both as a latch for latching the output of the sense module 180 and also as a bit line latch as described above.
Some implementations can include multiple processors 192. In one embodiment, each processor 192 will include an output line (not depicted) such that each of the output lines is wired-OR'd together. In some embodiments, the output lines are inverted prior to being connected to the wired-OR line. This configuration enables a quick determination during the program verification process of when the programming process has completed because the state machine receiving the wired-OR can determine when all bits being programmed have reached the desired level. For example, when each bit has reached its desired level, a logic zero for that bit will be sent to the wired-OR line (or a data one is inverted). When all bits output a data 0 (or a data one inverted), then the state machine knows to terminate the programming process. Because each processor communicates with eight sense modules, the state machine needs to read the wired-OR line eight times, or logic is added to processor 192 to accumulate the results of the associated bit lines such that the state machine need only read the wired-OR line one time. Similarly, by choosing the logic levels correctly, the global state machine can detect when the first bit changes its state and change the algorithms accordingly.
During program or verify operations, the data to be programmed (write data) is stored in the set of data latches 194-197 from the data bus 120. The programming operation, under the control of the state machine, comprises a series of programming voltage pulses applied to the control gates of the addressed storage elements. Each program pulse is followed by a read back (verify) to determine if the storage element has been programmed to the desired memory state. In some cases, processor 192 monitors the read back memory state relative to the desired memory state. When the two are in agreement, the processor 192 sets the bit line latch 182 to cause the bit line to be pulled to a state designating program inhibit. This inhibits the storage element coupled to the bit line from further programming even if program pulses appear on its control gate. In other embodiments the processor initially loads the bit line latch 182 and the sense circuitry sets it to an inhibit value during the verify process.
Each set of data latches 194-197 may be implemented as a stack of data latches for each sense module. In one embodiment, there are three data latches per sense module 180. In some implementations, the data latches are implemented as a shift register so that the parallel data stored therein is converted to serial data for data bus 120, and vice versa. All the data latches corresponding to the read/write block of M storage elements can be linked together to form a block shift register so that a block of data can be input or output by serial transfer. In particular, the bank of read/write modules is adapted so that each of its set of data latches will shift data in to or out of the data bus in sequence as if they are part of a shift register for the entire read/write block.
The data latches identify when an associated storage element has reached certain mileposts in a programming operations. For example, latches may identify that a storage element's Vth is below a particular verify level. The data latches indicate whether a storage element currently stores one or more bits from a page of data. For example, the ADL latch is flipped (e.g., from 0 to 1) when a lower page bit is stored in an associated storage element. The BDL latch is flipped when a middle page bit is stored in an associated storage element. The CDL latch is flipped when an upper page bit is stored in an associated storage element. A bit is stored in a storage element when the Vth exceeds an associated verify level.
The array of storage elements is divided into a large number of blocks 401, 402, . . . , 403 of storage elements. As is common for flash EEPROM systems, the block is the unit of erase. That is, each block contains the minimum number of storage elements that are erased together. Each block is typically divided into a number of pages. A page is the smallest unit of programming. One or more pages of data are typically stored in one row of storage elements. For example, a row typically contains several interleaved pages or it may constitute one page. All storage elements of a page will be read or programmed together. Moreover, a page can store user data from one or more sectors. A sector is a logical concept used by the host as a convenient unit of user data; it typically does not contain overhead data, which is confined to the controller. Overhead data may include an Error Correction Code (ECC) that has been calculated from the user data of the sector. A portion of the controller (described below) calculates the ECC when data is being programmed into the array, and also checks it when data is being read from the array. Alternatively, the ECCs and/or other overhead data are stored in different pages, or even different blocks, than the user data to which they pertain.
A sector of user data is typically 512 bytes, corresponding to the size of a sector in magnetic disk drives. Overhead data is typically an additional 16-20 bytes. A large number of pages form a block, anywhere from 8 pages, for example, up to 32, 64 or more pages. In some embodiments, a row of NAND strings comprises a block.
Additionally, sense circuits such as sense amplifiers can be connected to each bit line, or shared among bit lines. Examples include sense circuits 410, 412, . . . , 414, are each equivalent to the sense amplifier 180 in
Three read reference voltages, Vra, Vrb and Vrc, are also provided for reading data from storage elements. By testing whether the threshold voltage of a given storage element is above or below Vra, Vrb and Vrc, the system can determine the state, e.g., programming condition, the storage element is in.
Further, three verify reference voltages, Vva, Vvb and Vvc, are provided. When programming storage elements to the A-state, B-state or C-state, the system will test whether those storage elements have a threshold voltage greater than or equal to Vva, Vvb or Vvc, respectively.
In one embodiment, known as full sequence programming, storage elements can be programmed from the E-state directly to any of the programmed states A, B or C. For example, a population of storage elements to be programmed may first be erased so that all storage elements in the population are in the E-state. A series of program pulses such as depicted in
Another option is to use low and high verify levels for one or more data states. For example, VvaL and Vva are lower and higher verify levels, respectively, for the A-state, VvbL and Vvb are lower and higher verify levels, respectively, for the B-state, and VvcL and Vvc are lower and higher verify levels, respectively, for the C-state. In some case, VvcL is not used since reduced programming precision may be acceptable for the highest state. During programming, when the Vth of a storage element which is being programmed to the A-state as a target state exceeds VvaL, the programming speed of the storage element is slowed down, in a slow programming mode, such as by raising the associated bit line voltage to a level, e.g., 0.6-0.8 V, which is between a nominal program or non-inhibit level, e.g., 0 V and a full inhibit level, e.g., 4-6 V. This provides greater accuracy by avoiding large step increases in threshold voltage. When the Vth reaches Vva, the storage element is locked out from further programming. Similarly, when the Vth of a storage element which is being programmed to the B-state as a target state exceeds VvbL, the programming speed of the storage element is slowed down, and when the Vth reaches Vvb, the storage element is locked out from further programming. Optionally, when the Vth of a storage element which is being programmed to the C-state as a target state exceeds VvcL, the programming speed of the storage element is slowed down, and when the Vth reaches VvC, the storage element is locked out from further programming. This programming technique has been referred to as a quick pass write (QPW) or dual verify technique. Note that, in one approach, dual verify levels are not used for the highest state since some overshoot is typically acceptable for that state. Instead, the dual verify levels can be used for the programmed states, above the erased state, and below the highest state.
In the first programming pass, the lower page is programmed for a selected word line WLn. If the lower page is to remain data 1, then the storage element state remains at state E (distribution 500). If the data is to be programmed to 0, then the threshold voltage of the storage elements on WLn are raised such that the storage element is programmed to an intermediate (LM or lower middle) state (distribution 505).
In one embodiment, after a storage element is programmed from the E-state to the LM-state, as indicated by step “1” in
Although the programming examples depict four data states and two pages of data, the concepts taught can be applied to other implementations with more or fewer than four states and more or fewer than two pages. For example, memory devices with eight or sixteen states per storage element are currently planned or in production.
Moreover, in the example programming techniques discussed, the Vth of a storage element is raised gradually as it is programmed to a target data state. However, programming techniques can be used in which the Vth of a storage element is lowered gradually as it is programmed to a target data state. Programming techniques which measure storage element current can be used as well. The concepts herein can be adapted to the different programming techniques.
The upper page is programmed in
Programming using four bits per cell (16 levels) can similarly involve lower, lower-middle, upper-middle and upper pages.
A manual suspend command can include a command which is issued by the external controller, to allow the external controller to instruct the control circuitry to execute an alternative task. A manual resume command can be issued by the external controller, to allow the external controller to resume a task which it previously suspended using a manual suspend command or another command such as an illegal command. Control circuitry can automatically suspend a task when the external controller issues another task in a previous executing cache command (auto suspend with a legal command sequence), without receiving a manual suspend command or an illegal command from the control circuitry. Similarly, control circuitry can automatically resume a task when it finishes the previous task and is ready to resume a task, without receiving a manual resume command from the control circuitry. A manual suspend command typically results in a task which cannot be executed by an automatic suspend, such as a task to enter a low power mode or standby mode.
At step 610, the control circuitry executes a first task, e.g., in response to a previous command from the external controller or on its own initiative. An example of a task which is performed in response to a previous command from the external controller is a program, read, erase task, low power mode task or garbage collecting task.
In one implementation, at step 611, the external controller issues a manual suspend command. The manual suspend command can be issued even while the communication channel is busy. In another implementation, at step 612, the external controller can suspend a task without issuing a manual suspend command Instead, in one approach, the external controller issues an illegal command, which can include an illegal read command, such as a read command which specifies an illegal address to store data. An illegal address can be, e.g., an address in a memory array which does not exist or which is not available to store data.
At step 613, the control circuitry responds to the manual suspend command or the illegal command by suspending the first task and storing state data which identifies the current state of the task. The state data is accessed when the task is resumed to allow the task to resume from the point at which it was suspended. For example, the state data may identify an address in the memory array in which the task was being performed, where the address identifies a word line, page and/or block, for instance. In a program operation, the state data may identify a program pass number or mode (e.g., LM, foggy, fine), a program-verify iteration or loop number, a program pulse level (Vpgm), a pass voltage (Vpass) for unselected word lines, settings of a digital-to-analog converter for providing control gate read voltages for each of the programmed data states (during a read or verify operation), an identification of a channel boosting mode being used, an indication of whether A-G is complete and/or and an identifier of a word line from which programming should be resumed.
This data can be accessed to resume programming from the appropriate point. The states of latches can also be stored. The state data may be stored by the state machine 112 (
At step 614, in response to sensing the ready status, the external controller issues a second command to perform a second task. The external controller can constantly monitor the communication channel to determine when it transitions from busy to ready. At step 615, the external controller updates a record to indicate that the second task has been issued (see
In one alternative, at step 617, in response to the ready status, the external control checks the suspend status. If the suspend status is true, the external controller issues a manual resume command to resume the first task, at step 618. In one approach, the manual resume command need not identify which task was previously suspended. Instead, the control circuitry accesses the previously-stored state data to learn which task is to be resumed and the point at which it is to be resumed, and resumes the first task, at step 619. If the suspend status is false, the external controller issues another command at step 620.
In another alternative, at step 621, the external controller issues a command which causes the first task to be aborted. For example, see
The external controller can maintain a separate record of in-progress tasks for each of multiple memory chips. An in-progress task can include a task which has been issued by the external controller but not yet completed.
To better understand how a task is suspended, example tasks of program, read and erase are explained next.
For a simple implementation, the suspend point can be after the program pulse, e.g., at t3 even when the Msuspend command is issued sooner, such as at t2. The programming operation can resume at the start of the verify pulses of the program-verify iteration, in one approach. In the next program-verify iteration, the normal program pulse and verify pulses are applied.
Alternatively, even if the suspend command occurs at t2, the verify operation will not stop until it is completed, at t4. When the programming is resumed, the resuming point can start at t0 to re-do the verify portion of the program-verify iteration. That is, the programming operation can resume at the start of the verify pulses of the program-verify iteration, in one approach. In the next program-verify iteration, the normal program pulse and verify pulses are applied. The Voltage level of the program pulse will be continuing step up of the pre-suspend level.
Note that
Alternatively, the read operation will not stop until it is completed, at t4.
When the erase operation is resumed, a normal erase-verify iteration can be applied, or the suspended erase-verify iteration can be completed by applying a normal verify pulse.
The manual suspend is similar to the automatic suspend in that both suspend the current task, but their resume is more significantly different. For manual suspend, the external controller has total control over when to resume the task. The external controller can also issue multiple tasks without a resume. In the automatic suspend case, the resume will automatically happen after finishing one task without external controller interference. If the external controller wants to execute multiple tasks in the same level, it has to issue multiple commands to execute the tasks. The resume will happen when each task finishes in the automatic resume case. The resume will not happen when each task finishes in the manual resume case.
As an example, task2 can be a read task, task3 can be a task to shift out the read data to the external controller, and task 4 can be a task to enter a low power (reduced power consumption, or sleep) mode.
As an example, task2 can be a task to load in program data from the external controller, task3 can be a task to program the loaded data to the storage elements, and task 4 can be a task to enter a low power mode, e.g., a reduced power consumption or sleep mode.
Some general guidelines may be provided as follows. The storage elements may be arranged in multiple blocks, where the multiple blocks share a set of bit lines and a set of sense amplifiers (as indicated in
Further, an MLC program command (cmd) can be issued to abort a suspend signal and reset all MLC NAND internal parameters to default values.
One constraint which may be imposed is that, during a suspend state, power cannot be cut off. Instead, a low power mode current (Ice) can be used to maintain the data in the latches. Further, in the case of power loss during suspend, the system side (external controller) can manage the case.
Moreover, a manual suspend/resume can be performed using a prefix command, which does not include an address. An advantage is that this is a relatively short command which can be quickly sent and received.
Along the time lines, the time increments are not necessarily evenly spaced or to scale. Also, the time increments or markings are not necessarily comparable in the different figures.
In
In this example, between t0-t1, the suspend status is 0, indicating that no task is currently suspended at the control circuitry. ExternalBusyn represents the negative of a ready/busy status of the primary communication path, so that ExternalBusyn=1 denotes ready and ExternalBusyn=0 denotes busy. InternalBusyn represents the negative of a ready/busy status of an internal communication path between the control circuitry and the storage elements, so that InternalBusyn=1 denotes ready and InternalBusyn=0 denotes busy. From t0-t1, the external controller issues prog1 cmd to the control circuitry via the primary communication path. The program command is for the LM phase of programming and is followed by an address (+addr) in the memory array at which the data should be programmed, and the program data itself (+data). From t1-t1.1, the prog1 command is executed by the control circuitry. At t1.1, the external controller decides to issue MSuspend. However, the control circuitry does not transition to the suspend state (with suspend status=1) until t2. Generally, the control circuitry transitions to the suspend state at the earliest possible time (see
When the external controller detects that ExternalBusyn goes high at t2, it can check the status data to learn that the suspend status=true (1), and update its records accordingly. In particular, the external controller learns that the previous task that it issued (prog1) was suspended. The external controller at this time is free to issue a new command, read1 cmd, and an associated address for reading data from a memory array. Once the command is issued, ExternalBusyn goes low and the control circuitry executes the read task at t3-t4 which is defined by the command. After data is read, it is output by the control circuitry to the external controller via the primary communication path at t4-t4.1. The external controller can learn that the read operation has been completed by again checking the status data, so that the external controller is free to issue a new command at t4.1. Another read command, read2 cmd, is issued at this time with an associated address. Once the command is issued, ExternalBusyn goes low and the control circuitry executes the read task at t5-t6 which is defined by the command. After data is read, it is output by the control circuitry to the external controller via the primary communication path at t6-t6.1. At t6.1, the external controller is free to issue another command.
In this case, the external controller decides to resume the prog1 task. The external controller first checks the suspend status to confirm that the control circuitry is in a suspend status, then issues MResume from t6.147. In response, at t7, the control circuitry accesses the state data and resumes prog1 at the point it was suspended. In some cases, suspend status=0 even if the external controller issued MSuspend. This may occur, e.g., if the task which was to be suspend had already completed, so that the control circuitry did not suspend it, or the external controller issued a command which aborted the suspend state. Prog1 resumes from t7-t8. An example continuation of this scenario is discussed in connection with
The control circuitry executes the command by reading data at the specified address from t14-t15. At t15, sensing ExternalBusy going high, the external controller is free to issue a new command, which is a latch data command which identifies a set of latches (e.g., set “B”). The control circuitry executes the command as a latch task from t16-t18, by transferring the read data obtained from t14-t15 to the set of latches “B”. At t17, sensing ExternalBusy going high, the external controller is free to issue a new command, which is another read1 command with address, such as for a third page of data to be read. The control circuitry executes the command by reading data at the specified address from t18-t19. At t19, the data read at t18-t19 is output to the external controller. No transfer to a latch is performed for this read data. In total, three SLC pages of data may be read.
At t19.1, the external controller checks the suspend status to learn that it is false, so that no task is suspended. The external controller thus knows it can issue a new command without resuming a suspended task. At t19.1-t20, the external controller issues a prog2 command, along with an address to program data and the data to be programmed. After t20, the prog2 task is executed.
When the external controller detects that ExternalBusyn goes high at t2, it checks the status data to learn that the suspend status=true (1), and updates its records accordingly. In particular, the external controller learns that the previous task that it issued (prog3) was suspended. The external controller at this time is free to issue a new command, read2 cmd, with an associated address for reading data from a memory array. Once the command is issued, ExternalBusyn goes low and the control circuitry executes the read task at t3-t4. After data is read, it is output by the control circuitry to the external controller via the primary communication path at t4-t4.1. The external controller can learn that the read operation has been completed by again checking the status data, so that the external controller is free to issue a new command at t4.1. The prog1 cmd is issued at this time with an associated address. Once the command is issued, ExternalBusyn goes low and the control circuitry executes the program task starting at t5.
However, the prog1 cmd also causes the suspend status to transition to false, since the suspended program command (prog3) is aborted and prog1 is executed instead. The integrity of the data which was programmed by prog3 is not known. The system side (external controller) can manage the word line which was being programmed by prog3 using a hardware error (EPWR) sequence. Prog1 can include an instruction to reset programming-related state data so that any suspended program task is aborted.
If a suspend command is received by the control circuitry when a program command has already completed, the control circuitry can ignore the suspend command and keep the suspend status at false. The external controller should check the suspend status after issuing MSuspend and before using MResume, so that it can accurately update its record of in-progress tasks. In particular, the status check command can be issued after Muspend to check if the suspend state is true or false. Also, the status check command can be issued before MResume to ensure the suspend state is true before issuing MResume. If the suspend state is false, then MResume is not needed to perform another task.
Here, MSuspend is issued at t1.1 and we assume prog3 task has completed by the time ExternalBusyn goes high. This can occur when the prog3 task is close to completion when MSuspend is issued. The control circuitry can check it status data to learn that the prog3 task has been completed. In response to ExternalBusyn going high, the external controller checks the suspend status and learns that it is false. In response, the external controller can update its record to indicate that the prog3 task has completed. The external controller also issues a read2 cmd from t2-t3, which is executed by the control circuitry at t3-t4. The read data is output from t4-t4.1. At t4.1, the external controller is free to issue another command, which is prog1, and which is executed starting at t5. Prog1 can be issued without MResume.
In particular, the control circuitry starts an automatic suspend and resume mode by using a cache program command (t4.1-t5). If this automatic suspend is executed, the user/external controller has to make sure that the status is checked and prog3 is terminated. In an automatic suspend and resume mode, a SLC program command (prog4) can be executed from t7-t8 after which an LM phase of MLC program (prog1) will be automatically resumed, from t8-t9. Generally, in an automatic suspend and resume mode, tasks such as SLC program and read, MLC single page read, and data transfer can be executed. A status check command is issued after each MSuspend and MResume. However, there is no need to check the suspend status in the automatic suspend mode. It can be sufficient to check the program status. Moreover, to switch from manual suspend and resume mode to automatic suspend and resume mode, the MLC program should be completed. A new program command can be issued after the status check indicates that the program status is “completed.” Further, the data transfer command in automatic suspend mode can be used to store additional data in the extra data latches when the MLC program advances to certain levels. For example, in an eight-level memory device in which states Er (erased), A, B, C, D, E, F and G are used, when the MLC programming finishes the A, B, C and D states, there will be one data latch ADL available.
The user can store one page of data in the ADL latches for future use, such as for programming the page in SLC or MLC blocks. Moreover, when the MLC programming finishes the A, B, C, D and E states, there will be another data latch BDL available. The user can store two pages of data in the ADL and BDL latches for future use, such as programming the page in SLC or MLC blocks. Recall that the data latches can be shared by different blocks, so they can store data for use in programming or reading different blocks.
In particular, MSuspend is issued at t1.1 during prog3, although prog3 completes at t2. At t2, in response to ExternalBusyn going high, the external controller checks the suspend status and learns that it is false. The external controller can also check a status to learn that prog3 has completed and update its records. The external controller is free to issue a new command from t2-t3, read2 cmd, which is executed from t3-t4 and the read data is output from t4-t4.1. The external controller is free to issue a new command from t4.1-t5, prog1 cmd, which is executed from t6-t7. From t5-t6, the control circuitry automatically sets suspend status=true to transfer in program data, such as a first page of data, to a set of latches “A”. In response to ExternalBusyn going high at t6, the external controller provides a prog4 cmd from t6-t7. From t6-t7, the control circuitry performs the prog1 task using the transferred in program data. From t7-t8, the control circuitry automatically suspends the prog1 task and performs the prog4 task. At t8, prog1 is automatically resumed, the suspend status transitions to false, and ExternalBusyn goes high. In response, from t8-t9, the control circuitry loads in a lower page (LP) page of data from the external controller to be used in a foggy programming phase. At t9.1, the control circuitry automatically suspends prog1 and transfers data from the set of latches “A” to a set of latches used for programming the storage elements. The suspend status transitions to false at t10, at which time ExternalBusyn goes high. In response, from t10-t11, the control circuitry loads in a middle page (MP) page of data from the external controller to be used in the foggy programming phase. At t11, the control circuitry automatically sets suspend status=true to transfer in program data, such as a second page of data, to a set of latches “B”.
Here, the external controller chooses to issue multiple read commands, and this is done without using MResume. The read data is output immediately after being read, and no background MLC programming is performed during the data output.
The integrity of the data which was programmed by prog3 is not known. The system side (external controller) can manage the word line which was being programmed by prog3 using a hardware error (EPWR) sequence.
In one embodiment, a non-volatile storage system includes a memory die including control circuitry and storage elements, and an external controller, external to the memory die and in communication with the control circuitry via at least one communication path. The external controller: (a) maintains a record of multiple tasks for the control circuitry, (b) provides a suspend command to the control circuitry via the at least one communication path while the control circuitry has the busy status, a first task executes at the control circuitry when the suspend command is provided, (c) in response to detecting a ready status for the control circuitry: detects a suspend status of the control circuitry at a first time, updates the record based on the suspend status, and provides a second command to the control circuitry via the at least one communication path, and (d) subsequently, in response to again detecting the ready status for the control circuitry: detects the suspend status at a second time and if the suspend status at the second time is true, provides an additional command to the control circuitry via the at least one communication path.
In another embodiment, a method is provided for use at an external controller in communicating with control circuitry on a memory die, where the memory die includes storage elements. The method comprises: (a) maintaining a record of multiple tasks for the control circuitry, the control circuitry is in communication with the external controller via at least one a communication path, (b) providing a suspend command to the control circuitry via the at least one communication path while the control circuitry has a busy status, a first task executes at the control circuitry when the suspend command is provided, (c) in response to detecting a ready status on the at least one communication path: detecting a suspend status of the control circuitry at a first time, updating the record based on the suspend status, and providing a second command to the control circuitry via the at least one communication path, and (d) subsequently, in response to again detecting the ready status on the at least one communication path: detecting the suspend status at a second time and if the suspend status at the second time is true, providing an additional command to the control circuitry via the at least one communication path.
In another embodiment, a method is provided for use at control circuitry at a memory die, where the control circuitry is in communication with an external controller, and the memory die includes storage elements. The method comprises: (a) receiving a suspend command at the control circuitry, from the external controller, the control circuitry is in communication with the external controller via at least one a communication path, and the suspend command is received via the at least one communication path while the control circuitry has a busy status, (b) in response to the suspend command, suspending a first task which is executing, setting a suspend status to true, and providing a ready status on the at least one communication path, (c) in response to a status request from the external controller, providing the suspend status to the external controller, (c) subsequently receiving a second command at the control circuitry, from the external controller, via the at least one communication path, to perform a second task, (d) in response to the second command, starting the second task, providing a busy status on the at least one communication path and again providing the ready status on the at least one communication path, (e) in response to a further status request received from the external controller when the ready status is again provided for the at least one communication path, again providing the suspend status to the external controller, and (f) if the again-provided suspend status is true, receiving a resume command at the control circuitry, from the external controller, via the at least one communication path, to resume the first task.
The foregoing detailed description of the technology herein has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the technology to the precise form disclosed. Many modifications and variations are possible in light of the above teaching. The described embodiments were chosen to best explain the principles of the technology and its practical application to thereby enable others skilled in the art to best utilize the technology in various embodiments and with various modifications as are suited to the particular use contemplated. It is intended that the scope of the technology be defined by the claims appended hereto.