AUTOMATICALLY SKIP BAD BLOCK IN CONTINUOUS READ OR SEQUENTIAL CACHE READ OPERATION
20220392562 · 2022-12-08
Assignee
Inventors
Cpc classification
G11C2029/4402
PHYSICS
G11C29/18
PHYSICS
International classification
G11C29/00
PHYSICS
Abstract
The disclosed technology provides for automatically skipping bad block(s) in continuous read or sequential read operations in memory devices including NAND flash memory. Bad blocks can be skipped by analyzing block integrity during one at a time addressing of the blocks, or by skipping sets of consecutive bad blocks in a set of bad blocks using stored bad block information. Multiple sets of consecutive bad blocks can also be analyzed and skipped. A list of good blocks can be maintained, and only good blocks are used when performing a continuous cache read or sequential read operation. The list can be maintained in non-volatile memory enabling the device to load the block addresses upon power on startup. Additionally, a command to add additional blocks when received can implement adding new blocks to the list.
Claims
1. A memory device, comprising: a memory array; a data register operatively coupled to the memory array; a cache operatively coupled to the data register; an input/output interface operatively coupled to the cache; bad block circuits to identify bad blocks in the memory array; and a controller responsive to the commands and addresses received at the input/output interface, including logic circuits to control memory operations including i) an array read operation to output a stream of data segments from the memory array to the data register, and from the data register to the cache, and ii) a cache read operation decoupled from the array read operation to output data from the cache to the input/output interface; wherein the array read operation includes generating a sequence of segment addresses to access the stream of data segments from the array, and is responsive to the bad block circuits to skip bad blocks identified by the bad block circuits in the generation of the sequence of addresses.
2. The memory device of claim 1, further including logic circuits to control: checking a block in the array read operation, and whenever a result of the check indicates that the block in the array read operation is a bad block, incrementing an address to a next block; thereby skipping bad blocks one at a time.
3. The memory device of claim 1, further including logic circuits to control: comparing a block in the array read operation to bad block information for a first bad block of a set of consecutive bad blocks, and whenever a result of comparing indicates that the block in the array read operation is a first bad block of consecutive blocks, obtaining an address of a next good block; thereby skipping remaining bad blocks in the set of consecutive bad blocks.
4. The memory device of claim 3, wherein obtaining an address of a next good block includes: obtaining an address of a next good block from bad block list entries in a configuration settings data image.
5. The memory device of claim 4, further including logic circuits storing the configuration settings data image in the array.
6. The memory device of claim 5, wherein bad block circuitry implements one or more bad block registers that receive one or more entries denoting bad blocks.
7. The memory device of claim 1, further including logic circuits to control: analyzing bad block information during a power on operation and responsively adding any bad block information that results from the analyzing as new bad block list entries in a configuration settings data image.
8. The memory device of claim 1, further including logic circuits to control: responsive to an assign bad blocks command from a host, adding bad block information as a new bad block list entry in a configuration settings data image.
9. The memory device of claim 1, further including logic circuits to control: comparing a block in the array read operation to bad block information for a first bad block of a group of N consecutive blocks substantially contemporaneously; and whenever a result of comparing indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained; otherwise incrementing the group and comparing to a next group of N consecutive blocks.
10. The memory device of claim 9, wherein N is determined by 2.sup.m; wherein m is integer value.
11. The memory device of claim 1, further including logic circuits to control: checking a block in the array read operation is from a different block from a previous array read operation; and whenever a result of the check indicates that the block in the array read operation is from a different block, checking whether the block is a bad block.
12. The memory device of claim 1, wherein bad block information stored in non-volatile storage is read into bad block registers during power on.
13. The memory device of claim 1, wherein bad block registers store bad block information in one selected from a control logic circuitry and a row decoder.
14. A method of skipping bad blocks during a continuous read operation or a sequential read operation in a non-volatile memory, the method comprising: responsive to commands and addresses received at an input/output interface of the non-volatile memory, performing operations of: (i) an array read operation, comprising: a. outputting a stream of data segments from a memory array to a data register, and b. outputting a stream of data segments from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation, comprising: a. outputting data from the cache to the input/output interface; and wherein the array read operation further includes: generating a sequence of segment addresses to access the stream of data segments output from the memory array; and responsive to indications from bad block circuits, skipping bad blocks identified by the bad block circuits in the generation of the sequence of addresses.
15. The method of claim 14, further including: analyzing bad block information during a power on operation; and responsively adding any bad block information that results from the analyzing as new bad block list entries in a bad blocks list.
16. The method of claim 15, further including: receiving an assign bad blocks command from a host; and responsively adding bad block information as a new bad block list entry in a bad block list.
17. The method of claim 14, wherein skipping bad blocks identified by the bad block circuits further comprises: checking a block in the array read operation, and whenever a result of the check indicates that the block in the array read operation is a bad block, incrementing an address to a next block; thereby skipping bad blocks one at a time.
18. The method of claim 14, wherein skipping bad blocks identified by the bad block circuits further comprises: comparing a block in the array read operation to bad block information for a first bad block of a set of consecutive bad blocks, and whenever a result of comparing indicates that the block in the array read operation is a first bad block of consecutive blocks, obtaining an address of a next good block; thereby skipping remaining bad blocks in the set of consecutive bad blocks.
19. The method of claim 18, wherein obtaining an address further comprises: obtaining an address of a next good block from bad block list entries in a configuration settings data image.
20. The method of claim 14, wherein skipping bad blocks identified by the bad block circuits further comprises: comparing a block in the array read operation to bad block information for a first bad block of a group of N consecutive blocks substantially contemporaneously; and whenever a result of comparing indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained; otherwise incrementing the group and comparing to a next group of N consecutive blocks.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
DETAILED DESCRIPTION
[0037] A detailed description of embodiments of the presently disclosed technology is provided with reference to the
[0038] Storage arrays of modern memory systems, such as for example NAND Flash, are may contain bad blocks, i.e., one or more blocks of defective storage locations, and the obligation to handle bad blocks falls on the user. The typical way for the system to handle the bad block is “skip the bad blocks”. However, handling the bad blocks in a sequential cache read operation or a continuous read operation is especially problematic for the system because there is a need to change the block during the sequential or continuous operation.
[0039] In general, by way of overview and in implementations, a non-volatile memory device is provided the capability to skip bad blocks when performing a continuous cache read or sequential read operation. Devices skip bad blocks by employing techniques herein to analyze block integrity during one block at a time addressing of the blocks, or by skipping sets of consecutive bad blocks in a set of bad blocks using stored bad block information. Multiple sets of consecutive bad blocks can also be analyzed and skipped. A list of good blocks can be maintained, and only good blocks are used. The list can be maintained in non-volatile memory enabling the device to load the block addresses upon power on startup. Additionally, a command to add additional blocks when received can implement adding new blocks to the list.
[0040]
[0041] In various embodiments, the memory device can be implemented on a single integrated circuit chip, on a multichip module, or on a plurality of chips configured as suits a particular need. In yet other embodiments contemplated herein, the memory device may have other types of non-volatile memory cells, including programmable resistance memory cells, such as metal oxide memory cells, magneto-resistive memory cells or phase change-based memory cells, and so on. This diagram is merely an example, which should not unduly limit the scope of the claims herein. One of ordinary skill in the art would recognize other variations, modifications, and alternatives.
[0042] Control logic circuits 110 with a command decoder 108, on the integrated circuit memory device 100, includes logic, such as a state machine, responsive to received commands to execute continuous read operations, including one or more of the operations described herein with reference to
[0043] The memory array 160 can be a NAND flash memory in embodiments contemplated herein implemented using two-dimensional or three-dimensional array technology. The memory array 160 is arranged in an array including a plurality of blocks of memory cells. The blocks of memory cells include sets of memory cells that fall within a specified range of addresses in the memory array, and can be said to have block addresses. In some embodiments of flash memory, erase operations are executed on sectors in the memory array that can be partitioned electrically during the erase operation from other sectors. Blocks of memory cells can encompass a single sector, and thus may be referred to as an erase block. In other embodiments, blocks of memory cells implemented for the purposes of the present technology may include more than one sector, or other configurations of memory cells.
[0044] An input/output interface 118 is included in which addresses and data may be provided on shared lines in an address/data bus 114. Also, serial interfaces may be deployed.
[0045] A row decoder 140 is coupled to a plurality of word lines 145, arranged along rows in the memory array 160. Word line decoders are included in row decoder 140. A cache data control circuit/column decoder 170 is coupled to cache circuits 190 by a plurality of bit lines 116 to select the target data in the cache circuits 190 to output data read from or input data written to the memory array 160. Addresses are supplied on lines 130 from control logic circuits 110 implementing a command decoder 108 and controller modules, to cache data control circuit/column decoder 170 and to row decoder 140, which is coupled to memory array 160 by word lines 145.
[0046] Page buffer circuits 180 are coupled to a plurality of bit lines 175 arranged along columns in the memory array 160 for reading data from and writing data to the memory array 160. Page buffer circuits 180 are coupled by data lines 185 to the cache circuits 190, and can store pages of data. Bit lines 175 are coupled to the page buffer circuits 180, and to the memory array, and can comprise global bit lines (GBL) and local bit lines. Bit lines generally comprise conductors in higher patterned layers that can traverse a plurality of blocks or sectors of memory cells in an array, and connect to local bit lines in the blocks via select transistors. The local bit lines are connected to the memory cells for current flow to and from the bit lines, which in turn are connected to the bit lines 175 and data registers in page buffer circuits 180. In one implementation, the page buffer can be the same width as the memory array.
[0047] In a reading operation, data from the supplied from the array to the data registers in the page buffer circuits 180, and from the data registers via second data lines 185 to cache circuits 190, in this example, which are in turn coupled to input/output interface 118 via data path lines 116. Also, input data is applied in this example to the cache circuits 128 on lines 116 from the input/output interface 118, and to the page buffer circuits 180 on data lines 185, for use in support of program operations.
[0048] Input/output interface 118 provides communication paths for the data with destinations external to the memory device 100. Input/output data and control signals are moved via data lines 115 between the input/output interface 118 and the control logic circuits 110 on the memory device 100. In some embodiments, other data sources internal or external to the memory device 100, can be included such as a general-purpose processor or special purpose application circuitry, or a combination of modules providing system-on-a-chip functionality supported by the memory array 160.
[0049] In the example shown in
[0050] The control logic circuits 110 are coupled to the cache circuits 190 and the memory array 160 and other elements of the integrated circuit as needed.
[0051] The control logic circuits 110 can include modules implemented using special-purpose logic circuitry including state machines, as known in the art. In alternative embodiments, the control logic circuits 110 can include modules implemented using a general-purpose processor, which can be implemented on the same integrated circuit, which execute a computer program to control the operations of the memory device 100. In yet other embodiments, a combination of special-purpose logic circuitry and a general-purpose processor can be utilized for implementation of modules in control logic circuits 110.
[0052] The control logic circuits 110 implement a controller that is responsive to the commands and addresses received at the input/output interface, including logic circuits to control memory operations including i) an array read operation to output a stream of data segments from the memory array to the data register, and from the data register to the cache, and ii) a cache read operation decoupled from the array read operation to output data from the cache to the input/output interface. The cache read operation can be controlled by the host by issuing cache read commands and controlling the read clock, as data becomes available in the cache as resources in the host become available to receive the data, while the array read operation can execute autonomously under control of internal logic after it is initiated by a continuous or sequential read command. See, co-pending and commonly owned, U.S. patent application Ser. No. 17/061,451, entitled CONTINUOUS READ WITH MULTIPLE READ COMMANDS, filed 10 Jan. 2020, which is incorporated by reference as if fully set forth herein.
[0053] The autonomous array read operation includes generating a sequence of segment (e.g. page) addresses to access the stream of data segments from the array. The autonomous array read as described herein is responsive to the bad block register circuits 122 in the generation of the sequence of addresses to skip bad blocks identified by the bad block circuits in the generation of the sequence of addresses.
[0054] As described herein, control logic circuits 110 and/or block decoder 126 of row decoder 140 include field configurable bad block register circuits 122. The field configurable bad block register circuits 122 can include circuits or memory identifying a list 179 of bad blocks (e.g., block 1, block 2, block 3) in configuration blocks (e.g., 161) in the array 160. The field configurable bad block register circuits 122 can comprise circuit elements such as lookup tables, configuration registers, content addressable memory, comparators, and enable and disable circuits and the like. The field configurable bad block register circuits 122 can be configurable by writing data from the configuration blocks to the lookup tables, configuration registers or content addressable memory.
[0055] A bad block list 179 can be used to configure the bad block register circuits with the list or the mapping or both, by transferring the information to the circuits upon power on of the device 100 or receipt of an assign bad block function command by the device 100. Also, the bad block list 179 may be part of the bad block register circuits. The bad block list 179 can be stored in nonvolatile memory on the device, such as within a prespecified region of the flash memory array 160. In other embodiments, the bad block list 179 can be stored in a configuration register that can be written at least once located on other parts of the memory device 100. This configuration register can comprise flash memory cells, or other types of nonvolatile memory cells as suits a particular embodiment.
[0056] The field configurable bad block register circuits can respond to or read the bad block list 179 in response to a block register event. A block register event can be a reset event, such as may occur on a chip power-on initialization operation, receipt of a reset command, and receiving an assign bad block function command from the user to identify additional reserved blocks or additional bad blocks for inclusion into the list, or initiated by control logic circuits 110 upon completion of an operation in which a bad block is detected in order to write an identifier of a bad block, or other type of event, such as expiration of a timer, or a reset signal from a host. In some implementations the block register event can occur automatically in execution of an operation by the controller on the device, without user intervention. The information from the bad block list 179 can be applied to configure the circuitry to map continuous read or sequential cache read commands that skip over bad blocks to the next available good blocks identified by the information in the bad block list 179.
[0057] The flash memory array 160 can comprise floating gate memory cells or dielectric charge trapping memory cells configured to store multiple bits per cell, by the establishment of multiple program levels that correspond to amounts of charge stored, which in turn establish memory cell threshold voltages VT. The technology can be used with single-bit-per-cell flash memory, and with other multiple-bit-per-cell (multiple-level cells storing more than one bit per cell (e.g., MLC, TLC or XLC)) and single-bit-per-cell memory technologies (single-level cells (SLC)). In other examples, the memory cells may comprise programmable resistance memory cells, phase change memory cells, and other types of nonvolatile and volatile memory cell technologies.
[0058] In the illustrated example, the host 102 is coupled to the data and address lines 114 on the memory device 100, as well as other control terminals not shown, such as chip select terminals and so on, and can provide commands or instructions to the memory device 100 in the field. In some examples, the host 102 can be coupled to the memory device using a serial bus technology, using shared address and data lines. The host 102 can comprise a general-purpose processor, a special purpose processor, a processor configured as a memory controller, or other processor that uses the memory device 100. All or part of the host 102 can be implemented on the same integrated circuit as the memory.
[0059] The host 102 can include a file system or file systems that store, retrieve, and update data stored in the memory based on requests from an application program or multiple application programs. In general, the host 102 can also include programs that perform memory management functions and other functions that can produce status information for data stored in the memory, including information marking data invalid as a result of such functions. Such functions can include, for example, wear leveling, bad block recovery, power loss recovery, garbage collection, error correction, and so on. Also, the host 102 can include application programs, file systems, flash translation layer programs and other components that can produce status information for data stored in the memory, including information marking data invalid as a result of such functions.
[0060] For the purposes of this description, the circuitry is “configurable in the field” or “responsive to commands in the field,” because it is designed to be configured after manufacture by logic on the chip, or by a customer or user. Examples of configuration in the field include writing bad block data to the bad block information table in response detection of bad blocks by error detection logic, writing data to the bad block information table in response to user commands originating in a host system identifying bad blocks, writing data in response to user commands originating in a host system identifying reserved blocks to a bad block list 179, and resetting and re-creating bad block lists in the control logic 110.
[0061] Having described an example architecture for implementing automatically skipping bad block(s) in continuous read or sequential read operations in a storage memory, next examples of update/change bad block information and skipping block operations conducted upon continuous read or sequential read operations, using the configuration logic mechanisms like that of
Process for Assigning Blocks to a Bad Block List
[0062] Now with reference to flowchart 200 of
[0063] In an action 202, the block is assigned to the bad block list. In implementations, blocks can be assigned by a vender of the memory device 100 that builds the bad block list. Initial bad block list can be built before shipment of the device. Additional blocks may be added to the bad block list in the event of failure of a write (program or erase) operation during test for example. In some implementations, the device 100 provides an assign bad block function for the user to assign blocks to the bad block list. In some implementations, both vendor and user can assign blocks to the bad block list (e.g. Initial bad block list before shipment by vendor) and additional blocks assigned by the user (e.g. Running bad blocks list during operation).
[0064] In an action 204, the bad block list information is written to the configuration block 179 in memory array 160 of device 100.
[0065] In an action 206, the bad block information is downloaded from the configuration block 179 to the bad block register circuits 122. After a write operation the host can confirm that the bad block information is successfully written to the configuration block.
[0066] Other implementations of the method described in this section can include a non-transitory computer readable storage medium storing instructions executable by a processor to perform any of the methods described above. Yet another implementation of the method described in this section can include a system including memory and one or more processors operable to execute instructions, stored in the memory, to perform any of the methods described above.
Process for Skipping Bad Blocks Automatically
[0067] Now with reference to flowchart 300A of
[0068] In
[0069] In an action 304, a row address is incremented. This prepares the device 100 to read the next Sequential page, Y+1 from memory array 160 into Page buffer circuits 180 in a subsequent page read.
[0070] In an action 306, the device 100 checks to see if a block boundary is crossed. There are many different kinds of design implementations for determining whether a block boundary is crossed. For example, by comparing the block address to a previous address to see if the block is different. Another way, with reference to an address definition 300B shown in
[0071] In actions 308 and 310, that together implement a mechanism for stepping through blocks searching for the next good block, the new block is checked whether the new block is a bad block by checking the address of the new block against the bad block list 179. If the new block is a bad block, then in action 310, the block address is incremented, and control passes again to action 310 to check whether the next new block is a bad block. Actions 308 and 310 thus increment through bad blocks in the bad block list 179 until a good next block (B+N) is found. Then control passes to action 312. With reference to
[0072] In action 312 the read operation proceeds to reading data from the next good block B+N. In a first example, in which blocks are skipped in processing a read from cache command in a state 424 of
[0082] A first command C1 is received at the beginning at level 0-1 providing the beginning address of page Y. Proceeding diagonally down to level 4-2 as indicated by the elements within interval 400B for page Y, the data of page Y is loaded into the page buffer at level 1 (422). From the page buffer, a first half of the page is loaded into buffer BUF_A at level 2-1. Also, at a later time (or simultaneously) a second half of the page is loaded into buffer BUF_B at level 2-2. At level 3-1, while the first half of page Y is in buffer BUF_A, ECC circuitry is exercised over the ECC chunk or chunks in the first half of the page. Later, at level 3-2, while the second half of page Y is in buffer BUF_B, the ECC is exercised over the ECC chunk or chunks in the second half of the page. Finally, at level 4-1, the first half of page Y is provided to the I/O interface to be provided as output when the cache read command C2 is received at level 0-2. At level 4-2, the second half of page is provided to the I/O interface continuous with the first half. As described herein, actions 302-310 can skip any bad blocks during the intra-stream command C2 processing (state 424 of
[0083] In a second example, in which blocks are skipped in processing a read from cache command in a state 422 of
[0094] The end of sequence command is not illustrated in
[0095] In
[0096] Subsequently, at level 3-1, the data from buffer 2_BUF_A is transferred to buffer 3 BUF_A in the second buffer level. Thereafter, or simultaneously, at level 3-2, the data from buffer 2_BUF_B is transferred to buffer 3 BUF_B in the third buffer level.
[0097] In level 4-1, the ECC circuitry operates on the ECC chunks of page Yin buffer 3 BUF_A. At level 4-2, the ECC circuitry operates on the ECC chunks of page Y in buffer 3 BUF_B.
[0098] Thereafter at level 5-1, the data of page Yin buffer 3 BUF_A is available at the interface.
[0099] At level 5-2, the data of page Y in buffer 3 BUF_B is available at the interface.
[0100] After the first continuous read command C1 in interval 400C, a second continuous read command C2 is received in interval 411 after tR, while the data of page Y is output (level 5-1) at the interface aligned with C2.
[0101] As illustrated in
[0102] With renewed reference to
[0103] Other implementations of the method described in this section can include a non-transitory computer readable storage medium storing instructions executable by a processor to perform any of the methods described above. Yet another implementation of the method described in this section can include a system including memory and one or more processors operable to execute instructions, stored in the memory, to perform any of the methods described above.
[0104] Noteworthy is that in certain implementations, read performance of a memory chip may be degraded in instances where there are many consecutive bad blocks in the array. This can arise because the memory chip will take extra time to locate the next good block if there are too many consecutive bad blocks. Next we turn to another implementation that addresses this issue with reference to
Consecutive Bad Blocks
[0105] Sometimes bad blocks that are consecutive can occur. Next we describe implementations of our technology address this scenario, in which the chip first checks whether a new block is the first bad block in a set of consecutive bad blocks and continues to the next good block if the new block is the first bad block in the set of consecutive bad blocks. Now with reference to flowchart 500A of
[0106] In
[0107] In an action 504, a row address is incremented. This prepares the device 100 to read the next Sequential page, Y+1 from memory array 160 into Page buffer circuits 180 in a subsequent page read.
[0108] In an action 506, the device 100 checks to see if a block boundary is crossed. There are many different kinds of design implementations for determining whether a block boundary is crossed. For example, by comparing the block address to a previous address to see if the block is different. Another way, with reference to an address definition 300B shown in
[0109] In action 508 device 100 determines based upon stored consecutive bad block information 620A of
[0110] In an action 510, the next block address is set to the next good block address 624 of the consecutive bad block information 620A. The read flow then passes to action 512, in which the device 100 will go to the next good block if it is the first bad block in the consecutive bad blocks.
[0111] With renewed reference to
[0112] In an action 512, the read operation proceeds to reading data from the next good block B+N in a manner analogous to the actions described above with reference to
[0113] In an alternative method, the number of registers needed to store bad block information can be reduced. Now with reference to flowchart 500B of
[0114] In
Creating Consecutive Bad Block Information
[0115] Consecutive bad blocks information 620A, 620B can be created in one or more ways in various memory device implementations. In one implementation, consecutive bad blocks information is derived from analysis of the bad block information by the memory chip during the power on operation and the assign bad block operation. Alternatively, and with reference to
[0116] Other implementations of the method described in this section can include a non-transitory computer readable storage medium storing instructions executable by a processor to perform any of the methods described above. Yet another implementation of the method described in this section can include a system including memory and one or more processors operable to execute instructions, stored in the memory, to perform any of the methods described above.
[0117] Having looked at a memory device that implements skipping consecutive blocks, we next turn to another chip implementation that embodies technology to perform multiple consecutive bad blocks detection, thereby reducing block detection time and enabling implementations to provide improved read performance with reference to
Multiple Consecutive Bad Blocks
[0118] In another embodiment, the chip first checks whether a new block is the first bad block in N sets of consecutive bad blocks contemporaneously. The typical N consecutive blocks case is that 2.sup.m blocks. The higher blocks address is the same and lower m block address are different for 2.sup.m blocks. Implementation specifics determine appropriate values of N or m, essentially a design point. It is a tradeoff between the die size and the performance; a larger m will take more die size for simultaneous bad block checks, so in a presently preferred implementation m≤3 is employed. In some implementations, a block repair scheme can be used to avoid too many consecutive bad blocks as needed or desired. The following example with reference to
[0119] Now with reference to flowchart 800 of
[0120] In
[0121] In an action 804, a row address is incremented. This prepares the device 100 to read the next Sequential page, Y+1 from memory 160 into Page buffer 180 in a subsequent page read.
[0122] In an action 806, the device 100 checks to see if a block boundary is crossed. There are many different kinds of design implementations for determining whether a block boundary is crossed. For example, by comparing the block address to a previous address to see if the block is different. Another way, with reference to an address definition 300B shown in
[0123] Now with reference to
[0124] In
[0125] In action 824, checking starts by setting Starting block BA[2:0]=BA[2:0] of the new block.
[0126] In action 826, all bad blocks with the same group block address BA[11:3] are checked.
[0127] In action 828, control logic determines whether any good blocks>=Starting block BA[2:0]? If the answer is no, then control flows to action 830 to reset and pick the next group. Otherwise, control flows to action 832.
[0128] In action 830, the next group of blocks is checked, by setting Starting block BA[2:0]=000b, incrementing the group block address BA[11:3], and passing control back to action 826 to again check for all bad blocks with the same (next) group block address BA[11:3].
[0129] In action 832, the next good block address is found to be BA[11:3] and the next good block is found to be BA[2:0].
[0130] With renewed reference to
[0131] In an action 812, the read operation proceeds to reading data from the next good block B+N in a manner analogous to the actions described above with reference to
[0132] Other implementations of the method described in this section can include a non-transitory computer readable storage medium storing instructions executable by a processor to perform any of the methods described above. Yet another implementation of the method described in this section can include a system including memory and one or more processors operable to execute instructions, stored in the memory, to perform any of the methods described above.
[0133] Any data structures and code described or referenced above are stored according to many implementations on a computer-readable storage medium, which may be any device or medium that can store code and/or data for use by a computer system. This includes, but is not limited to, volatile memory, non-volatile memory, application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), magnetic and optical storage devices such as disk drives, magnetic tape, CDs (compact discs), DVDs (digital versatile discs or digital video discs), or other media capable of storing computer-readable media now known or later developed.
[0134] A byte is a basic storage unit used in many integrated circuit logic and memory circuits, and comprises of eight bits. Basic storage unit can have other sizes, including for example one bit, two bits, four bits, 16 bits and so on. Thus, the description of a memory device set out above, and in other examples described herein utilizing the term byte, applies generally to circuits using different sizes of storage units, as would be described by replacing the term byte or set of bytes, with storage unit or set of storage units. Also, in some embodiments different sizes of storage units can be used in a single command sequence, such as one or more four bit storage units combined with eight bit storage units.
Particular Implementations
[0135] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache, are described herein.
[0136] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation.
[0137] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation, thereby enabling skipping of blocks indicated as bad.
[0138] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation, thereby enabling skipping of blocks indicated as bad during a read from cache operation.
[0139] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation by the logic circuitry checking a block in the array read operation, and whenever a result of the check indicates that the block in the array read operation is a bad block, an address is incremented to a next block, thereby enabling skipping of blocks indicated as bad during a read from cache operation.
[0140] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation by logic circuitry comparing a block in the array read operation to bad block information for a first bad block of a set of consecutive bad blocks, and whenever a result of the compare indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained, thereby enabling skipping of blocks indicated as bad during a read from cache operation.
[0141] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation by logic circuitry comparing a block in the array read operation to bad block information for a first bad block of a set of consecutive bad blocks, and whenever a result of the compare indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained, thereby enabling skipping of blocks indicated as bad during a read from cache operation, and the logic circuitry further implements analyzing bad block information during a power on operation and responsively adding any bad block information that results from the analyzing as new bad block list entries in a configuration settings data image.
[0142] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation by logic circuitry comparing a block in the array read operation to bad block information for a first bad block of a set of consecutive bad blocks, and whenever a result of the compare indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained, thereby enabling skipping of blocks indicated as bad during a read from cache operation, and logic circuitry further implements receiving an assign bad blocks command from a host and responsively adding bad block information as a new bad block list entry in a configuration settings data image.
[0143] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation, the logic circuitry compares a block in the array read operation to bad block information for a first bad block of a group of N consecutive blocks substantially contemporaneously, and whenever a result of the compare indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained; otherwise incrementing the group and comparing to a next group of N consecutive blocks, thereby enabling skipping of blocks indicated as bad during a read from cache operation.
[0144] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation, the logic circuitry compares a block in the array read operation to bad block information for a first bad block of a group of N consecutive blocks substantially contemporaneously, and whenever a result of the compare indicates that the block in the array read operation is a first bad block of consecutive blocks, an address of a next good block is obtained; otherwise incrementing the group and comparing to a next group of N consecutive blocks, wherein N is determined by 2.sup.m; wherein m is an integer such as 1, 2, 3, and so on, thereby enabling skipping of blocks indicated as bad during a read from cache operation.
[0145] A device having a controller logic circuitry, and a method responsive to (i) an array read operation to output a stream of data segments from the memory array to a data register, and from the data register to a cache, and (ii) a cache read operation decoupled from the array read operation to output data from the cache are described, including responsively examining integrity of blocks in a set of blocks read in the array read operation, the logic circuitry checks a block in the array read operation is from a different block from a previous array read operation, and whenever a result of the check indicates that the block in the array read operation is from a different block, the logic circuitry checks whether the block is a bad block, thereby enabling skipping of blocks indicated as bad during a read from cache operation.
[0146] A number of flowcharts illustrating logic executed by a memory controller or by memory device are described herein. The logic can be implemented using processors programmed using computer programs stored in memory accessible to the computer systems and executable by the processors, by dedicated logic hardware, including field programmable integrated circuits, and by combinations of dedicated logic hardware and computer programs. With all flowcharts herein, it will be appreciated that many of the steps can be combined, performed in parallel or performed in a different sequence without affecting the functions achieved. In some cases, as the reader will appreciate, a re-arrangement of steps will achieve the same results only if certain other changes are made as well. In other cases, as the reader will appreciate, a re-arrangement of steps will achieve the same results only if certain conditions are satisfied. Furthermore, it will be appreciated that the flow charts herein show only steps that are pertinent to an understanding of the invention, and it will be understood that numerous additional steps for accomplishing other functions can be performed before, after and between those shown.
[0147] While the present invention is disclosed by reference to the preferred embodiments and examples detailed above, it is to be understood that these examples are intended in an illustrative rather than in a limiting sense. It is contemplated that modifications and combinations will readily occur to those skilled in the art, which modifications and combinations will be within the spirit of the invention and the scope of the following claims.