IP Library › Granted Patent US 12,431,210
Granted Patent B2
US 12,431,210 · App. 18/217,959 · Granted Sep 30, 2025

Selecting read reference voltage using historical decoding information

Inventors: Bo Fu (Cupertino, CA); Jie Chen (Milpitas, CA); Zining Wu (Los Altos, CA)
Assignee: InnoGrit Technologies Co., Ltd.
G11C29/42G11C11/4096G11C11/4099G11C29/18G11C29/4401G11C2029/1802
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,431,210
App. No.
18/217,959
Granted
Sep 30, 2025
Kind
B2
Abstract

Systems and methods are provided for reading data from non-volatile storage devices and decoding the read data. A method may include obtaining a unique identifier for a storage location to be read, retrieving from a memory an adjustment to read reference voltage (Vref) associated with the unique identifier, performing a read operation on the storage location using a read reference voltage adjusted by the adjustment to Vref, decoding data read from the storage location in a decoding process and updating the adjustment to V ref in the memory with decoding information generated during the decoding process.

Claims (74)

1. A method, comprising:

obtaining a unique identifier for a storage location to be read;

retrieving from a memory an adjustment value to read reference voltage (V ref ) associated with the unique identifier;

performing a read operation on the storage location using a read reference voltage adjusted by applying the adjustment value to V ref ;

decoding data read from the storage location in a decoding process; and

updating the adjustment value in the memory, with decoding information generated during the decoding process;

wherein updating the adjustment value in the memory is based on an error flipping count in the decoding information.

2. The method of claim 1 , wherein the decoding information includes another adjustment value to V ref that is different from the adjustment value stored in the memory and updating the adjustment value includes replacing the adjustment value stored in the memory with the another adjustment value.

3. The method of claim 1 , wherein the decoding information includes another adjustment value to V ref , an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein updating the adjustment value includes:

determining that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory;

calculating a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determining that threshold values for the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average are reached;

generating a new adjustment value to V ref and resetting the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average to zero; and

storing the new adjustment value, zero for the average of difference between EFC 0→1 and EFC 1→0 and zero for the number of most recent decoding processes used for calculating the average to the memory.

4. The method of claim 1 , wherein the decoding information includes another adjustment value to V ref , an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein updating the adjustment value includes:

determining that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory;

calculating a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determining that at least one of the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average has not reached its respective threshold value; and

updating a memory record with the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average.

5. The method of claim 1 , wherein the decoding information includes an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein updating the adjustment value includes:

calculating a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determining whether threshold values for the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average are reached;

if both of the threshold values are reached, generating a new adjustment value to V ref and resetting the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average to zero; and

if either of the threshold values is not reached, updating a memory record with the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average.

6. The method of claim 5 , wherein the decoding information further includes another adjustment value to V ref , and wherein updating the adjustment value further includes: determining that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory.

7. The method of claim 1 , wherein the memory stores the adjustment value using the unique identifier for the storage location as an index.

8. The method of claim 1 , wherein the unique identifier for the storage location is a physical data address (PDA).

9. A storage system controller, comprising:

a logical data address (LDA) to physical data address (PDA) mapper configured to obtain a PDA for a LDA;

a read reference voltage (V ref ) search controller configured to retrieve from a memory an adjustment value to V ref associated with the PDA;

a NAND interface controller configured to issue a read command to read a storage location identified by the PDA;

one or more ECC decoders configured to decode data read by the read command in a decoding process; and

a V ref update controller configured to update the adjustment value in the memory, with decoding information generated during the decoding process, based on an error flipping count in the decoding information.

10. The storage system controller of claim 9 , wherein the decoding information includes another adjustment value to V ref that is different from the adjustment value stored in the memory and to update the adjustment value includes replacing the adjustment value stored in the memory with the another adjustment value.

11. The storage system controller of claim 9 , wherein the decoding information includes another adjustment value to V ref , an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein to update the adjustment value includes to:

