# US 10,871,910 B1 · Non-volatile memory with selective interleaved coding based on block reliability

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,871,910 B1
- Document ID: US10871910B1
- Status: Granted
- Kind: B1
- Application number: 16/586,895
- Filed: 2019-09-27
- Granted: 2020-12-22
- Earliest claimed: 2019-09-27
- Assignees: Western Digital Technologies, Inc.
- Applicants: Western Digital Technologies, Inc.
- Inventors: Idan Alrod; Ariel Navon; Eran Sharon
- Web page: https://patentgrep.com/patent/US10871910B1

## CPC

- G06F 3/064: {Management of blocks}
- G06F 3/061: {Improving I/O performance}
- G06F 3/0619: {in relation to data integrity, e.g. data losses, bit errors}
- G06F 3/0644: {Management of space entities, e.g. partitions, extents, pools}
- G06F 3/0653: {Monitoring storage devices or systems}
- G06F 3/0679: {Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]}
- G06F 11/076: {by exceeding a count or rate limit, e.g. word- or bit count limit}
- G06F 11/1044: {with specific ECC/EDC distribution}
- G06F 11/1048: {using arrangements adapted for a specific error detection or correction feature}
- G06F 11/1068: {in sector programmable memories, e.g. flash disk (G06F11/1072 takes precedence)}
- G06F 12/0246: {in block erasable memory, e.g. flash memory}
- G06F 12/0607: {Interleaved addressing}
- G11C 16/349: {Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles}
- G11C 29/42: using error correcting codes [ECC] or parity check
- G11C 29/52: Protection of memory contents; Detection of errors in memory contents
- G06F 2212/1036: Life time enhancement
- G06F 2212/7204: Capacity control, e.g. partitioning, end-of-life degradation
- G06F 2212/7208: Multiple device management, e.g. distributing data over multiple flash devices
- G06F 2212/7211: Wear leveling
- G11C 8/12: Group selection circuits, e.g. for memory block selection, chip selection, array selection
- G11C 16/10: Programming or data input circuits
- G11C 2029/0411: {Online error correction}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G11C: STATIC STORES (semiconductor memory devices H10B)

## Abstract

In one embodiment, the disclosure teaches an apparatus including a memory array and a processor in communication with the memory array. The processor is configured to determine health scores of blocks of the memory array, where the health scores indicate the health of the blocks. The processor also is configured to receive data from a host, and select an interleaving scheme for programming the data based on the data type and a block to which the data is written based on the health scores. In one embodiment, sequential type data is written to unhealthy blocks and non-sequential data is written to healthy blocks.

## Claims

### Claim 1

An apparatus, comprising:
a memory array; and
a processor in communication with the memory array, wherein the processor is configured to:
determine health scores for a plurality of blocks of the memory array, the health scores indicating the health of the blocks;
receive, from a host, data having a data type;
select an interleaving scheme for encoding the data based on the data type, wherein the interleaving scheme is one of interleaved and non-interleaved; and
write the data to a healthy block if a non-interleaved scheme was selected and write the data to an unhealthy block if an interleaved scheme was selected.

### Claim 2 (depends on 1)

The apparatus of claim 1, wherein a healthy block has a health score above a predetermined value and an unhealthy block has a health score below the predetermined value.

### Claim 3 (depends on 1)

The apparatus of claim 1, wherein the data type is one of sequential and non-sequential.

### Claim 4 (depends on 3)

The apparatus of claim 3, wherein sequential data is written to an unhealthy block and non-sequential data is written to a healthy block.

### Claim 5 (depends on 4)

The apparatus of claim 4, wherein a first Error Correction Code (ECC) scheme is used for sequential data and a second ECC scheme is used for non-sequential data.

### Claim 6 (depends on 1)

The apparatus of claim 1, wherein the health score is based on a fail bit count of a first block.

### Claim 7 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to assign the healthy block to a first partition based on a mapping of the health score of the healthy block and a partition identifier corresponding to the first partition.

### Claim 8 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to:
assign the healthy block to a first partition associated with a random data type responsive to the health score of the healthy block satisfying a first predetermined threshold; and
assign the unhealthy block to a second partition associated with a sequential data type responsive to the health score of the unhealthy block satisfying a second predetermined threshold.

### Claim 9 (depends on 8)

The apparatus of claim 8, wherein the first partition and the second partition are associated with a same code word length.

### Claim 10 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to update the health score responsive to a schedule or a triggering event.

### Claim 11 (depends on 1)

The apparatus of claim 1, wherein a parity portion of the data includes an indication of the data type.

### Claim 12 (depends on 1)

The apparatus of claim 1, wherein the processor is further configured to:
identify the data type;
apply non-interleaved coding when the data type is a random type; and
apply interleaved coding when the data type is a sequential type.

### Claim 13

A method comprising:
determining, by a controller, health scores for a plurality of blocks of a memory array, the health scores indicating the health of the blocks;
receiving, by the controller and from a host, data having a data type;
selecting, by the controller, an interleaving scheme for encoding the data based on the data type, wherein the interleaving scheme is one of interleaved and non-interleaved; and
writing, by the controller, the data to a healthy block if a non-interleaved scheme was selected and writing the data to an unhealthy block if an interleaved scheme was selected.

### Claim 14 (depends on 13)

The method of claim 13, wherein the health score is based on a fail bit count of a first block.

### Claim 15 (depends on 13)

The method of claim 13, further comprising assigning, by the controller, the healthy block to a first partition based on a mapping of the health score of the healthy block and a partition identifier corresponding to the first partition.

### Claim 16 (depends on 13)

The method of claim 13, further comprising:
assigning, by the controller, the healthy block to a first partition associated with a random data type responsive to the health score of the healthy block satisfying a first predetermined threshold; and
assigning, by the controller, the unhealthy block to a second partition associated with a sequential data type responsive to the health score of the unhealthy block satisfying a second predetermined threshold.

### Claim 17 (depends on 16)

The method of claim 16, wherein the first partition and the second partition are associated with a same code word length.

### Claim 18 (depends on 13)

The method of claim 13, further comprising updating, by the controller, the health score responsive to a schedule or a triggering event.

### Claim 19 (depends on 13)

The method of claim 13, wherein a parity portion of the data includes an indication of the data type.

### Claim 20 (depends on 13)

The method of claim 13, further comprising:
applying, by the controller, non-interleaved coding when the data type is a random type; and
applying, by the controller, interleaved coding when the data type is a sequential type.

### Claim 21

An apparatus, comprising:
a memory array; and
processing means in communication with the memory array, wherein the processing means includes:
means for determining health scores for a plurality of blocks of the memory array, the health scores indicating the health of the blocks;
means for receiving, from a host, data having a data type;
means for selecting an interleaving scheme for encoding the data based on the data type, wherein the interleaving scheme is one of interleaved and non-interleaved; and
means for writing the data to a healthy block if a non-interleaved scheme was selected and means for writing the data to an unhealthy block if an interleaved scheme was selected.
