Methods and systems involve training datasets used to determine one or more reference voltages for reading data stored in a memory unit. According to some embodiments, a method of accessing a memory device having multiple memory units includes storing a training dataset comprising at least one of a known data pattern and a codeword capable of being decoded in a training dataset field of each memory unit of a memory device. One or more reference voltages are determined using the training dataset field of the memory unit. After the reference voltages have been determined using the training dataset, these reference voltages are used to read other fields of the memory unit.
According to some aspects, the training dataset is a known data pattern and the training dataset field is a predetermined location within the memory unit. According to some aspects, the training dataset is the codeword capable of being decoded and the training dataset field is a location of the codeword in the memory unit, i.e., wherever the codeword is located in the memory unit.
Determining the reference voltages can occur in response to a failure of the memory unit to be decoded. In some cases, the training dataset is stored in the memory unit only after the memory unit has experienced a predetermined number of program/erase cycles. For example, the training dataset may be stored in response to at least one of age and disturb mechanisms affecting the memory unit. The age and/or disturb effects can include number of program erase cycles, likelihood of charge disturb effects, page number, page type, and/or retention time, among other factors. In some cases, the code rate of the codeword that is capable of being decoded is a function of a likelihood that data stored in the memory unit will have errors.
Determining the reference voltages may comprise reading multiple codewords stored in a memory unit and identifying the codeword that is capable of being decoded. The successfully decoded codeword is used as the training dataset for the memory unit.
According to some embodiments, a method of accessing a memory device having multiple memory units includes storing codewords in a memory unit of a memory device. The codewords include at least one codeword that has a code rate dependent on a number of program/erase cycles experienced by the memory unit. At least one of the codewords is successfully decoded. The successfully decoded codeword is used to determine one or more reference voltages. After the reference voltages are determined using the successfully decoded codeword, the reference voltages are used to decode other codewords stored in the memory unit.
Some embodiments involve a memory controller. The memory controller includes a training dataset module configured to determine one or more reference voltages using a training dataset stored in a training dataset field of a memory unit. The training dataset includes at least one of a known data pattern and a codeword capable of being decoded. The memory controller also includes a read/write channel control module configured to use the one or more reference voltages determined by the training dataset module to read other fields of the memory unit. According to some implementations, the memory unit comprises multilevel charge-based memory cells.
These and other features and aspects of the various embodiments disclosed herein can be understood in view of the following detailed discussion and the accompanying drawings.
Some memory devices that are based on the storage of charge experience charge disturbances and, as a result, shifted reference voltages may be needed for reading the memory device. Attempting to read part of a memory device with an incorrect reference voltage may result in read errors that prevent the decoding of the data. It can be useful to accurately determine read voltages especially during an error recovery mode. In some cases, a training dataset can be stored in a portion of a memory unit of a memory device. The training dataset can be used to determine one or more reference voltages for other portions of the memory unit. Some embodiments disclosed herein describe using a known data pattern as a training dataset. Some embodiments described herein involve attempting to decode one or more codewords stored in a memory unit and using a successfully decoded codeword as the training dataset.
In some implementations determination of the reference voltages is only initiated after an attempt to read the memory unit fails, as illustrated in
The block diagram of
The memory controller 220 may include a read/write channel control unit 235. In some cases, the read/write channel control unit 235 includes an encoder 237 and/or a decoder unit 236. The encoder 237 may encode any data to be stored in the memory device 270 using an error correcting code (ECC). ECC is used to detect and/or correct data errors present in the data when the data is read from the memory device 210. The encoder 237 encodes the incoming data from the host using the ECC into codewords which are made up of the data bits and parity bits (redundant data). The code rate of a codeword is related to the number of parity bits of the codeword. A lower code rate can be achieved by adding more parity bits to a codeword. However, adding more parity bits results in format loss, i.e., loss of available memory in which other, non-parity information, can be stored in the memory device. Codewords with lower code rates are more likely to be able to correct errors because more redundant bits are used.
The encoded data can be stored to the memory device 270 via the memory device interface 230 and the one or more channels 260. When data is to be read from memory, the encoded data is read from the memory device 270 and is decoded using the decoder unit 236. The encoded data is decoded using the ECC and is transferred to the host 210 using the host interface 225. The encoder 237 and decoder 236 units use the ECC to attempt to correct errors that are present in the data read from the memory device 270. The data errors may arise, for example, due to noise during the read and/or write operations and/or due to data corruption caused by charge leakage and/or charge disturb effects that arise from accessing neighboring memory cells as discussed herein.
The system diagram of
In some cases, it is useful to initiate storage of the training dataset based on the likelihood that the memory unit will experience errors. For example, the memory unit may be more vulnerable to errors as it ages, so the training dataset module can be configured to store the training dataset (known data pattern) only after a predetermined number of program/erase cycles have occurred. In some cases, the training dataset module may select the code rate of at least one of the codewords stored in a memory unit based on the likelihood that the memory unit will experience errors.
In some implementations, the memory cells of charge-based memory devices are capable of storing one or more bits, each combination of bits corresponding to a particular analog voltage level.
For purposes of illustration,
However, due to charge leakage or other effects, charge stored in the memory cell can change, causing the voltage of the memory cell to decrease to voltage V012. If the memory cell is read after the charge leakage, comparison of the analog voltage V012 to the nominal reference voltage, THCRef1 leads to erroneous identification of the digital symbol stored in the memory cell as 00 rather than 01. This erroneous value is transferred from the memory to the memory controller, where the decoder circuitry attempts to decode the data. The data may include too many errors and may not be successfully decoded.
In the scenario described in connection with
Determining the reference voltages may involve calculating the amount of voltage shift from the nominal reference voltage based on configuration and use factors of the memory cells of a memory unit. The configuration and use factors may include the physical and material configuration of the memory cells of a memory unit, e.g., dimensions, thickness, and doping, etc., the charge currently stored on the memory cells (also expressed as the voltage of the memory cell), the history of program/erase cycles experienced by the memory unit, the type of data page, e.g., MSB page or LSB page, the page number, the history of data errors of the memory unit, the history of read, write, and erase operations performed on other memory units that can potentially affect the charge stored on the cells of the memory unit, the length of time that data has been stored in the memory unit, the temperature of the memory unit at the time of the program operation, the temperature of the memory unit at the time of the read operation, and/or other configuration and use factors. In some implementations, the reference voltage control circuitry in the training dataset module may calculate the voltage shift as a function of only one of these configuration and use factors, e.g., data retention time. In some implementations, the reference voltage control circuitry may calculate the voltage shift as a function of multiple configuration and use factors.
The configuration and use factors may operate interdependently. For example, the rate of charge leakage from a memory cell may increase with the number of program/erase cycles experienced by the memory cell. Analog voltages representing certain data symbols may make the memory cell more susceptible to charge loss or charge gain than other analog voltages that represent other data symbols.
The shift in the voltage of a memory cell, ΔP, due to use factors U1, U2, U3, . . . UJ may be determined using the charge loss/gain model of the memory cell, expressed as f(U1, U2, U3, . . . UJ), where U1, U2, U3 . . . UJ are use factors such as those listed above. The amount of change of the voltage stored in a memory cell due to each use factor U1, U2, U3, . . . UJ may be estimated based on an a priori characterization of a population of similar memory units before the memory unit is in use, or may be estimated based on an a posteriori characterization of the memory unit (or other similar memory units of the same memory device) during the time that the memory unit is in use. For example, when a priori population data is used, then the shifted reference voltage may be calculated:
VRefshifted=VRefnominal+ΔP
where ΔP is the expected voltage shift determined using the charge/loss gain model f(U1, U2, U3, . . . UJ) of the memory cell derived from population data.
In some implementations, some or all of the memory units of a memory device may be characterized to model the charge loss/charge gain behavior a posteriori, i.e., during the time that the memory device is in use. For example, characterization of the memory units may be performed during an appropriate time, such as during garbage collection. The shifted reference voltages may then be calculated based on the characterization of the memory cells. Characterization of the memory units may occur numerous times over the life of the memory device, allowing rates of change in charge loss or gain behavior for each use factor or multiple use factors to be calculated. These calculated rates of change can be used to extrapolate the expected changes from the use factors.
For example, when a posteriori memory cell characterization data is used, then the shifted reference voltage may be calculated:
VRefshifted=VRefnominal+ΔC,
where ΔC is the expected voltage shift determined using the charge loss/gain model, f(U1, U2, U3, . . . UJ) of the memory cell derived from one or more characterization of the memory cell or memory cell array. In some implementations, the charge loss/gain model of the memory unit may be derived using a priori population data for use some factors and a posteriori characterization of the memory unit for other use factors. In some implementations, the charge loss/gain model may be adaptive. For example, a priori population data may initially be used to generate the charge loss/charge gain model, but as characterization data for the memory unit is acquired, the charge loss/charge gain model may increasingly rely on the information acquired from the a posteriori characterization.
After the training dataset is read from the memory, it is decoded which generates errors. Since the data of the training dataset is known, information about the shifts needed in the reference voltages can be discerned.
In some cases, the known data pattern is not stored in the memory unit until a parameter associated with the memory unit is beyond a threshold. For example, the training dataset field may be used for the memory unit after the memory unit has experienced a predetermined number of program/erase (P/E) cycles. In this case, format loss at the beginning of life, when failure of the memory unit is rare, is prevented. The training dataset field may be field in the header of the memory unit or the training dataset field may be located elsewhere in the memory unit.
As previously mentioned, in some cases, the training dataset may comprise a decoded ECC codeword. Data to be stored in a memory unit of a memory device is encoded into one or more ECC codewords. For example, the data stored in a memory unit may be encoded into eight codewords. In some cases the codewords have a similar or equal code rate. In some cases, one or more of the codewords stored in a memory unit have a lower code rate than other codewords stored in the memory unit. This difference in code rate may help to ensure that at least one of the codewords is able to be decoded. A codeword that is successfully decoded may be used to determine the one or more reference voltages that are used to read other codewords stored in the memory unit.
As described previously, in some cases, one or more of the codewords stored in the memory unit may have a lower code rate than other codewords stored in the memory unit. The codeword size can be the same or can be different.
Charge based memory cells in general are more vulnerable to charge disturbances as they age. Thus, for a younger memory unit, a higher code rate codeword can be successfully decoded, whereas an older memory unit would require a lower code rate codeword. When the memory unit is new, it is useful to use a higher code rate because the redundancy is not needed and additional data can be stored instead of parity bits. However, as the memory unit ages, it becomes useful to store more parity bits so that it is more likely a codeword can be decoded and used to determine reference voltages for the other codewords of the memory unit.
In some implementations, it is useful to adjust the code rate of at least one of the codewords stored in the memory unit based on the likelihood that the memory unit will experience charge disturbances. As discussed above, factors that may increase the likelihood of errors can include, program erase cycles, charge disturb effects, page number of the memory unit (address location within a block of pages), and retention time. Charge disturbances are more likely as the memory unit ages, for example, so the code rate may be varied based on number of P/E cycles. As another example, charge disturbances of certain pages, e.g., higher number pages in a block, may be more vulnerable to charge disturbances. Thus, the code rate of at least one of the codewords in a page may be selected based on the page number of the memory unit. As yet another example, the code rate of at least one of the codewords may be selected based on the bit error rate (BER) previously experienced by the memory unit. In some implementations, only one or only some (e.g., less than 8, 16, 24) of the codewords stored in the memory unit have the lower code rate so that these codewords are more likely to be decoded and used to determine reference voltages for the other, higher code rate codewords in the memory unit.
It is to be understood that this detailed description is illustrative only, and various additions and/or modifications may be made to these embodiments, especially in matters of structure and arrangements of parts. Accordingly, the scope of the present disclosure should not be limited by the particular embodiments described above, but should be defined by the claims set forth below and equivalents thereof.