BACKGROUND

The strong growth in demand for portable consumer electronic devices is driving the need for high-capacity storage devices. Non-volatile semiconductor memory devices, such as flash memory, are widely used to meet the ever-growing demands on digital information storage and exchange. Their portability, versatility and rugged design, along with their high reliability and large capacity, have made such memory devices ideal for use in a wide variety of electronic devices, including for example digital cameras, digital music players, video game consoles, PDAs, cellular telephones, laptops and servers.

Non-volatile semiconductor memory devices typically include a memory controller connected to one or more memory die by a communication path (e.g., bus). Each memory die typically includes an array of memory cells, wherein the memory cell is the basic unit of storage. In some embodiments, a memory cell stores one bit of data. In other embodiments, a memory cell stores multiple bits of data. In many embodiments, memory cells store data by adjusting the threshold voltage of the memory cell.

Memory controllers typically add error correction information to data being stored in the memory cells. The error correction information is appended to the user data to form a codeword and the memory controller will transmit the codeword to the memory die for programming on the memory die. Later, when reading back the data, if there is an error, the memory controller can use the error correction information to recover the original user data. The greater the amount of error correction information added to the user data, the greater the ability of the memory controller to recover more errors. However, the greater the amount of error correction information added to the user data, the larger the codewords. Large codewords will take longer to transmit on the communication path to the memory die, thereby slowing down the programming process and increasing power consumption.

An important aspect of memory devices is endurance; that is, the number of times a memory cell or cells may be written to before they fail. Thus, reducing the number of times a memory cell is programmed to either “0” or “1” can reduce wear. To mitigate unnecessary wearing of the memory, the data may be changed in a predictable and repeatable manner prior to storage to generate shaped data that causes less memory wear. This process is referred to as data shaping. For purposes of this document, data shaping is encoding or mapping of data from input values to output values such that the output values have a desired property. Data shaping may be beneficial to endurance, for example, because shaping data can result in a non-uniform distribution of “1” values and “0” values in the resulting shaped data. This non-uniform distribution may reduce wear by reducing the number of write operations to a highest state and/or to a lowest state of memory cells.

Adding more error correction information to user data may increase the efficiency of the data shaping. However, as noted above, increasing the amount of error correction information added to user data will slow down the programming process and increase power consumption.