determine that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory;

calculate a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determine that threshold values for the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average are reached;

generate a new adjustment value to V ref and reset the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average to zero; and

store the new adjustment value, zero for the average of difference between EFC 0→1 and EFC 1→0 and zero for the number of most recent decoding processes used for calculating the average to the memory.

12. The storage system controller of claim 9 , wherein the decoding information includes another adjustment value to V ref , an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein to update the adjustment value includes to:

determine that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory;

calculate a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determine that at least one of the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average has not reached its respective threshold value; and

update a memory record with the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average.

13. The storage system controller of claim 9 , wherein the decoding information includes an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein to update the adjustment value includes to:

calculate a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determine whether threshold values for the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average are reached;

if both of the threshold values are reached, generate a new adjustment value to V ref and reset the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average to zero; and

if either of the threshold values is not reached, update a memory record with the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average.

14. The storage system controller of claim 13 , wherein the decoding information further includes another adjustment value to V ref , and wherein to update the adjustment value further includes to determine that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory.

15. A non-transitory machine-readable medium having executable instructions, wherein the executable instructions, when executed by a storage controller, causes the storage controller to:

obtain a unique identifier for a storage location to be read;

retrieve from a memory an adjustment value to read reference voltage (V ref ) associated with the unique identifier;

perform a read operation on the storage location using a read reference voltage adjusted by applying the adjustment value to V ref ;

decode data read from the storage location in a decoding process; and

update the adjustment value in the memory, with decoding information generated during the decoding process, based on an error flipping count in the decoding information.

16. The non-transitory machine-readable medium of claim 15 , wherein the decoding information includes another adjustment value to V ref that is different from the adjustment value stored in the memory and to update the adjustment value includes replacing the adjustment value stored in the memory with the another adjustment value.

17. The non-transitory machine-readable medium of claim 15 , wherein the decoding information includes another adjustment value to V ref , an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein to update the adjustment value includes to:

determine that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory;

calculate a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determine that threshold values for the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average are reached;

generating a new adjustment value to V ref and resetting the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average to zero; and

store the new adjustment value, zero for the average of difference between EFC 0→1 and EFC 1→0 and zero for the number of most recent decoding processes used for calculating the average to the memory.

18. The non-transitory machine-readable medium of claim 15 , wherein the decoding information includes another adjustment value to V ref , an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein to update the adjustment value includes to:

determine that the another adjustment value included in the decoding information is the same as the adjustment value stored in the memory;

calculate a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determine that at least one of the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average has not reached its respective threshold value; and

update a memory record with the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average.

19. The non-transitory machine-readable medium of claim 15 , wherein the decoding information includes an error flipping count of zero to one (EFC 0→1 ) and an error flipping count of one to zero (EFC 1→0 ), and wherein to update the adjustment value includes to:

calculate a new value of an average of difference between EFC 0→1 and EFC 1→0 , the average being calculated over a number of most recent decoding processes;

determine whether threshold values for the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average are reached;

if both of the threshold values are reached, generate a new adjustment value to V ref and reset the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average to zero; and

if either of the threshold values is not reached, update a memory record with the new value of the average of difference between EFC 0→1 and EFC 1→0 and the number of most recent decoding processes used for calculating the average.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 3, 2023
From: FU, BO; CHEN, JIE; WU, ZINING
To: INNOGRIT TECHNOLOGIES CO., LTD.
Reel/Frame 064141/0931 →
Continuity (2)
Continuation 17490304 · Sep 30, 2021
Related Publication 20230360715A1 · Nov 9, 2023
References Cited (5)
US 9785357B2 · Raghu · 2017 [cited by examiner]
US 9916237B2 · Hyun · 2018 [cited by examiner]
US 11735286B2 · Fu · 2023 [cited by examiner]
US 20140101519A1 · Lee · 2014 [cited by examiner]
US 20200058359A1 · Lee · 2020 [cited by examiner]