Patent ID: 8868821

Claim:
A method for programming a flash memory having two bits per cell flash memory cells, the method comprising: providing multiple pairs of most significant bit (MSB) page uncoded bit error rates (UBERs) and least significant bit (LSB) page UBERs, each pair of said multiple pairs for a respective plurality of two bits per cell flash memory cells; wherein an average UBER of each pair of said multiple pairs is an average of an MSB page UBER of the pair and a LSB page UBER of the pair; associating each MSB page with an MSB of the two bits; associating each LSB page with an LSB of the two bits; selecting a highest pair of said multiple pairs, wherein the average UBER of the highest pair is highest of the average UBER of each pair of said multiple pairs, wherein the MSB page UBER of the highest pair is a selected MSB page UBER, and the LSB page UBER of the highest pair is a selected LSB page UBER; determining a selected MSB page code rate and a selected LSB page code rate, wherein the selected MSB page code rate is associated with the selected MSB page UBER, and the selected LSB page code rate is associated with the selected LSB page UBER, wherein the selected MSB page code rate and the selected LSB page code rate are obtained under a desired code rate constraint; and determining an encoding and programming scheme based on the selected MSB page UBER, the selected MSB page code rate, the selected LSB page UBER, and the selected LSB page code rate.