Self-test and correction of loss of charge errors in a flash memory, erasable and programmable by sectors thereof

Abstract: A method of self-test and correction of errors due to a loss charge for a flash memory constituted by an array or matrix of cells (bits), organized in rows and columns, erasable and programmable by whole sectors in which the matrix is divided, implemented by realizing at least an additional row and at least an additional column of cells for each memory sector; storing parity codes is the additional row and column, and carrying out periodically a self-test routine and eventual correction routine composed of the following steps: repeating the sequential reading per bytes and parity check; verifying the consistency of the parity value with the value stored in the respective parity bit; if the verification is negative, retaining the current row address and proceeding to sequentially verify column parity starting from the first column until identifying the column for which the verification yields a negative result, and if the failed bit so individuated is "1" reprogramming it to "0".

Description: FIELD OF APPLICATION The present invention relates to flash eprom or more simply to flash memories and more in particular to flash memories erasable and reprogrammable by sectors. BACKGROUND OF THE INVENTION There is an incessant evolution towards flash memories devices with higher and higher memory capacities, reached by of reducing the size of memory cells. As known to any practitioner, the limitations in scaling down integrated devices, besides being due to technological limitations of the fabrication processes, may also be determined by augmented criticalities that negatively affect reliability of the produced devices and therefore the yield of the fabrication process. Usually, fabricated devices are tested in relation to known critical mechanisms which are accentuated by the scaling down process, by subjecting the devices to specially designed testing cycles. During these testing cycles one of the factors for enhancing critical aspects is the temperature, whose increment generally tends to worsen or accelerate the failure mechanisms of those devices that contain elements or cells operating at the limit of their reliability. It has been recently discovered a new failure mechanism of flash memories which apparently is induced exclusively by cyclings, that is by the number of erasing and programming cycles to which the memory device is subjected, and which manifests itself as a loss of charge of single cells during prolonged tests of data retention of data programmed at a low temperature (for example, at ambient temperature). Although the probability of this phenomenon, in terms of number of lost bits is very low (ranging from 10 -8 to 10 -9 , its occurrence implies the failure of memories commonly having a capacity of many megabyte, missing the fulfillment of the specified failure targets required by many applications of these devices. On the other hand, this type of failure hardly lends itself to a preventive screening at the level of the testing process because the failure mechanism is induced by the number of cycles and the loss of charge may not otherwise be accelerated. This problem has been recently approached at a system level by introducing a dedicated refresh operation of the content of the programmed memory. However, this does not eliminate the problem, because it requires that the system be permanently powered, whereas a peculiar characteristic of nonvolatile memories should be that of their capacity of retaining the programmed information even in absence of power supply. US-A-5,475,693 describes a method of checking the correctness of data as they are read from the memory by comparing computed parity bit codes row-wise and column-wise on the data being read from a certain memory block with corresponding parity bit codes who were computed and permanently stored in dedicated portions of the memory upon writing data in the memory. The algorithm is such that if one or more bit errors (failed cells) are detected, it automatically corrects the read data to be made available at the output of the memory device. The algorithm contemplates a maximum number of bit errors for each block that may be so corrected. Upon exceeding this number, the data are classified as corrupted and the block will require reprogramming. US-A-5,532,962 discloses a method of scrubbing a memory array for physically correcting soft errors that may have developed. US-A-5,671,239 discloses a memory device including means for correcting erroneous bits in read data through a determination of the correct bits. In case of a flash-memory, a parity bit computation and a parity data write operation are performed whenever data are written in the memory. In order to solve this problem it has now been found an approach that uses a process of self-test and correction of loss of charge errors that may be performed at every power-on and/or pursuant to a command, and whose effectiveness rests on the fact that the number of bits that may cause this kind of failure through a loss of charge is relatively low and sufficiently so to statistically exclude the occurrence of two or more failures in a same sector of a multisector flash memory matrix. According to the invention, each sector, into which the flash memory matrix, erasable and programmable by whole sectors, is commonly divided, is furnished with an additional row and column in which to store parity bits. Thence, according to the method of this invention, each programming or writing operation of any sector terminates with a double re-reading of the sector itself for the calculation of the parity bits and their storage in the provided additional row and column. To make more explicit the above concept, the programming algorithm of a memory sector may for example imply, at the end of the normal programming process of the sector, the following procedure: starting from row "0", all the bytes of the row are read in sequence, the parity is verified by counting the number of "1"s and the relative parity bit is programmed when the number of "1"s of the row is even; the row address is incremented and the preceding operation is repeated, and so forth until exhausting all the rows of the sector; upon repositioning on the first byte of the zero row, all the bytes of the zero column are read, by counting the number of "1"s of each column and, similarly to what occurred above in relation to the rows we verify the parity, and thereafter the column parity bits are programmed; the column address is incremented and the preceding operation is repeated and so forth until exhausting the columns of the sector. For a sector of 64 Kbytes, the entire operation may require not more than 200 ms. The self-test operation and correction of loss of charge errors that are detected, consists in verifying the correctness of the parity codes of a sector and eventually in proceeding with the correction of an error, by reprogramming the bit that has lost its charge. Also in this case, to make more explicit the above concept, a self-test and correction algorithm may for example be the following: starting from row "0" all the bytes of the row are read in sequence, computing the parity and verifying its consistence with the value stored in the row parity bit; if the verification is positive, the row address is incremented and the operation is repeated until exhausting all the rows of the sector; if the verification is negative, a pointer is set on the row number and the procedure that verifies the columns parity is started; upon identifying the column in which the parity verification is negative, it is checked whether the bit pointed on the row is a "1" and if this is true the bit is programmed. Should the bit so identified be a "0" it would mean that the failure is due to a rather unlikely different mechanism (charge acquisition) and as such it would not be correctable. However, in this case, the routine may activate a noncorrectable error alert message. These objects are achieved by applying the features defined in independent method claim 1 and corresponding system claim 8. Preferably, the self-test and error correction algorithm should resume the parity verification and carry it on until exhausting all the remaining rows of the sector, thus verifying for the existence of a second error in the same sector, in which case the correction operation would not be successfully completed. The method of the invention is not intrinsically limited to make up for the presence of a single error per sector. Indeed, this apparent limitation may be reduced by adding more columns and rows for each sector in which to store as many parity codes. For example, by inserting 8 columns for each parity bit rather than one, the limit would change from an error per sector to an error per 1/8th of a sector. Preferably, the reading of data during the self-test that verify the parity codes is carried out with an adequate margin, for example by adopting the same reading conditions used during a so-called "program verify" procedure. A self-test command may be automatically inserted in the system switch-on routine or may be launched by the system periodically in performing memory refresh operations. Differently from what occurs during the execution of a common "program verify" routine, in which the correction of detected programming error takes place simultaneously with the reading phase, the self-test and error correction procedure of the invention does not take place during a reading phase of the flash memory but is a stand alone operation of verifying and reestablishing an eventually lost bit. The correction of a lost bit does not imply the implementation of a complex algorithm, which on the contrary is relatively simple because the control is effected row by row and thereafter column by column, or in an inverted order. Even in respect of refresh procedures, as commonly done in the case of DRAM memories, where it is essential that the eventually altered bit is not totally lost but maintains a residue of information, in a refresh operation implementing the self-test and eventual error correction of the invention, the bit may have been completely lost. The self-test and error correction method of the invention is applicable to NOR flash memories (that is, in memories that do not adopt a double Fowler-Nordheim mechanism) and is effective, as already explained above, only in the case of errors due to a loss of charge: "0" → "1". The invention is particularly effective in applications so called SMART CARD, by providing for a refresh method of unpowered mass memory supports.

Claims: A method of self-test and correction of errors due to a loss of charge for a flash memory constituted by an array or matrix of bit cells , organized in rows and columns, programmable by bit and erasable by whole sectors in which the matrix is divided, wherein row and column parity bit values are computed and stored upon programming each memory sector for carrying out at intervals of time self-test and eventual correction routines by whole - sector, said array or matrix of bit cells including at least an additional row and at least an additional column of cells for each memory sector, the method comprising the following steps: storing said row and column parity bit values of a sector as programmed in said additional row and in said additional column, respectively, and said self test routines including the steps of: sequentially computing row-by-row parity bit values and column-by-column parity bit values and verifying correspondence of each computed parity bit value with the respective stored bit value and identifying any one failed bit cell of the memory sector being tested; and if the failed bit so individuated is a logic "1" reprogramming the single failed bit cell to a logic "0" without performing a correction routine by whole sector. The method according to claim 1, characterized in that if a failed bit so individuated is a logic "0", a noncorrectable error alert is triggered. The method according to claim 1, characterized in that each sector is furnished with more than one additional column and more than one additional row in which to store as many parity bit value codes allowing correction of more than one failed bit cell per sector. The method according to claim 2, characterized in that the reading in performing the parity checks is done under so-called program-verify conditions. The method according to any of the preceding claims, characterized in that it is carried out automatically during a power-on routine of a system employing said flash memory. The method according to claim 1, characterized in that it is carried out by way of a command. The method according to any of the preceding claims, in which said bit cells are NOR cells. A system comprising a flash memory, programmable by bit and erasable by whole sectors in which is divided, constituted by an array or matrix of bit cells organized in rows and columns and characterized in that each sector of said flash memory has at least an additional column and at least an additional row in which to store parity bit values relative to parity checks of bytes of each row and parity checks of bytes of each column, respectively, allowing the execution of self-tests and corrections of eventual loss of charge errors of one or more cells per sector depending on the number of failed bit cells singularly identifiable by the infomation stored in said additional columns and rows when programming the sector, according to the method of claim 1. The system of claim 8, in which said bit cells are NOR cells.

Inventors: CAPPELLETTI PAOLO, MAURELLI ALFONSO, OLIVO MARCO, CAPPELLETTI, PAOLO, MAURELLI, ALFONSO, OLIVO, MARCO
Applicants: ST MICROELECTRONICS SRL, STMICROELECTRONICS S.R.L.
Application year: 1997
Main classification: G11C29
IPC codes: G11C16, G11C29, G06F11