Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages
First Claim
Patent Images
1. A method of programming data to a plurality of flash memory devices, the method comprising:
- receiving data to be programmed;
arranging the received data for distribution among a page stripe such that sequentially received data is to be programmed among the page stripe, wherein the page stripe comprises two or more flash memory pages or two or more integer fractions of flash memory pages;
error correction encoding data to be stored within a particular page or integer fraction to generate primary parity symbols for primary codewords;
generating information portions of secondary codewords by selecting portions of primary codewords, wherein secondary codewords are at least partially orthogonal to primary codewords;
error correction encoding the information portions of the secondary codewords to generate secondary parity symbols for the secondary codewords;
arranging the secondary parity symbols for distribution within the page stripe such that the secondary parity symbols of each secondary codeword are spread out across each page of the page stripe when programmed; and
programming the page stripe with the arranged received data, the primary parity symbols, and the arranged secondary parity symbols;
wherein at least error correction encoding data, generating information portions, and error correction encoding the information portions are performed by an integrated circuit;
wherein at least error correction encoding data, generating information portions, and error correction encoding the information portions are performed concurrently with write operations for an end user.
7 Assignments
0 Petitions
Accused Products
Abstract
Apparatus and methods provide relatively low uncorrectable bit error rates, low write amplification, long life, fast and efficient retrieval, and efficient storage density such that a solid-state drive (SSD) can be implemented using relatively inexpensive MLC Flash for an enterprise storage application. Both primary parity symbols for primary codewords and secondary parity symbols for secondary codewords are generated. The secondary parity symbols are spread out across each page of a group of pages.
-
Citations
69 Claims
-
1. A method of programming data to a plurality of flash memory devices, the method comprising:
-
receiving data to be programmed; arranging the received data for distribution among a page stripe such that sequentially received data is to be programmed among the page stripe, wherein the page stripe comprises two or more flash memory pages or two or more integer fractions of flash memory pages; error correction encoding data to be stored within a particular page or integer fraction to generate primary parity symbols for primary codewords; generating information portions of secondary codewords by selecting portions of primary codewords, wherein secondary codewords are at least partially orthogonal to primary codewords; error correction encoding the information portions of the secondary codewords to generate secondary parity symbols for the secondary codewords; arranging the secondary parity symbols for distribution within the page stripe such that the secondary parity symbols of each secondary codeword are spread out across each page of the page stripe when programmed; and programming the page stripe with the arranged received data, the primary parity symbols, and the arranged secondary parity symbols; wherein at least error correction encoding data, generating information portions, and error correction encoding the information portions are performed by an integrated circuit; wherein at least error correction encoding data, generating information portions, and error correction encoding the information portions are performed concurrently with write operations for an end user. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)
-
-
24. An apparatus comprising:
-
a first circuit configured to; receive data to be programmed; and arrange the received data for distribution among a page stripe such that sequentially received data is to be programmed among the page stripe, wherein the page stripe comprises two or more flash memory pages or two or more integer fractions of flash memory pages; a second circuit configured to error correction encode data to be stored within a particular page or integer fraction to generate primary parity symbols for primary codewords; the first circuit further configured to select portions of primary codewords to generate information portions of secondary codewords, wherein secondary codewords are at least partially orthogonal to primary codewords; the second circuit further configured to error correction encode the information portions of the secondary codewords to generate secondary parity symbols for the secondary codewords; the first circuit further configured to arrange the secondary parity symbols for distribution among the page stripe such that the secondary parity symbols are spread out across each page of the page stripe when programmed; and the first circuit further configured to program the page stripe with the arranged received data, the primary parity symbols, and the arranged secondary parity symbols; wherein the first circuit and the second circuit are configured to error correction encode data, to generate information portions, and to error correction encode the information portions concurrently with write operations for an end user. - View Dependent Claims (25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46)
-
-
47. An apparatus for programming data to a plurality of flash memory devices, the apparatus comprising:
-
a means for receiving data to be programmed; a means for arranging the received data for distribution among a page stripe such that sequentially received data is to be programmed among the page stripe, wherein the page stripe comprises two or more flash memory pages or two or more integer fractions of flash memory pages; a means for error correction encoding data to be stored within a particular page or integer fraction to generate primary parity symbols for primary codewords; a means for generating information portions of secondary codewords by selecting portions of primary codewords, wherein secondary codewords are at least partially orthogonal to primary codewords; the encoding means further configured to error correction encode the information portions of the secondary codewords to generate secondary parity symbols for the secondary codewords; the arranging means further configured to arrange the secondary parity symbols for distribution among the page stripe such that the secondary parity symbols are spread out across each page of the page stripe when programmed; and a means for programming the page stripe with the arranged received data, the primary parity symbols, and the arranged secondary parity symbols; wherein the arranging means and the error correction means are configured to operate concurrently with write operations for an end user. - View Dependent Claims (48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69)
-
Specification