FR 3033927 A1 20160923 FR 1652158 A 20160315 1 GROUPEMENT DES NIVEAUX DE LECTURE POUR DES PERFORMANCES DE MEMOIRE FLASH ACCRUES CONTEXTE [0001] La présente invention porte sur la récupération d'informations auprès de dispositifs à mémoire flash tels que les disques électroniques (SSD). Les disques électroniques (SSD) à bas prix sont généralement fabriqués en utilisant une mémoire flash à cellule multiniveau (MLC) pour une capacité de données accrue, mais les dispositifs à mémoire MLC sont parfois moins fiables que les mémoires flash à cellule mononiveau (SLC). Les fabricants de SSD grand public ont modéré ces problèmes en employant certains algorithmes de répartition de l'usure. Même avec la capacité de données accrue des MLC, l'utilisation des MLC dans les applications professionnelles devient plus coûteuse en raison de sa diminution disproportionnellement élevée dans le temps de cycles de programmation/effacement (P/E) dûe aux contraintes accrues (causant l'usure) nécessaires pour la lecture, la programmation et l'effacement de la mémoire flash, entraîne une dégradation graduelle de l'endurance. RESUME [0002] L'invention concerne un procédé de récupération d'informations stockées dans une mémoire flash. Selon différents aspects, le procédé peut inclure la lecture d'un premier exemple de lignes de mots d'un bloc de mémoire, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective, la génération d'une table de décomptes d'erreurs en se basant sur les décomptes d'erreurs produits, la table de décomptes d'erreurs indexant chaque décompte d'erreurs produit par un identifiant de ligne de mots correspondant et une tension respective des différentes tensions de niveau de lecture utilisées pour produire le décompte d'erreurs, et la configuration d'un dispositif de stockage pour réaliser les opérations de lecture en utilisant des tensions de niveau de lecture sélectionnées sur la base des décomptes d'erreurs de la table de décomptes d'erreurs. D'autres aspects incluent des systèmes, des appareils et des produits de programme informatique correspondants pour la mise en oeuvre du procédé mis en oeuvre sur ordinateur. 3033927 2 [0003] Dans différents aspects, un dispositif de stockage de données peut comprendre une pluralité de dispositifs à mémoire flash, chaque dispositif à mémoire flash comprenant une pluralité de blocs de mémoire et un contrôleur connecté à la pluralité de dispositifs à mémoire flash. Le contrôleur peut être configuré pour lire un premier exemple de lignes de mots du 5 dispositif à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes afin de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective, générer une table de décomptes d'erreurs en se basant sur les décomptes d'erreurs produits, la table de décomptes d'erreurs 10 indexant chaque décompte d'erreurs produit par un identifiant de ligne de mots correspondant et l'une respective parmi les tensions de niveau de lecture différentes, et sélectionner les tensions de niveau de lecture pour les futures opérations de lecture en se basant sur les décomptes d'erreurs de la table de décomptes d'erreurs. [0004] Dans différents aspects, un procédé peut comprendre la lecture d'un premier 15 exemple de lignes de mots d'un dispositif à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à une adresse de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes afin de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective, la génération d'une table de décomptes d'erreurs en se basant sur les décomptes d'erreurs 20 produits, la table de décomptes d'erreurs indexant chaque décompte d'erreurs produit par une adresse de ligne de mots correspondante et l'une respective parmi les tensions de niveau de lecture différentes, la formation d'une pluralité de groupes de lignes de mots en se basant sur la table de décomptes d'erreurs, chaque groupe associant l'une respective parmi les tensions de niveau de lecture différentes à une pluralité d'adresses de ligne de mots, et la configuration 25 d'un dispositif de stockage pour lire les cellules de mémoire en utilisant une tension de niveau de lecture d'un groupe de lignes de mots généré correspondant à une adresse de ligne de mots des cellules de mémoire à lire. [0005] Il est entendu que d'autres configurations de la présente invention ressortiront facilement de la description suivante pour les personnes compétentes dans l'art, description 30 dans laquelle diverses configurations de la présente invention sont indiquées et décrites à titre d'illustration. Comme il sera constaté, la présente invention est capable d'adopter des configurations autres et différentes et ses nombreux détails peuvent être modifiés sous 3033927 3 différents autres aspects, le tout sans s'écarter du domaine d'application de la présente invention. Par conséquent, les dessins et la description détaillée sont à considérer de nature illustrative et non restrictive. BREVE DESCRIPTION DES DESSINS 5 [0006] La Figure 1 est un exemple de diagramme de quatre distributions possibles de tension de seuil de cellule (VT) et de niveaux de lecture de programme associés pour un groupe de cellules de mémoire dans une mémoire flash à cellule multiniveau (MLC). [0007] La Figure 2A représente un exemple de détermination de probabilité pour une page bit de poids faible (LSB) en utilisant trois niveaux de lecture. 10 [0008] La Figure 2B représente un exemple de détermination de probabilité pour une page à bit de poids fort (MSB) d'une mémoire flash MLC en utilisant trois niveaux de lecture. [0009] La Figure 3 représente un exemple de variations de tension de niveau de lecture optimal pour de multiples lignes de mots d'un bloc de mémoire. 15 [0010] La Figure 4 représente un exemple de table de décomptes d'erreurs pour un exemple de plage de valeurs de décalage de niveau de lecture pour de multiples lignes de mots. [0011] Les Figures 5A à 5C représentent des graphiques d'exemples de décalages de niveau de lecture optimal pour des blocs de mémoire soumis à des cycles. 20 [0012] La Figure 6 représente un synoptique d'un exemple d'algorithme destiné à générer des groupes de lignes de mots décalés. [0013] La Figure 7 représente un schéma de procédé d'un premier exemple de processus de génération de groupes de lignes de mots décalés. [0014] La Figure 8 représente un schéma de procédé d'un deuxième exemple de 25 processus de génération de groupes de lignes de mots décalés. 3033927 4 [0015] La Figure 9 représente un exemple de canal de mémoire flash modélisé sous la forme d'un canal sans mémoire discret (DMC) avec des entrées binaires et des sorties K-aires. [0016] Les Figures 10A à 10C représentent un exemple de graphes d'interpolation 5 linéaire pour le calibrage d'exemples de niveaux de lecture et/ou de décalages de niveau de lecture. [0017] Les Figures 10D à 10F représentent un exemple de graphes d'interpolation linéaire pour le recalibrage d'exemples de niveaux de lecture et/ou de décalages de niveau de lecture. 10 [0018] Les Figures 11A et 11B représentent des exemples de modes d'optimisation du niveau de lecture. [0019] La Figure 12 représente un schéma de procédé d'un exemple de processus de calibrage des niveaux de lecture pour la lecture d'une pluralité de cellules de mémoire dans un dispositif de stockage. 15 [0020] La Figure 13 représente un schéma de procédé d'un exemple de processus de calibrage des niveaux de lecture pour la récupération de données. [0021] La Figure 14 représente un schéma de procédé d'un exemple de processus de régénération d'une pluralité de groupes de lignes de mots décalés optimaux en se basant sur la régénération et la réindexation d'une table de décomptes d'erreurs. 20 [0022] La Figure 15 est un synoptique représentant les composants d'un exemple de système de stockage de données. DESCRIPTION DETAILLEE [0023] La description détaillée énoncée ci-dessous est conçue pour être une description de diverses configurations de la présente invention et n'est pas destinée à représenter 25 uniquement les configurations dans lesquelles la présente invention peut être mise en oeuvre. Les dessins joints sont incorporés ici et font partie intégrante de la description détaillée. La description détaillée inclut des détails spécifiques visant à fournir une compréhension approfondie de la présente invention. Il apparaîtra cependant aux personnes compétentes 3033927 5 dans l'art que la présente invention peut être mise en oeuvre sans ces détails spécifiques. Dans certaines circonstances, des structures et des composants sont représentés sous une forme synoptique afin d'éviter un masquage des concepts de la présente invention. Les composants identiques sont pourvus de numéros de référence identiques afin de faciliter la 5 compréhension. [0024] Dans un dispositif à mémoire flash, par exemple avec une architecture NAND, les cellules de mémoire sont groupées en chaînes, chaque chaîne étant composée d'un ensemble de transistors branchés en série entre un transistor à sélection de drain (raccordé à une ligne de bit respective d'un bloc de mémoire) un transistor à sélection de source (raccordé à une 10 ligne de distribution de tension de référence). Chaque cellule de mémoire contient un transistor MOS à gâchette flottante. Lors de la programmation d'une cellule de mémoire, des électrons sont injectés dans la gâchette flottante, par exemple au moyen de l'effet tunnel Fowler-Nordheim (F-N) et/ou d'injection d'électrons chauds. Le caractère non volatile de la cellule est dû aux électrons maintenus à l'intérieur de la gâchette flottante. Les bits sont 15 stockés en piégeant la charge sur la gâchette flottante (un conducteur électriquement isolé) qui stocke une valeur logique définie par sa tension de seuil (tension requise pour faire conduire la cellule), laquelle est proportionnelle à la charge électrique stockée. Lorsqu'une cellule de mémoire est effacée, les électrons dans la gâchette flottante de la cellule sont arrachés par effet tunnel (un courant de tunnel) de la gâchette flottante vers, par exemple, la 20 source et/ou le substrat. [0025] Lorsqu'une mémoire flash est soumise à des cycles (c'est-à-dire programmée et effacée de manière répétitive), ses qualités physiques changent. L'implantation et le retrait répétés d'électrons sur la gâchette flottante par exemple, respectivement pendant les opérations de programmation et d'effacement, ont pour effet que certains électrons 25 excédentaires sont capturés dans le dispositif. De même, lorsqu'une ou plusieurs cellules sont programmées, les cellules voisines peuvent subir une injection de charge inattendue et indésirable vers leurs gâchettes flottantes, ce qui entraîne une corruption des données qui y sont stockées. À titre d'exemple, des électrons peuvent fuir dans les cellules voisines après une contrainte prolongée dûe aux tensions au niveau des gâchettes des cellules voisines. Les 30 tensions de seuil de ces cellules de mémoire peuvent éventuellement prendre des valeurs différentes (supérieures ou inférieures) aux valeurs attendues, ce qui provoque des erreurs lors de la lecture des données. Le dommage causé devient généralement une fonction de 3033927 6 l'intensité (par exemple la tension) et de la durée du champ ; ce qui revient à dire que la programmation de la mémoire flash à des conditions de tension de seuil élevée augmente le taux de dommages résultant à la fois des processus de programmation et d'effacement, car elle nécessite des champs appliqués pendant une durée plus longue et/ou à un niveau plus 5 élevé. L'ajout d'un nombre suffisant d'électrons, par exemple, peut modifier une cellule d'un état effacé en un état programmé. [0026] Dans divers modes de réalisation, les cellules de mémoire sont disposées sur une galette en une matrice de colonnes (lignes de bits) et de lignes (lignes de mots). L'adresse d'une cellule de mémoire représente l'intersection d'une ligne de bits et d'une ligne de mots 10 correspondant à (par exemple indexant) la cellule de mémoire. Une mémoire flash peut en outre être composée de blocs, chaque bloc étant divisé en pages. Dans certains modes de réalisation de mémoire MLC, chaque ligne de cellules de la mémoire flash est composée de 2 pages : une page LSB et une page MSB. Si un bloc comprend 128 pages, il peut alors posséder 64 lignes de cellules, chaque ligne comprenant deux pages. Chaque ligne peut 15 présenter un comportement différent, car lorsque des cellules se trouvent physiquement ensemble dans une puce, elles sont soumises aux variations de tensions et de résistances ainsi que d'autres caractéristiques dans le cadre du processus de fabrication. [0027] En architecture NAND, il a été constaté que le problème de la dégradation est particulièrement problématique, car chaque transistor dans la chaîne de cellules lues (par 20 exemple au niveau d'une ligne de bits) reçoit une contrainte de tension élevée, même si un nombre inférieur à la totalité des cellules de cette chaîne (par exemple à un emplacement dans la ligne de bits correspondant à une ligne de mots désignée) peut être lu à un instant quelconque. Du fait de la dégradation, lorsqu'elles sont programmées, les cellules de certaines lignes (lignes de mots) sont plus éloignées de leurs valeurs attendues (par exemple 25 une tension attendue mesurée au niveau d'une ligne de bits correspondante) que d'autres. Il a été observé que ces variations peuvent être associées à des lignes de mots individuelles. Par conséquent, la technologie selon l'invention caractérise ces variations comme une valeur mesurable et fournit un mécanisme pour compenser les variations à l'exécution. S'il est constaté, par exemple, que les tensions de cellule dans une ligne de mots se décalent (par 30 exemple en résultat d'un processus de caractérisation), une polarisation (par exemple une tension de décalage) peut alors être introduite pendant l'opération de programmation ou de lecture qui suit pour corriger la tension programmée ou la valeur lue. La non-linéarité des 3033927 7 valeurs de programmation réelles entre les cellules dans les différentes lignes de mots peut ainsi être réduite, ce qui réduit à son tour les erreurs lors de la lecture des cellules. [0028] La même polarisation ne convient cependant pas nécessairement pour une correction uniforme des erreurs liées à la lecture à travers un bloc ou une puce particuliers. 5 De plus, le stockage de valeurs de polarisation pour chaque ligne de mots ou bloc peut rapidement consommer de la mémoire utile pour le stockage et peut devenir ingérable et/ou affecter les performances en nécessitant de nombreuses consultations pour appliquer la polarisation correcte à chaque opération de lecture. Par conséquent, la technologie selon l'invention fournit un mécanisme pour déterminer et associer les valeurs de polarisation à 10 des groupes de lignes de mots, les valeurs de polarisation étant optimisées pour le taux d'erreurs de lecture le plus faible possible pour la lecture des lignes de mots au sein d'un groupe. La technologie selon l'invention fournit en outre un mécanisme pour optimiser les valeurs de polarisation sur la durée de vie des cellules de mémoire. Les valeurs de polarisation peuvent ainsi être stockées et rappelées efficacement, et corrigées si nécessaire, 15 améliorant ainsi la fiabilité et l'endurance de l'architecture globale de la cellule de mémoire flash, rendant la mémoire flash adaptée aux applications professionnelles. [0029] La Figure 1 est un exemple de diagramme de quatre distributions possibles de tension de seuil de cellule (VT) (401, 410, 420 et 430) et de niveaux de lecture de programme associés (seuils LO, Li et L2) pour un groupe de cellules de mémoire dans une mémoire 20 flash à cellule multiniveau (MLC), conformément à un aspect de la technologie selon l'invention. La mémoire flash NAND MLC fournit plus d'un bit par cellule en choisissant entre de multiples niveaux de charge électrique (niveau de lecture) à appliquer à la gâchette flottante de ses cellules en vue d'obtenir de multiples états de conductivité, chacun se produisant à un seuil de tension VT différent. Comme illustré dans la Figure 1, une cellule 25 NAND MLC est capable de stocker un état parmi quatre (niveaux de charge) par cellule, produisant deux bits logiques d'information par cellule : le bit de poids fort (MSB) et le bit de poids faible (LSB). Ces deux bits peuvent constituer les pages MSB et LSB d'un bloc de mémoire. [0030] La Figure 1 représente les courbes de distribution de densité de probabilité 400 30 pour un groupe de cellules de mémoire (par exemple dans un bloc) programmées aux niveaux de données LO, Li, L2 et L3. Les distributions 401, 410, 420 et 430 correspondent aux courbes de distribution de densité de probabilité respectivement pour les niveaux de données 3033927 8 LO, Li, L2 et L3. Chaque niveau de données est séparé par un niveau de tension de seuil correspondant. Dans l'exemple représenté, les niveaux de tension de seuil sont identifiés comme le seuil LO, le seuil Li et le seuil L2. Les niveaux de tension de seuil sont utilisés par un détecteur de seuil (par exemple à l'intérieur de la mémoire flash) en tant que « niveaux de 5 lecture » pour déterminer, par exemple, s'il convient de lire un signal de lecture en considérant qu'il se trouve dans la distribution 401, 410, 420 ou 430. Les quatre distributions de cellule 401, 410, 420 et 430 de la Figure 1 peuvent être obtenues à partie de données de laboratoire. [0031] Pour garantir que toutes les cellules dans une distribution conduiront, une tension 10 de niveau de lecture supérieure à la distribution est appliquée. Dans les divers exemples décrits ici, un premier niveau de lecture RL1 correspond à la tension de seuil LO, un deuxième niveau de lecture RL2 correspond à la tension de seuil Li et un troisième niveau de lecture RL3 correspond à la tension de seuil L2. À cet égard, la tension RL1 amènera les cellules dans la distribution LO à conduire, la tension RL2 amènera les cellules dans la 15 distribution Li à conduire, la tension RL3 amènera les cellules dans la distribution L2 à conduire, etc. Lorsque quatre états seulement sont disponibles, comme représenté par la Figure 1, la tension RL3 n'amènera aucune cellule dans la distribution L3 à conduire. Dans certains modes de réalisation, cela produira un x0 binaire dans le LSB pour ces cellules. Pour N distributions, il y aura généralement N-1 niveaux de lecture. Dans l'exemple représenté, il 20 existe quatre distributions (états) et trois niveaux de lecture. Il est toutefois entendu qu'il peut exister huit, seize ou même plus de distributions sans s'écarter du domaine d'application de la technologie selon l'invention. [0032] La Figure 2A représente un exemple de détermination de probabilité pour une page LSB en utilisant trois niveaux de lecture RL1, RL2 et RL3, conformément à un aspect 25 de la technologie selon l'invention. Dans l'exemple représenté, un premier niveau de lecture 202 (« RL2 ») est utilisé dans une première lecture d'une page LSB pour déterminer les niveaux de programmation putatifs pour les cellules de mémoire de la page LSB. Plusieurs lectures virtuelles sont initiées afin de déterminer une probabilité pour que les cellules de mémoire aient été réellement programmées aux niveaux de programmation putatifs observés. 30 [0033] Dans l'exemple représenté, les cellules de mémoire sont lues en utilisant un deuxième niveau de lecture 204 inférieur au premier niveau de lecture 202 et un troisième niveau de lecture 206 supérieur au premier niveau de lecture 202. Une première région de 3033927 9 programme BI contient une ou plusieurs cellules possédant une valeur programmée entre le premier niveau de lecture 202 et le deuxième niveau de lecture 204, et une deuxième région de programme 82 comprend une ou plusieurs cellules possédant une valeur programmée entre le premier niveau de lecture 202 et le troisième niveau de lecture 206. Les différentes régions 5 entre les niveaux de lecture peuvent ici être désignées comme des « bacs ». Dans divers aspects, une valeur de confiance peut être calculée pour chaque bac en se basant sur le nombre de cellules de mémoire se trouvant dans le bac en comparaison d'un ou de plusieurs autres bacs. Une valeur de confiance peut être déterminée pour un bac en se basant sur une zone 208 sous la courbe de distribution du bac. La valeur de confiance est alors attribuée à 10 chaque cellule de mémoire dans le bac correspondant. Comme cela sera décrit plus loin, les valeurs de confiance peuvent inclure des logarithmes du rapport de vraisemblance. [0034] La Figure 2B représente un exemple de détermination de la probabilité pour une page MSB de la mémoire flash MLC en utilisant trois niveaux de lecture RL1, RL2 et RL3. Conformément à des aspects de la technologie selon l'invention, un niveau de lecture initial 15 202 peut être appliqué à une ou plusieurs cellules de mémoire pour obtenir une valeur LSB pour chaque cellule de mémoire. Dans l'exemple représenté, le niveau de lecture 202 est choisi comme lieu de transition d'état entre les distributions du bit codé 1 et du bit codé 0 afin de réduire au minimum un taux d'erreurs binaires (BER) attendu. Les niveaux de lecture choisis pour minimiser le BER sont appelés les niveaux de lecture optimaux. 20 [0035] En s'appuyant sur la valeur du LSB, un premier niveau de lecture 202 peut être déterminé pour la lecture d'un niveau de programme putatif pour le MSB. Une fois que le premier niveau de lecture 202 est déterminé et le niveau de programme lu, de multiples lectures suivantes peuvent être initiées pour déterminer une probabilité pour que la cellule de mémoire fût réellement programmée au niveau de programme putatif observé. Par 25 conséquent, chaque cellule peut être associée à une région de programme (bac) ao, ai, a29 a3, 124, a5, et ci6 correspondant au niveau auquel il a été constaté que la cellule conduit ou ne conduit pas lorsqu'une ou plusieurs des lectures suivantes sont appliquées. [0036] La Figure 3 représente un exemple de variations de tension de niveau de lecture optimal pour de multiples lignes de mots d'un bloc de mémoire, conformément à des aspects 30 de la technologie selon l'invention. Un bloc de mémoire peut comprendre jusqu'à 64 lignes de mots (ou plus). Les résultats obtenus en laboratoire ont indiqué que les niveaux de lecture optimaux (par exemple RL1, RL2 ou RL3) peuvent varier d'une ligne de mots à l'autre. 3033927 10 Dans l'exemple représenté, trois niveaux de lecture RL1, RL2 et RL3 sont réglés de manière optimale à leurs valeurs respectives pour lire les cellules de mémoire dans les courbes de distribution de densité de probabilité correspondant aux niveaux de données LO, Li, L2 et L3. Il s'avère cependant que les valeurs ou tensions de ces niveaux de lecture optimaux changent 5 en rapport avec chaque ligne de mots. Les niveaux de lecture optimaux pour la ligne de mots 1, par exemple, sont décalés vers la droite, en ayant une valeur légèrement accrue, alors que la ligne de mots 64 est décalée vers la gauche en ayant une valeur légèrement réduite. Comme cela sera décrit plus loin, chacun de ces décalages de tension pour chaque niveau de lecture peut être représenté sous la forme de valeurs de polarisation, ou de décalages du 10 niveau de lecture, par rapport à une tension de niveau de lecture primaire correspondante. [0037] La Figure 4 représente un exemple de table de décomptes d'erreurs 400 pour un exemple de plage de valeurs de décalage de niveau de lecture pour de multiples lignes de mots, conformément à divers aspects de la technologie selon l'invention. Comme expliqué ci-dessus, le niveau de lecture optimal utilisé pour lire un état particulier de la cellule de 15 mémoire peut varier d'une ligne de mots à l'autre, illustrant le fait que chaque ligne de mots peut posséder un ensemble unique de caractéristiques par rapport à chaque autre. Les variations des niveaux de lecture optimaux entre les lignes de mots peuvent être représentées en modifiant un niveau de lecture primaire d'une polarisation particulière, également appelé ici « décalage de niveau de lecture ». Le décalage de niveau de lecture peut être différent 20 pour chaque ligne de mots et/ou chaque bloc et/ou chaque puce de mémoire. À cet égard, de multiples décalages peuvent être appliqués : un pour chaque ligne de mots, un pour chaque bloc et/ou un pour chaque puce de mémoire. 100381 Chaque ligne de la table 400 est représentative d'une ligne de mots différente, alors que chaque colonne est représentative d'une valeur de décalage de niveau de lecture 25 différente. Chaque ligne de mots d'un bloc peut être représentée dans la table. Les décomptes d'erreurs énumérés dans l'exemple de table sont les décomptes d'erreurs produites lors de la lecture de la ligne de mots correspondante à la valeur de décalage correspondante. Les décomptes d'erreurs peuvent être indexés par ligne de mots et par valeur de décalage de niveau de lecture. Les valeurs de décalage de niveau de lecture sont représentées en « tops » 30 par rapport à une tension de niveau de lecture primaire. Dans certains modes de réalisation, un top sur deux peut être l'équivalent de 25 mV. De plus, il peut exister une table différente pour chaque tension de niveau de lecture. La table illustrée peut être pour RL1, par exemple, 3033927 11 alors qu'une table différente fournit les décomptes d'erreurs pour la lecture des mêmes lignes de mots avec RL2 et une table différente fournit les décomptes d'erreurs pour la lecture des mêmes lignes de mots avec RL3. [0039] La table peut être générée initialement en se basant sur des données obtenues en 5 laboratoire. Dans au moins un exemple, la table de décomptes d'erreurs peut être générée en se basant sur la lecture des lignes de mots d'un bloc de mémoire, chaque ligne de mots étant lue de multiple en utilisant une tension de niveau de lecture choisie modifiée pour chaque lecture par une tension de décalage différente. Par conséquent, un décompte d'erreurs est produit pour chaque tension de décalage et la table est générée pour l'indexage des 10 décomptes d'erreurs par ligne de mots et tensions de décalage respectives. [0040] Les Figures 5A à 5C représentent des graphiques d'exemples de décalages de niveau de lecture optimal pour des blocs de mémoire soumis à des cycles, conformément à divers aspects de la technologie selon l'invention. Comme expliqué ci-dessus, les cellules de mémoire peuvent connaître une certaine dégradation lorsqu'elles sont soumises à des cycles. 15 Par conséquent, les distributions LO, Li, L2 et/ou L3 peuvent dériver ou s'écarter des valeurs attendues et de nouveaux niveaux de lecture optimaux sont nécessaires pour lire les cellules à leurs nouvelles valeurs avec des erreurs minimales. Dans les exemples illustrés, les valeurs de décalage de niveau de lecture optimal sont tracées pour les 128 lignes de mots (0-127) d'un bloc de mémoire pour les niveaux de lecture primaires RL1, RL2 et RL3. La Figure 5A 20 est représentative d'exemples de lecture de pages MSB en utilisant RL1, et représente comment les valeurs de décalage de niveau de lecture peuvent varier entre 18 et 12 tops avant de se stabiliser à 14 tops pour les numéros de ligne de mots les plus élevés. La Figure 5B est représentative des exemples de lecture de pages LSB en utilisant RL2. La Figure 5B représente comment un décalage plus grand (c'est-à-dire 18 tops) est nécessaire aux numéros 25 de ligne de mots les plus bas (par exemple au début d'un bloc) qu'aux numéros de ligne de mots les plus élevés (par exemple à la fin d'un bloc). Le décalage de niveau de lecture à appliquer à RL2 est généralement considéré comme ayant une valeur décroissante, de 18 tops pour la ligne de mots 0, à 10 tops pour la ligne de mots 120, et finalement à 4 tops à la ligne de mots 127. La Figure 5C suit un modèle similaire. 30 [0041] La Figure 6 représente un synoptique d'un exemple d'algorithme destiné à générer des groupes de lignes de mots décalés, conformément à divers aspects de la technologie selon l'invention. L'algorithme 602 peut être mis en oeuvre sous la forme d'un 3033927 12 programme informatique (par exemple des instructions exécutées sur un dispositif de traitement informatique), d'un matériel électronique et de combinaisons des deux. Le stockage des valeurs de décalage nécessaires à la fourniture des niveaux de lecture optimaux pour la lecture des cellules de mémoire dans chacune des 128 lignes de mots, par exemple, en 5 utilisant trois (ou plus) niveaux de lecture différents occuperait un espace mémoire important. Par conséquent, la technologie selon l'invention met en oeuvre un algorithme de profilage de niveau de lecture 602 qui réduit la quantité de valeurs de décalage (ou de niveaux de lecture) qu'il est nécessaire de stocker tout en produisant une réduction du taux d'erreurs binaires proche de l'optimal dans les opérations de lecture de la mémoire. Les algorithmes de 10 profilage du niveau de lecture 602 réduisent le nombre de décalages de niveau de lecture stockés sans pour autant dégrader les taux d'erreurs binaires produits par les opérations de lecture correspondantes qui pourraient augmenter les défauts de décodage matériel ou logiciel. [0042] L'exemple d'algorithme de regroupement de niveau de lecture 602 utilise comme 15 entrées les conditions aux limites initiales, par exemple sous la forme d'une division initiale de lignes de mots pour un bloc et la table de décomptes d'erreurs 400 décrite précédemment. Chaque division de lignes de mots définie par les conditions aux limites forme un ensemble de groupes de lignes de mots candidats (entrée), chacun constitué d'adresses de ligne de mots consécutives. Les conditions aux limites initiales peuvent désigner, par exemple, quatre 20 groupes candidats, avec le groupe 1 en tant que lignes de mots 0-31, le groupe 2 en tant que lignes de mots 32-63, le groupe 3 en tant que lignes de mots 64-95 et le groupe 4 en tant que lignes de mots 96-127. Ces groupes candidats définissent les conditions aux limites initiales qu'utilisera l'algorithme 600 pour analyser les taux d'erreurs et pour finalement générer les conditions aux limites optimales pour former des groupes de lignes de mots décalés optimaux 25 (sortie) à utiliser dans les opérations de lecture durant le fonctionnement d'un dispositif de stockage. [0043] L'exemple d'algorithme 602 utilise la table 400 et les conditions aux limites initiales et délivre en sortie des groupes de lignes de mots décalés optimaux. Chaque groupe de lignes de mots décalé optimal délivré en sortie par l'algorithme 602 contient une portion 30 consécutive du nombre total de lignes de mots utilisée en entrée comme partie des conditions initiales (par exemple 128 lignes de mots). Les limites des groupes de lignes de mots décalés optimaux délivrées en sortie par l'algorithme 602 peuvent être identiques ou non aux 3033927 13 conditions aux limites initiales, et dans de nombreux cas elles seront différentes. Chaque groupe de lignes de mots décalé optimal contient des lignes de mots groupées consécutivement appariées avec une tension de décalage optimale correspondante pour le groupe. Les groupes peuvent être triés consécutivement pour ce qui concerne leurs lignes de 5 mots. [0044] Chaque appariement de chaque groupe de lignes de mots décalé optimal à chaque tension de décalage optimale respective est sélectionné automatiquement par l'algorithme pour un décompte d'erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots décalés et les groupes en tant qu'ensemble. 10 L'ensemble de groupes de lignes de mots décalés optimaux généré par l'algorithme 400 est généralement généré, au moins en partie, en se basant sur l'indexage itératif de la table 400 en s'appuyant sur l'emplacement de la ligne de mots et les valeurs de décalage pour chaque ensemble initial de groupes de lignes de mots afin de déterminer un meilleur décompte d'erreurs ajusté, ou normalisé, pour chaque groupe en sortie. Par conséquent, l'algorithme de 15 regroupement de niveau de lecture 602 délivre en sortie des groupes de lignes de mots décalés optimaux (par exemple sous la forme de limites pour chaque groupe) et les décalages de niveau de lecture optimaux (ou niveaux de lecture) pour chaque groupe offrant la plus faible dégradation du taux d'erreurs binaires, par exemple en se basant sur la table d'entrée 400. 20 [0045] La Figure 7 représente un schéma de procédé d'un premier exemple de processus 700 de génération de groupes de lignes de mots décalés, conformément à divers aspects de la technologie selon l'invention. À des fins d'explication, les divers blocs de l'exemple de processus 700 sont écrits ici en se référant aux composants et/ou processus décrits ici. Le ou les plusieurs blocs du processus 700 peuvent être mis en oeuvre, par exemple, par un ou 25 plusieurs processeurs comprenant, par exemple, le contrôleur 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en oeuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d'explication, les blocs de l'exemple de processus 700 sont décrits comme apparaissant en 30 série ou de manière linéaire. De multiples blocs de l'exemple de processus 700 peuvent cependant apparaître en parallèle. En outre, il n'est pas nécessaire que les blocs de l'exemple 3033927 14 de processus 700 soient exécutés dans l'ordre indiqué et/ou l'exécution d'un ou de plusieurs des blocs de l'exemple de processus 700 n'est pas nécessaire. [0046] Conformément à divers modes de réalisation, les blocs du processus 700 sont mis en oeuvre par l'algorithme de regroupement de niveau de lecture 602. À cet égard, les blocs 5 du processus 700, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé dans un dispositif à mémoire. Les blocs du processus 700 peuvent, par exemple, être exécutés pour générer des groupes de lignes de mots décalés optimaux pour RL1, RL2 et RL3 en se basant sur la table 400 et les conditions aux limites d'entrée. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant des 10 appariements de valeur de décalage différents peuvent être générés pour chaque -niveau de lecture différent. De plus, les blocs du processus 700 peuvent être exécutés pour générer des groupes différents pour des blocs et/ou puces différents. Le processus 700 peut être mis en oeuvre durant la configuration d'un dispositif de stockage, avant ou pendant son utilisation. [0047] En général, pour chaque condition aux limites initiale, le processus 700 exécute un 15 certain nombre d'étapes itératives afin de sélectionner automatiquement les limites de groupe optimales et les décalages de niveau de lecture optimal correspondants pour chaque groupe qui présente le plus faible accroissement du taux d'erreurs binaires global en comparaison du taux d'erreurs binaires optimal, tel qu'il est déterminé par une table d'entrée 400 correspondante. Pour un nombre donné de groupes candidats définis par les conditions aux 20 limites, l'algorithme 600 peut sélectionner deux groupes consécutifs k et k+1 et, en commençant par le premier élément du premier groupe jusqu'au dernier élément du deuxième groupe, considérer toutes les paires de divisions consécutives possibles. [0048] Dans l'exemple illustré, les lignes de mots d'un bloc sont divisées en groupes candidats (702). Dans un exemple dans lequel 128 lignes de mots sont utilisées, le bloc peut 25 être divisé en quatre groupes candidats, avec le groupe 1 en tant que lignes de mots 0-15, le groupe 2 en tant que lignes de mots 16-31, le groupe 3 en tant que lignes de mots 32-63, le groupe 4 en tant que lignes de mots 64-79, etc. Comme décrit précédemment, la division des groupes peut être représentée sous forme de limites des groupes. Le processus 600 sélectionne alors un ensemble de groupes candidats consécutifs (704). Les groupes 1 et 2 30 peuvent être sélectionnés, par exemple, formant ainsi un ensemble de lignes de mots entre 0 et 31. Des permutations de multiples sous-groupes consécutifs de l'ensemble sont envisagées (706). Des permutations de deux sous-groupes sont envisagées dans divers exemples ici, un 3033927 15 plus grand nombre de sous-groupes peut cependant être envisagé. Du fait que, dans l'exemple indiqué, les sous-groupes sont consécutifs et les lignes de mots à l'intérieur du groupe sont consécutives, le nombre maximum de permutations pour n lignes de mots sera n1 permutations. Les permutations d'un exemple d'ensemble de lignes de mots couvrant 0-31 5 peuvent inclure { [0, 1-31], [0-1, 2-31], [0-3, 4-31] . . . [0-30, 31] 1. [0049] L'exemple de processus 700 est représenté sous la forme d'un algorithme min- moyenne. Cela veut dire que pour chaque permutation possible, le décompte d'erreurs moyen est calculé en se basant sur une table d'erreurs correspondante et ensuite les sous-groupes au sein des permutations sont comparés pour sélectionner ceux ayant le plus petit 10 décompte d'erreurs. À cet égard, les décomptes d'erreurs pour chaque sous-groupe sont calculés en utilisant tous les décalages de niveau de lecture disponibles en se basant sur la table de décomptes d'erreurs 400, et les niveaux de lecture qui offrent les plus petits décomptes d'erreurs pour chaque permutation sont déterminés. Dans l'exemple représenté, le processus 700 commence à (ou sélectionne) une première permutation (708) et ensuite, pour 15 chaque sous-groupe au sein de la permutation (710), recherche le décompte d'erreurs total correspondant au sous-groupe pour chaque valeur de décalage représentée dans la table d'entrée 400 (712). Le décompte d'erreurs total peut être trouvé, par exemple, en indexant la table 400 sur une première valeur de décalage représentée dans la table 400 et chaque ligne de mots au sein d'un premier (i=1) sous-groupe pour déterminer les décomptes d'erreurs pour 20 chaque ligne de mots au sein du sous-groupe, et ensuite en additionnant les décomptes d'erreurs déterminés. Les décomptes d'erreurs totaux pour les autres valeurs de décalage représentées par la table 400 sont déterminés de la même manière, et les sommes obtenues des décomptes d'erreurs sont comparées afin d'identifier la valeur de décalage ayant le plus petit décompte d'erreurs pour le sous-groupe. La valeur de décalage identifiée est ensuite 25 sélectionnée et associée au sous-groupe (714). Le même processus est appliqué au sous- groupe suivant de la permutation. [0050] Le processus précédent est répété (716), en redémarrant au bloc 708, jusqu'à ce qu'une valeur de décalage soit associée à chaque sous-groupe de chaque permutation, chaque sous-groupe étant également associé à un décompte d'erreurs total correspondant à la valeur 30 de décalage associée. Le Tableau 1, ci-dessous, contient des exemples d'associations de décalage pour trois permutations de deux sous-groupes. 3033927 16 Permutation Décalage du premier sous- groupe Décalage du deuxième sous- groupe TEC du premier sous- groupe TEC du deuxième sous-groupe 0, 1-31 16 14 28640 16254321 0-1, 2-31 18 16 63012 16222110 0-2, 3-31 18 18 104832 ... 0-3, 4-31 18 18 ... ... Tableau 1 Exemple d'associations de décalage pour les permutations sélectionnées [0051] Une fois que les valeurs de décalage sont associées à chaque sous-groupe de chaque permutation, le processus 700 sélectionne une permutation ayant le plus petit 5 décompte d'erreurs total (718). Le plus petit décompte d'erreurs total peut être le décompte d'erreurs total des deux sous-groupes au sein de la permutation, ou encore du premier ou du deuxième sous-groupe, suivant la mise en oeuvre de l'algorithme utilisé. Dans divers exemples, le décompte d'erreurs total cumulé entre toutes les lignes de mots (des deux sous-groupes) est utilisé pour comparer les permutations. Le processus 700 se poursuit en 10 sélectionnant le premier sous-groupe et son décalage correspondant de la permutation sélectionnée en tant que paire optimale (720). [0052] Le processus 700 continue en sélectionnant un troisième groupe candidat et répète les étapes précédentes avec le deuxième sous-groupe et le troisième groupe candidat. Dans l'exemple illustré, le processus 700 détermine s'il existe plus de groupes d'entrée candidats 15 (722). S'il existe un prochain groupe candidat (par exemple les lignes de mots 32-47 dans l'exemple ci-dessus), le deuxième sous-groupe de la permutation identifiée au bloc 718 est alors sélectionné et remis en facteur dans l'algorithme avec le groupe candidat suivant (724). Dans l'exemple ci-dessus, site premier sous-groupe contient les limites de ligne de mots de 0-22 générées en se basant sur des premier et deuxième groupes candidats (possédant les 20 limites de ligne de mots 0-31), alors le deuxième sous-groupe possédant les lignes de mots 23-31 sera utilisé dans le prochain ensemble de groupes candidats conjointement avec la prochaine entrée de groupe candidat suivant dans l'algorithme. Par conséquent, dans l'exemple ci-dessus, l'ensemble de groupes candidats suivant inclurait un groupe candidat possédant les lignes de mots 23-31 et un groupe candidat possédant les lignes de mots 32-47. 25 Si un groupe candidat suivant n'existe pas, alors l'algorithme peut sélectionner le deuxième 3033927 17 sous-groupe et son décalage correspondant de la permutation identifiée dans le bloc 718 en tant que paire optimale finale (726). [0053] Le processus 700 peut être répété jusqu'à ce que les limites de groupe obtenues ne changent plus d'une itération à la suivante, ou jusqu'à avoir atteint un certain nombre 5 d'itérations. Chaque itération peut être exécutée en utilisant les mêmes conditions aux limites initiales, les conditions aux limites de sortie produites à la fin du bloc 726 ou des conditions aux limites nouvelles/différentes. L'aléation peut également être introduite dans le processus 700. Il est possible, par exemple, de générer des permutations qui contiennent des sous-groupes qui ne se trouvent pas dans un quelconque ordre particulier. Un premier sous-groupe 10 peut inclure les lignes de mots 13-31 et un deuxième sous-groupe peut inclure les lignes de mots 0-12. [0054] Bien que l'exemple de processus 700 est représenté sous la forme d'un algorithme min-moyenne, d'autres types d'algorithmes peuvent être mis en oeuvre. Un algorithme minmax peut être mis en oeuvre, par exemple. Ainsi, le bloc 712 peut être modifié de manière à, 15 pour chaque sous-groupe au sein de la permutation (710), rechercher le décompte d'erreurs maximum de toutes les lignes de mots dans le sous-groupe pour chaque valeur de décalage (712). Le décompte d'erreurs maximum peut être trouvé, par exemple, en indexant la table 400 d'après une première valeur de décalage et en comparant le décompte d'erreurs indexé par la première valeur de décalage et chaque ligne de mots dans le sous-groupe (par exemple 20 les lignes de mots 0, 1, 2 et 3 dans le premier sous-groupe de permutation {[0-3], [4-31]}). Les décomptes d'erreurs maximums trouvés pour chacune des valeurs de décalage sont ensuite comparés et la valeur de décalage correspondant au minimum de tous les décomptes d'erreurs maximums est ensuite sélectionnée et associée au sous-groupe (714). Le même processus peut être appliqué au sous-groupe suivant de la permutation. Un avantage de la 25 mise en oeuvre par le processus 700 d'un algorithme min-max inclut le maintien des erreurs au-dessous d'une capacité maximale du codage de correction d'erreur utilisé par le dispositif de stockage pour corriger les erreurs. [0055] Dans certains aspects, la technologie selon l'invention peut inclure la mise en oeuvre de blocs ou d'étapes différents de ceux/celles développés ci-dessus en rapport avec 30 l'exemple de processus 700. En utilisant les conditions aux limites initiales et la table 400, le processus 700 délivre en sortie des limites pour des groupes de lignes de mots décalés optimaux, y compris les niveaux de lecture optimaux pour chaque groupe offrant, par 3033927 18 exemple, le moins de dégradation du taux d'erreurs binaires pour chaque ligne de mots dans chaque groupe par rapport aux valeurs optimales dans la table 400. [0056] La Figure 8 représente un schéma de procédé d'un deuxième exemple de processus 800 de génération de groupes de lignes de mots décalés, conformément à divers 5 aspects de la technologie selon l'invention. À des fins d'explication, les divers blocs de l'exemple de processus 800 sont décrits en se référant aux composants et/ou processus décrits ici. Le ou les plusieurs blocs du processus 800 peuvent être mis en oeuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur de mémoire flash 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. 10 Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en oeuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d'explication, les blocs de l'exemple de processus 800 sont décrits comme apparaissant en série ou de manière linéaire. De multiples blocs de l'exemple de processus 800 peuvent cependant apparaître en parallèle. En outre, il n'est pas nécessaire que 15 les blocs de l'exemple de processus 800 soient exécutés dans l'ordre indiqué et/ou l'exécution d'un ou de plusieurs des blocs de l'exemple de processus 800 n'est pas nécessaire. [0057] Conformément à divers modes de réalisation, les blocs du processus 800 correspondent à, ou complètent, un ou plusieurs des blocs du processus 700. À cet égard, une 20 portion des blocs du processus 800 peut être exécutée par l'algorithme 600. Les blocs du processus 800, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé dans un dispositif à mémoire. Les blocs du processus 800 peuvent être exécutés, par exemple, en vue de générer des groupes de lignes de mots décalés optimaux pour RL1, RL2 et RL3 en se basant sur la table 400 et les conditions aux limites d'entrée. 25 Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant des appariements de valeur de décalage différents peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 800 peuvent être exécutés pour générer des groupes différents pour des blocs et/ou puces différents. Le processus 800 peut être mis en oeuvre durant la configuration d'un dispositif de stockage, avant ou pendant son utilisation. 30 [0058] Dans l'exemple illustré, un système conforme à la technologie selon l'invention fournit une tension de niveau de lecture suffisante pour lire une majorité de cellules de mémoire qui sont programmées à un niveau de programmation prédéterminé (802). Dans 3033927 19 certains modes de réalisation, chaque cellule de mémoire est une cellule de mémoire non-volatile multiniveau configurée pour être programmée à un niveau de programmation parmi quatre. Les premier et quatrième niveaux de programmation, par exemple, peuvent être associés à des premières valeurs de bit (par exemple représentatives d'un 0 ou d'un 1 binaire 5 d'un bit de poids fort) et les deuxième et troisième niveaux de programmation peuvent être associés aux deuxièmes valeurs de bit (par exemple représentatives d'un 0 ou d'un 1 binaire d'un bit de poids faible). Comme décrit précédemment, lorsqu'une tension est appliquée à une cellule de mémoire à un niveau de lecture particulier (par exemple RL1, RL2, RL3) correspondant au niveau de programme de la cellule, la cellule conduira en indiquant le 10 niveau de programme. [0059] Le système divise une pluralité de lignes de mots de mémoire en une pluralité de groupes de lignes de mots optimaux, chaque groupe de lignes de mots étant associé à un parmi une pluralité de décalages de niveau de lecture normalisés (804). Chacun des groupes de lignes de mots optimaux est constitué de lignes de mots triées dans l'ordre consécutif d'un 15 bloc de mémoire, les lignes de mots d'un premier des groupes précédant ici les lignes de mots d'un deuxième des groupes. À cet égard, chaque décalage est normalisé pour un meilleur taux d'erreurs résultant de l'utilisation du décalage avec la tension de niveau de lecture pour lire les lignes de mots d'un groupe de lignes de mots correspondant. Dans certains modes de réalisation, la division de la pluralité de lignes de mots en les groupes de lignes de mots 20 optimaux inclut la sélection des permutations respectives des sous-groupes de ligne de mots consécutifs à partir d'un ensemble prédéterminé de groupes candidats de lignes de mots en se basant sur un décompte d'erreurs total minimum associé aux permutations respectives (par exemple les blocs 702-706 de la Figure 7). Ainsi, chacun des sous-groupes de lignes de mots consécutifs est associé à un décalage de niveau de lecture correspondant à un minimum des 25 décomptes d'erreurs associés à une pluralité de décalages de niveau de lecture possibles. [0060] En se référant à la Figure 7 en tant qu'exemple, les premier et deuxième groupes de lignes de mots consécutifs peuvent être sélectionnés à partir de l'ensemble prédéterminé de groupes de lignes de mots candidats (704). Comme décrit précédemment, les groupes de lignes de mots candidats peuvent être basés sur les conditions aux limites initiales. Une 30 pluralité de permutations de sous-groupe peuvent ensuite être réalisées pour les premier et deuxième groupes consécutifs de lignes de mots (706) sélectionnés, chaque permutation de sous-groupe comprenant de multiples sous-groupes de lignes de mots consécutifs de lignes de 3033927 20 mots couvrant les premier et deuxième groupes de lignes de mots consécutifs. Pour chaque sous-groupe de lignes de mots d'une permutation de sous-groupe respective, un décalage de niveau de lecture respectif peut être sélectionné parmi les décalages de niveau de lecture possibles, de telle sorte que lorsqu'il est utilisé avec la tension de niveau de lecture pour lire 5 les lignes de mots dans le sous-groupe de lignes de mots, le décalage de niveau de lecture respectif génère le plus petit décompte d'erreurs pour le sous-groupe de lignes de mots (714). La pluralité de permutations de sous-groupe ayant un décompte d'erreurs total le plus bas pour les sous-groupes de lignes de mots consécutifs dans la permutation de sous-groupe peut être sélectionnée (718). Par conséquent, la pluralité de groupes de lignes de mots peut être 10 basée au moins en partie sur un ou plusieurs décalages de niveau de lecture correspondant à la pluralité de permutations de sous-groupe sélectionnée. [0061] Dans certains modes de réalisation, la division de la pluralité de lignes de mots en la pluralité de groupes de lignes de mots comprend la sélection des permutations respectives des sous-groupes de lignes de mots consécutifs depuis l'intérieur d'un ensemble prédéterminé 15 de groupes de lignes de mots candidats en se basant sur un minimum de décomptes d'erreurs maximums associés aux permutations respectives, chacun des sous-groupes de lignes de mots consécutifs étant associé à un décalage de niveau de lecture correspondant à un minimum des décomptes d'erreurs maximums associés à une pluralité de décalages de niveau de lecture possibles. À titre d'exemple, pour chaque sous-groupe de lignes de mots, le système peut 20 déterminer un décompte d'erreurs maximum généré pour une ligne de mots dans le sous-groupe de lignes de mots lorsque chacun des décalages de niveau de lecture possibles est utilisé avec la tension de niveau de lecture pour lire les lignes de mots du sous-groupe de lignes de mots. Un décalage de niveau de lecture correspondant au minimum des nombres maximums déterminés peut ensuite être sélectionné à partir de la pluralité de décalages de 25 niveau de lecture possibles. Pour chaque permutation de sous-groupe, un décompte d'erreurs maximum des décalages de niveau de lecture sélectionnés correspondant aux sous-groupes de lignes de mots de la permutation de sous-groupe est déterminé. La permutation de sous-groupe ayant le minimum des décomptes d'erreurs maximums déterminés pour la permutation de sous-groupes est ensuite sélectionnée (voir par exemple 718). 30 [0062] Dans une ou plusieurs des mises en oeuvre ci-dessus, chaque sous-groupe de lignes de mots consécutif d'une permutation respective peut être généré en se basant sur un entrelacement de lignes de mots consécutives au sein de l'ensemble prédéterminé de groupes 3033927 21 de lignes de mots candidats. L'entrelacement peut être utilisé pour introduire l'aléation. Un premier sous-groupe de lignes de mots dans une permutation de sous-groupe peut contenir, par exemple, les lignes de mots 14-31, suivi par un deuxième sous-groupe qui contient les lignes de mots 0-13. Dans une permutation de sous-groupe qui contient trois sous-groupes, 5 un premier sous-groupe de lignes de mots de la permutation peut contenir les lignes de mots 4-6, un deuxième sous-groupe de lignes de mots de la permutation peut contenir les lignes de mots 0-3 et un troisième sous-groupe de lignes de mots de la permutation peut contenir les lignes de mots 7-32. [0063] De plus, chaque décalage de niveau de lecture normalisé respectif peut être généré 10 (par exemple en utilisant l'un quelconque des modes de réalisation ci-dessus) en se basant sur l'indexage d'une table des taux d'erreurs, chaque taux d'erreurs dans la table étant indexé sur la base d'un décalage de niveau de lecture respectif et d'une ligne de mots respective. Ainsi, la table peut être indexée par une pluralité de lignes de mots consécutives afin d'identifier les décalages de niveau de lecture correspondants ayant un taux d'erreurs le plus faible pour 15 chaque ligne de mots consécutive et de déterminer un groupe de lignes de mots consécutives qui, lorsqu'il est associé à un décalage identifié unique, présente un taux d'erreurs minimum possible pour le groupe de lignes de mots consécutives. [0064] Une fois que les groupes de lignes de mots ont été générés, la pluralité de décalages de niveau de lecture normalisés sont associés à leurs groupes de lignes de mots 20 optimaux respectifs et stocks pour être utilisés dans la lecture des cellules de mémoire pendant le fonctionnement du dispositif de stockage (806). À cet égard, le processus précédent sélectionne automatiquement les limites de groupe optimales et les décalages de niveau de lecture optimaux correspondants pour chaque groupe qui présente la plus petite augmentation du taux d'erreurs binaires global en comparaison du taux d'erreurs binaires 25 optimal. [0065] Un grand nombre des caractéristiques décrites ci-dessus des exemples de processus 700 et 800 ainsi que les caractéristiques et applications apparentées peuvent être mises en oeuvre sous la forme de processus logiciels qui sont spécifiés sous la forme d'un ensemble d'instructions enregistré sur un support de stockage lisible par ordinateur 30 (également appelé support lisible par ordinateur). Lorsque ces instructions sont exécutées par une ou plusieurs unités de traitement (par exemple un ou plusieurs processeurs, noyaux de processeurs ou autres unités de traitement), elles amènent les unités de traitement à réaliser 3033927 22 les actions indiquées dans les instructions. Des exemples de supports lisibles par ordinateur incluent, sans exhaustivité, les CD-ROM, les disques à mémoire flash, les mémoires RAM, les disques durs, les EPROM, etc. Les supports lisibles par ordinateur n'incluent pas les ondes porteuses ni les signaux électroniques transmis sans fil ou sur des connexions filaires. 5 [0066] Dans les applications de contrôle de parité à faible densité (LDPC), un logarithme du rapport de vraisemblance (LLR) peut inclure le logarithme d'un rapport entre la probabilité pour qu'un bit soit à « 0 » ou à « 1». Le LLR peut couvrir une plage prédéterminée. Dans certains modes de réalisation par exemple, un LLR peut couvrir la plage de -255 à +255. Un LLR peut généralement indiquer qu'un signal lu de la cellule de 10 mémoire est vraisemblablement un bit à 0, et un LLR négatif peut généralement indiquer qu'un signal lu de la cellule de mémoire est vraisemblablement un bit à 1. Le LLR peut être associé à la valeur du bit lue auprès de la cellule de mémoire. Un bit associé à un LLR égal à 5 peut être un zéro binaire avec plus de vraisemblance qu'un bit auquel est attribué un LLR égal à 1. Un bit auquel est attribué un LLR égal à 0 peut être un 0 ou un 1 binaire avec la 15 même vraisemblance. [0067] Si, à un certain niveau de lecture, un bit à 0 est lu depuis une cellule de mémoire, un LLR positif peut alors être attribué. Si un bit à 1 est lu, alors une valeur négative peut être attribuée. Dans une cellule de mémoire multiniveau comprenant deux bits, il existe de multiples nivaux potentiels de distribution de cellule (par exemple LO, Li, L2 et L3). La 20 distinction d'un 1 binaire et d'un 0 binaire dans une lecture d'un MSB peut nécessiter des déterminations parmi de multiples limites de niveau de lecture. Dans l'exemple de la Figure 1, la distinction entre 0 et un 1 nécessite de déterminer si la cellule conduit à l'intérieur des deux distributions du centre Li et L2 (par exemple pour un Ox binaire), ou dans les distributions extrêmes LO et L3 (par exemple pour un lx binaire). Par conséquent, de 25 multiples niveaux de lecture peuvent intervenir (par exemple RLO et RL2) pour effectuer cette détermination. [0068] La Figure 9 représente un exemple de canal de mémoire flash 900 modélisé sous la forme d'un canal sans mémoire discret (DMC) avec des entrées binaires et des sorties K-aires, conformément à des aspects de la technologie selon l'invention. Dans cet exemple, les 30 sorties K-aires correspondent aux K régions de programme de cellule (bacs) qui peuvent être identifiées avec de multiples lectures. Le modèle du canal 900 fournit une définition pour un 3033927 23 logarithme du rapport de vraisemblance (LLR). En utilisant ce modèle, le LLR peut être défini comme suit : (1) LLR, = log p(s, = 01 ri) log = 0)p(s, = 0)1 p(ri) p(s,.=11r,) s =1)p(s1 =1)1 p(r1) [0069] Dans certains modes de réalisation, il peut être supposé que toutes les entrées ont 5 la même probabilité ; dans ce cas, l'expression de l'équation (1) devient : (2) LLR, = logp ,fr1s" = 0) p(ri I s, =1) [0070] En se référant à la Figure 2A, si K=2 pour un page LSB lue, les K régions sont désignées sous la forme r, E {oe0, }, le LLR pour la région ai de la Figure 2A étant donné par : 10 LLR(ai)= log s,0) il (3) = a1 si =1) [0071] En se référant à la Figure 2B, dans le cas où K=7 pour une page MSB lue, les régions peuvent être désignées sous la forme : (4) i e {ero, a2,a3, azt, as} [0072] Le niveau de lecture peut être réglé avant chacune des N lectures. Une table de 15 conversion peut être utilisée pour déterminer le nombre de niveaux de lecture et les valeurs des niveaux de lecture en se basant sur le nombre de bacs à utiliser lors de la détermination des valeurs de LLR pour les cellules de mémoire. Un dispositif à mémoire flash peut recevoir une instruction pour lire la page LSB ou MSB en utilisant les niveaux de lecture stockés. Comme décrit précédemment, pour créer les bacs, un premier niveau de lecture est 20 utilisé pour déterminer une valeur putative des cellules et ensuite de multiples lectures (par exemple une série de lecture) sont effectuées pour déterminer les valeurs LLR associées. Dans certains aspects, les niveaux de lecture sont déterminés en faisant varier le premier niveau de lecture d'un décalage prédéterminé (par exemple stocké) associé à un bac respectif Ce décalage peut être différent des décalages qui sont déterminés par la technologie selon 25 l'invention. 3033927 24 [0073] Les transitions dans les données lues sont analysées en vue de déterminer quelle région contient le seuil de tension (VT) de chaque cellule de mémoire. Par conséquent, le premier niveau de lecture peut être stocké (par exemple temporairement) et une région peut être déterminée en se basant sur une valeur binaire (par exemple positive ou négative) lue 5 depuis la cellule de mémoire, puis les différences entre le premier niveau de lecture et les niveaux de lecture suivants initiés par un contrôleur de mémoire. Les niveaux de lecture peuvent ou non être modifiés dans un ordre prédéterminé. Si les niveaux de lecture sont modifiés dans un ordre prescrit, seul le niveau de lecture précédent peut être stocké et la région de programme de la cellule déterminée à chaque lecture suivante. Si toutes les 10 lectures sont effectuées (par exemple immédiatement), une table de conversion peut être utilisée pour déterminer les bacs en se basant sur les valeurs binaires reçues. Une fois déterminé, un numéro de bac peut être déterminé pour chaque région de programme de la cellule. Le LLR attribué au bac peut être appliqué à toutes les cellules se trouvant à l'intérieur du bac. Pour chaque cellule de mémoire, le numéro de bac est mis en 15 correspondance avec une valeur de LLR dans une table de conversion. [0074] Conformément à ce qui précède, pour un niveau de lecture primaire (par exemple RL1, RL2 ouRL3), le nombre de bacs sera égal au nombre de lectures plus un. Par conséquent, une table générée pour les valeurs de LLR peut comprendre 8 colonnes correspondant aux 8 bacs. Dans cet exemple, une page MSB peut comprendre deux lignes, 20 comme indiqué dans le Tableau 2: 0 1 2 3 4 5 6 7 RL1 -255 -114 -133 -116 -78 -38 5 117 RL3 174 154 127 91 50 7 -38 -133 Tableau 2 [0075] L'emplacement du niveau de lecture primaire par rapport au Tableau 2 se trouve entre le bac 3 et le bac 4. Une table générée pour la page LSB peut ne nécessiter qu'une seule ligne, comme indiqué dans le Tableau 3 : 0 1 2 3 4 5 6 7 RL2 -255 -199 -163 -119 -70 -23 24 110 25 Tableau 3 3033927 25 [0076] Comme décrit précédemment, des décalages (ou valeurs de polarisation) peuvent être mis en oeuvre en association avec les niveaux de lecture primaires (par exemple RL1, RL2, RL3) afin d'obtenir un niveau de lecture optimal ayant un faible taux d'erreurs binaires. Les valeurs de décalage peuvent être définies globalement, par exemple pour une puce ou un 5 bloc, ou individuellement pour chaque ligne de mots. Chaque ligne de mots peut posséder des caractéristiques différentes et/ou uniques qui amènent chaque ligne de mots à présenter plus ou moins d'erreurs durant les opérations de lecture. Par conséquent, en vue d'obtenir le meilleur taux d'erreurs - le taux d'erreurs minimum - le niveau de lecture optimal doit être déterminé. Dans certains aspects, les niveaux de lecture optimaux pour une ligne de mots 10 peuvent être déterminés par des données obtenues en laboratoire. Dans divers exemples décrits ici, la ligne de mots peut être lue à des décalages différents et le décompte d'erreurs pour chaque lecture placé dans une table en vue d'une comparaison ultérieure. Bien que ces données obtenues en laboratoire puissent être utiles pour une portion du cycle de vie de la mémoire, les caractéristiques des cellules de mémoire changent au cours du temps et les 15 données ne seront peut-être plus très utiles pour obtenir le meilleur taux d'erreurs après une période donnée du cycle de vie des cellules de mémoire. [0077] Différentes tables 400, par exemple, peuvent être stockées dans la mémoire pour chaque niveau de lecture (par exemple RL1, RL2 ou RL3) et pour de multiples périodes différentes dans la durée de vue attendue de la mémoire, de sorte qu'un dispositif peut obtenir 20 un taux d'erreurs binaires quasi-optimal pendant toute sa durée de vie attendue. Les données obtenues en laboratoire peuvent cependant ne pas s'appliquer à chaque puce, à chaque bloc ou même à chaque forme de dégradation qui peut être subie par les lignes de mots ou cellules de mémoire individuelles pendant la durée de vie du dispositif. Par conséquent, la technologie selon l'invention fournit un mécanisme de calibrage dynamique (par exemple au 25 moment de l'exécution) des niveaux de lecture en estimant des niveaux de lecture et/ou décalages optimaux pendant le fonctionnement du dispositif à mémoire. [0078] Les Figures 10A à 10C représentent un exemple de graphes d'interpolation linéaire pour le calibrage d'exemples de niveaux de lecture et/ou de décalages de niveau de lecture, conformément à divers aspects de la technologie selon l'invention. Les graphes sont 30 représentatifs de la manière dont un algorithme de la technologie selon l'invention détermine un nouveau décalage calibré pour les opérations de lecture. En se référant aux tableaux 2 et 3 ci-dessus, chaque graphe trace une valeur de LLR calculée par rapport aux valeurs de 3033927 26 décalage prédéterminées associées à chaque bac. Par conséquent, l'axe X représente une plage de valeurs de décalage négatives et positives par rapport à un décalage nul non calibré 902. Dans l'exemple représenté, le décalage non calibré 1002 (marqué «0 ») correspond au niveau de lecture « central » correspondant (par exemple RL1, RL2 ou RL3) utilisé pour 5 déterminer initialement le niveau programmé d'une cellule de mémoire, avant qu'elle soit relue par les niveaux de lecture « supplémentaires » utilisés pour générer les bacs. [0079] Chacun des bacs couvre 6 tops sur l'axe X, conformément à un montant fixe. Dans l'exemple représenté, les décalages sont espacés uniformément de 6 tops. Les décalages 0 à +6 sur l'axe X correspondent au bac 4, les décalages +7 à +12 correspondent au 10 bac 5, les décalages +13 à +18 correspondent au bac 6 et les décalages +19 à +24 correspondent au bac 7. De même, les décalages 0 à -6 sur l'axe X correspondent au bac 3, les décalages -7 à -12 correspondent au bac 2, les décalages -13 à -18 correspondent au bac 2 et les décalages -19 à -24 correspondent au bac 0. Les valeurs de LLR correspondantes placées dans les bacs sont respectivement tracées au niveau des valeurs de décalage -21, -15, 15 -9, -3, +3, +9, +15 et +21. Ces valeurs de décalage sont uniquement fournies à titre d'exemple et d'autres valeurs de décalage peuvent être utilisées, conformément au mode de réalisation particulier de la mémoire. [0080] Une fois que les cellules de mémoire d'une ligne de mots ou d'un bloc sont lues et les LLR déterminés, la technologie selon l'invention attribue les LLR aux bacs pour chacun 20 des RL1, RL2 et RL3 dans une table, comme indiqué dans les Tableaux 2 et 3 ci-dessus. L'interpolation linéaire des valeurs de LLR entre les bacs correspondants (par exemple 0-7) est ensuite utilisée pour déterminer un point de passage par zéro (1004) des valeurs de LLR représentées. À cet égard, les valeurs de LLR dans une ligne de la table sont balayées afin de déterminer où se trouve le point de passage par zéro. En considération de la Figure 10A et du 25 Tableau 1 ci-dessus, le point de passage par zéro (904) pour RL1 se trouve entre le bac 5 et le bac 6, qui possèdent respectivement les valeurs de LLR -38 et 5. Une valeur de décalage (1006) sur l'axe X correspondant au point de passage par zéro (1004) est sélectionnée en tant que valeur de décalage calibrée pour le niveau de lecture correspondant (par exemple RL1, RL2 ou RL3). Dans la Figure 10A, la valeur de décalage calibrée est déterminée être 30 approximativement égale à +14 tops (par exemple +175mV, chaque top étant égal à 25mV). Dans la Figure 10B, la valeur de décalage calibrée est déterminée être approximativement 3033927 27 égale à +12 tops. Dans la Figure 10C, la valeur de décalage calibrée est déterminée être approximativement égale à +10 tops. [0081] Une valeur de décalage calibrée peut être déterminée pour chaque niveau de lecture (par exemple RL1, RL2 ou RL3), comme indiqué ci-dessus. Dans certains modes de 5 réalisation, les valeurs de décalage calibrées peuvent remplacer les valeurs de décalage existantes pour des lignes de mots individuelles ou être utilisées pour les ajuster, ou globalement pour un bloc ou une ou plusieurs puces. Dans certains modes de réalisation, la tension de décalage calibrée remplace un décalage de niveau de lecture précédemment associé à un groupe de lignes de mots décalé déterminé par les processus 700 et/ou 800, par 10 exemple. Dans certains aspects, le décalage de niveau de lecture associé précédemment sera ajusté par la tension calibrée. [0082] Dans de tels cas, il n'est pas nécessaire de déterminer les tensions de décalage calibrées en se basant sur les valeurs de LLR pour toutes les cellules de mémoire d'un bloc, d'une puce ou d'un groupe, mais elles peuvent plutôt être déterminées en se basant sur les 15 valeurs de LLR attribuées aux bacs en s'appuyant sur une portée d'une ou de plusieurs lignes de mots sélectionnées, portions d'une ligne de mots, un ou plusieurs mots de code et similaire. Dans certains modes de réalisation, les valeurs de décalage calibrées peuvent être stockées en plus des décalages déterminés pour un groupe de lignes de mots et additionnées au moment d'une opération de lecture au décalage attribué au groupe de lignes de mots et à 20 tout décalage global éventuellement disponible. [0083] Les niveaux de lecture peuvent être calibrés en utilisant la procédure ci-dessus à des points spécifiques au cours de la durée de vie attendue d'un dispositif à mémoire flash. La procédure de calibrage peut être exécutée, par exemple, lorsqu'un bloc a été soumis à un nombre prédéterminé de cycles de programmation/effacement. La procédure de calibrage 25 peut être exécutée dans un « mode héroïque », par exemple en réponse à un décompte d'erreurs produit en association avec une opération de lecture satisfaisant à un seuil prédéterminé de décompte d'erreurs. Le seuil prédéterminé peut être défini en considération d'un ou de plusieurs mots de code, lignes de mots, blocs ou une combinaison de ceux-ci, pour une opération de lecture unique ou pour de multiples opérations de lecture au cours d'une 30 période. Dans certains modes de réalisation, le seuil prédéterminé des erreurs peut inclure l'échec de la lecture ou du décodage d'une ou de plusieurs cellules de mémoire qui font 3033927 28 l'objet de l'opération de lecture. À titre d'exemple, le décompte d'erreurs produites peut être supérieur à ce que peut gérer le schéma d'ECC associé au dispositif à mémoire flash. [0084] En réponse à l'identification d'une ligne de mots associée à un décompte d'erreurs excessivement élevé (satisfaisant au seuil), un contrôleur de mémoire flash ou un composant 5 de celui-ci qui met en oeuvre la technologie selon l'invention peut lire les cellules de mémoire dans une ou plusieurs lignes de mots cousines de la ligne de mots identifiée afin de générer les valeurs de LLR pour les bacs respectifs, et déterminer une nouvelle valeur de décalage calibrée pour la lecture des lignes de mots en utilisant le processus d'interpolation linéaire du LLR précédent. Si les lignes de mots voisines peuvent être lues et que leur décodage réussit, 10 la nouvelle valeur de décalage calibrée peut alors être utilisée dans une tentative de récupération d'une lecture des cellules de mémoire dans la ligne de mots identifiée. La ligne de mots identifiée peut alors être relue en utilisant le niveau de lecture réglé à (par exemple ajusté par) la valeur de décalage calibrée. [0085] De même, un mot de code (par exemple couvrant des lignes de mots ou une 15 portion d'une ligne de mots) soumis à une opération de lecture peut être identifié comme possédant un taux d'erreurs qui satisfait à un seuil d'erreur, par exemple si toutes les tentatives de décodage du mot de code peuvent avoir échoué. En réponse à l'identification du mot de code, le contrôleur de mémoire flash ou son composant qui met en oeuvre la technologie selon l'invention peut lire les cellules de mémoire dans un ou plusieurs autres 20 mots de code voisins du mode de code identifié afin de générer les valeurs de LLR et déterminer la nouvelle valeur de décalage calibrée en utilisant le processus d'interpolation du LLR précédent. Si les mots de code voisins peuvent être lus et que leur décodage réussit, la nouvelle valeur de décalage calibrée peut alors être utilisée dans une tentative de récupération du mot de code ayant échoué. Le mode de code identifié peut ensuite être relu en utilisant le 25 niveau de lecture réglé à (par exemple ajusté par) la valeur de décalage calibrée. 0 1 2 3 4 5 6 7 RL1 -255 -108 -71 -25 -22 -70 111 146 RL2 -255 -123 -74 -24 -26 -74 109 119 RL3 191 112 70 23 -26 -74 -117 -165 Tableau 4 3033927 29 100861 Le Tableau 4 ci-dessus représente les valeurs de LLR mises à jour pour chaque bac, après le calibrage des décalages de niveau de lecture respectifs correspondant aux valeurs de LLR des Tableaux 2 et 3. Comme permet de le constater le Tableau 4, le point de passage par zéro (1004) se trouve à présent entre les bacs 3 et 4 pour les trois niveaux de 5 lecture. Les Figures 10D à 10F représentent un exemple de graphes d'interpolation linéaire pour le recalibrage d'exemples de niveaux de lecture et/ou de décalages de niveau de lecture, conformément à divers aspects de la technologie selon l'invention. Après avoir effectué l'ajustement des niveaux de lecture conformément au processus décrit ci-dessus en rapport avec les Figures 10A à 10C, le ou les niveaux de lecture ajustés peuvent ensuite être 10 recalibrés afin de vérifier ou affiner le calibrage en utilisant le même processus. Les valeurs de LLR résultantes sont supposées converger éventuellement vers un décalage nul, comme indiqué par le Tableau 4 et les graphes des Figures 10D à 10F. 100871 Les Figures 11A et 11B représentent des exemples de modes d'optimisation du niveau de lecture, conformément à divers aspects de la technologie selon l'invention. 15 L'architecture de la mémoire flash peut être configurée de telle sorte qu'un sous-ensemble de données contient de multiples canaux 1102 de mémoire, chaque canal 1102 contenant par exemple un ou plusieurs blocs de mémoire 1104. Chaque bloc 1104 adressable par chaque canal 1102 est en outre adressable par les pages 1106. Dans les exemples représentés, chaque canal adresse un bloc de mémoire unique, chaque bloc comprenant 256 pages (par exemple 20 les pages 0-255). Comme décrit précédemment, une page 1106 peut être représentée physiquement par une ligne de mots, les termes page et ligne de mots peuvent de ce fait être utilisés de manière interchangeable. 100881 Dans certains modes de réalisation, comme illustré par la Figure 11A, une tension de décalage peut être associée globalement 1108 à tous les blocs et à toutes les pages 25 adressables par les canaux de mémoire. Dans ce mode de réalisation, la même valeur de décalage est un décalage « global » utilisé lors de la lecture des cellules de mémoire de toute page ou tout bloc associé à la pluralité de canaux de mémoire. Par conséquent, le décalage global peut être calibré en utilisant l'une quelconque des techniques décrites ici. Dans certains modes de réalisation, comme illustré par la Figure 11B, de multiples décalages 1110 30 peuvent être utilisés, chaque valeur de décalage étant associée à chaque page (ligne de mots), par exemple en associant chaque valeur de décalage à l'adresse d'une page. La même valeur de décalage associée à l'adresse d'une page peut être utilisée pour chaque page parmi tous les 3033927 30 canaux de mémoire. Ces « décalages de page » peuvent être relatifs aux décalages globaux en ce qu'un décalage global sera appliqué (et ajusté suivant le besoin) à toutes les pages, et les décalages globaux seront modifiés par les décalages de page correspondants à mesure que chaque page est lue. 5 [0089] La Figure 12 représente un schéma de procédé d'un exemple de processus 1200 de calibrage des niveaux de lecture pour la lecture d'une pluralité de cellules de mémoire dans un dispositif de stockage, conformément à divers aspects de la technologie selon l'invention. À des fins d'explication, les divers blocs de l'exemple de processus 1200 sont décrits ici en se référant aux composants et/ou aux processus décrits ici. Le ou les plusieurs 10 blocs du processus 1200 peuvent être mis en oeuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur de mémoire flash 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en oeuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins 15 d'explication, les blocs de l'exemple de processus 1200 sont décrits comme apparaissant en série, ou de manière linéaire. De multiples blocs de l'exemple de processus 1200 peuvent cependant apparaître en parallèle. En outre, il n'est pas nécessaire que les blocs de l'exemple de processus 1200 soient exécutés dans l'ordre indiqué et/ou l'exécution d'un ou de plusieurs des blocs de l'exemple de processus 1200 n'est pas nécessaire. 20 [0090] Conformément à divers modes de réalisation, les blocs du processus 1200 correspondent ou complètent le processus décrit en rapport avec la Figure 9 et les Figures 10A à 10F. Les blocs du processus 1200, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé dans un dispositif à mémoire. Les blocs du processus 1200 peuvent être exécutés, par exemple, pour générer, ajuster et/ou 25 calibrer des lignes de mots ou des groupes de lignes de mots décalés pour RL1, RL2 et RL3. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant des appariements de valeur de décalage différents peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 1200 peuvent être exécutés pour générer, ajuster et/ou calibrer des décalages pour différents groupes, différents blocs et/ou puces. Le 30 processus 1200 peut être mis en oeuvre pendant la configuration d'un dispositif de stockage, avant ou pendant son utilisation. 3033927 31 [0091] Dans l'exemple représenté, un système conforme à la technologie selon l'invention fournit une tension de niveau de lecture suffisante pour lire une majorité des cellules de mémoire qui sont programmées à un niveau de programmation prédéterminé (1202). Comme décrit précédemment, les cellules de mémoire peuvent être des cellules de 5 mémoire non-volatile mononiveau ou multiniveau configurées pour être programmées à un à quatre niveaux de programmation. Les premier et quatrième niveaux de programmation, par exemple, peuvent être associés à des premières valeurs binaires (par exemple représentatives d'un 0 ou d'un 1 binaire d'un bit de poids fort) et les deuxième et troisième niveaux de programmation peuvent être associés aux deuxièmes valeurs binaires (par exemple 10 représentatives d'un 0 ou d'un 1 binaire d'un bit de poids faible). Comme décrit précédemment, lorsque la tension est appliquée à une cellule de mémoire à un niveau de lecture particulier (par exemple RL1, RL2, RL3) correspondant au niveau de programme de la cellule, la cellule conduira en indiquant le niveau de programme. [0092] Après une période prédéterminée dans un cycle de vie d'un dispositif à mémoire, 15 des valeurs de fiabilité correspondant à une pluralité de lectures d'une ou de plusieurs des cellules de mémoire sont générées (1204). Dans cet exemple, chacune des lectures emploie une variation de la tension de niveau de lecture, et chaque valeur de fiabilité générée indique une probabilité pour qu'un état de sortie des cellules de mémoire soit égal à un état programmé prédéterminé, une plage de valeurs de fiabilité couvrant des valeurs négatives et 20 positives. Comme décrit précédemment, pour la pluralité de valeurs de fiabilité, une valeur de fiabilité positive peut indiquer qu'un état de sortie correspondant est un 0 binaire, et une valeur de fiabilité négative peut indiquer qu'un état de sortie correspondant est un 1 binaire. [0093] Après avoir généré les valeurs de fiabilité, une tension de décalage est identifiée, le décalage par rapport à la tension de niveau de lecture (1206). Dans les exemples 25 représentés des Figures 10A à 10C, le décalage correspond à un point de passage par zéro 1004 dans la plage des valeurs de fiabilité (par exemple des Tableaux 2 et/ou 3). [0094] Après l'identification de la tension de décalage (par exemple pour le niveau de lecture), la tension de niveau de lecture est réglée à une tension calibrée en se basant sur la tension de décalage (1208). Conformément à divers aspects de la technologie selon 30 l'invention, le réglage de la tension de niveau de lecture à la tension calibrée peut inclure, par exemple en association avec une opération de lecture, la récupération de la tension de décalage identifiée auprès d'un emplacement stocké et le réglage de la tension de niveau de 3033927 32 lecture par la tension de décalage identifiée afin de lire les cellules de mémoire. Dans certains modes de réalisation, l'opération de lecture est effectuée sur les cellules de mémoire parmi une pluralité de canaux de mémoire, chaque canal étant configuré pour adresser un ou plusieurs blocs de mémoire. 5 [0095] En se référant à la Figure 11A, la tension de décalage identifiée peut être associée à tous les blocs et toutes les pages adressables par la pluralité de canaux de mémoire de sorte que le niveau de lecture est ajusté par la tension de décalage identifiée lors de la lecture des cellules de mémoire d'une page ou d'un bloc quelconque associé à la pluralité de canaux de mémoire. En se référant à la Figure 11B, la tension de décalage identifiée peut être associée 10 à l'adresse d'une page et le niveau de lecture ajusté par la tension de décalage identifiée lors de la lecture des cellules de mémoire associées à l'adresse de page par le biais de l'un quelconque de la pluralité de canaux de mémoire, chaque adresse de page adressable par le biais de la pluralité de canaux de mémoire étant associée à une tension de décalage différente. [0096] De plus, le processus de calibrage peut être appliqué pour mettre à jour les 15 décalages pour les lignes de mots individuelles ou pour mettre à jour les décalages associés à des groupes de lignes de mots optimaux. Une pluralité de décalages de niveau de lecture prédéterminés peuvent être stockés, par exemple, chaque décalage de niveau de lecture prédéterminé étant associé à un groupe de lignes de mots pour une utilisation avec une tension de niveau de lecture respective lors de la lecture des cellules de mémoire dans le 20 groupe. Pour un groupe de lignes de mots respectif, le décalage de niveau de lecture précédemment associé au groupe peut être mis à jour avec la tension de décalage identifiée. Par conséquent, en association avec une opération de lecture, le décalage de niveau de lecture mise à jour peut être récupéré depuis son emplacement stocké (par exemple une table de conversion) pour régler la tension de niveau de lecture à la tension calibrée et la nouvelle 25 tension calibrée utilisée pour lire le groupe de lignes de mots respectif. [0097] La Figure 13 représente un schéma de procédé d'un exemple de processus 1300 de calibrage des niveaux de lecture pour la récupération de données, conformément à divers aspects de la technologie selon l'invention. Le processus de calibrage 1200 précédent peut en outre être appliqué pour récupérer des données qui ne peuvent pas être lues ou décodées. 30 Dans l'exemple de mode de réalisation représenté dans la Figure 13, pendant une opération de lecture, une ou plusieurs lignes de mots ou mots de code sont identifiés comme étant associés à un taux d'erreurs qui satisfait à un seuil d'erreur (1302). La lecture d'une ligne de 3033927 33 mots ou d'un mot de code, par exemple, peut produire un décompte d'erreurs de données trop élevé pour pouvoir être géré par le codage de correction d'erreur. À cet égard, l'opération de lecture peut ne pas être capable de lire les données stockées au niveau de l'une ou des plusieurs lignes de mots identifiées. 100981 En réponse à l'identification de la ou des lignes de mots ou mots de code, le processus 1200 de la Figure 12, ou un ou plusieurs blocs de celui-ci, peut être invoqué afin de récupérer les données auprès de l'une ou des plusieurs lignes de mots. À cet égard, les cellules de mémoire dans une ou plusieurs lignes de mots ou mots de code voisins de la ou des lignes de mots ou mots de code identifiés sont lues en vue de générer la pluralité de 10 valeurs de fiabilité décrites ci-dessus en rapport avec les Figures 10A à 10C (1304). Après que les valeurs de fiabilité soient générées, la nouvelle tension de décalage calibrée est identifiée (par exemple celle qui correspond à un point de passage par zéro 1004 dans la plage des valeurs de fiabilité) et la tension de niveau de lecture est réglée/ajustée à la nouvelle tension de décalage calibrée (1306). La ou les lignes de mots ou mots de code identifiés sont 15 ensuite relus en utilisant la nouvelle tension de niveau de lecture calibrée (1308). [0100] La Figure 14 représente un schéma de procédé d'un exemple de processus 1400 de régénération d'une pluralité de groupes de lignes de mots décalés optimaux en se basant sur la régénération et la réindexation d'une table de décomptes d'erreurs, conformément à divers aspects de la technologie selon l'invention. À des fins d'explication, les divers blocs 20 de l'exemple de processus 1400 sont écrits ici en se référant aux composants et/ou processus décrits ici. Le ou les plusieurs blocs du processus 1400 peuvent être mis en oeuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur de mémoire flash 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être 25 mis en oeuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d'explication, les blocs de l'exemple de processus 1400 sont décrits comme apparaissant en série ou de manière linéaire. De multiples blocs de l'exemple de processus 1400 peuvent cependant apparaître en parallèle. En outre, il n'est pas nécessaire que les blocs de l'exemple de processus 1400 soient exécutés dans l'ordre indiqué et/ou 30 l'exécution d'un ou de plusieurs des blocs de l'exemple de processus 1400 n'est pas nécessaire. 3033927 34 [0101] Conformément à divers modes de réalisation, les blocs du processus 1400 correspondent à ou complètent un ou plusieurs blocs des processus 700, 800, 1300 et/ou 1200, et/ou des processus décrits en rapport avec la Figure 9 et les Figures 10A à 10F. Les blocs du processus 1400, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque 5 niveau de lecture possible utilisé pour lire les cellules de mémoire dans un dispositif à mémoire. Ces cellules de mémoire sont configurées pour être programmées à une pluralité de niveaux de programmation, chaque niveau de programmation étant déterminé enlisant les cellules de mémoire à une tension de niveau de lecture respective. Les blocs du Processus 1400 peuvent être exécutés pour générer, ajuster et/ou calibrer les décalages pour les lignes 10 de mots ou groupes de lignes de mots pour RL1, RL2 et RL3. Une portion des blocs du processus 1400 peut être exécutée par l'algorithme 602. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant différents appariements de valeur de décalage peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 1400 peuvent être exécutés pour générer, ajuster et/ou calibrer les décalages pour 15 différents groupes, pour différents blocs et/ou puces. Le processus 1400 peut être mis en oeuvre pendant la configuration d'un dispositif de stockage, avant ou pendant son utilisation. [0102] Dans l'exemple représenté, un système conforme à la technologie selon l'invention génère une table de décomptes d'erreurs en se basant sur la lecture d'un premier exemple de lignes de mots d'un bloc de mémoire (1402). La table 400 est un exemple d'une 20 table de décomptes d'erreurs qui peut être générée par la technologie selon l'invention. Comme décrit précédemment, pour générer une nouvelle table, chaque ligne de mots peut être lue plusieurs fois en utilisant une tension de niveau de lecture modifiée par une tension de décalage différente afin de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective. Chaque lecture peut produire un 25 décompte d'erreurs pour chaque tension de décalage. La table est générée de telle sorte que les lignes de la table correspondent aux lignes de mots et les colonnes correspondent aux valeurs de décalage. La table indexe chaque décompte d'erreurs produit par un identifiant de ligne de mots correspondant (par exemple une adresse de ligne de mots ou une adresse de ligne de mots partielle) et l'une respective parmi les tensions de niveau de lecture différentes 30 (par exemple un niveau de lecture modifié par une tension de décalage respective ou la tension de décalage). Les décomptes d'erreurs qui sont générés peuvent ensuite être indexés par ligne de mots et tensions de niveau de lecture respectives. 3033927 101031 En complément ou en variante, un premier exemple de lignes de mots d'un bloc de mémoire peut être lu, chaque ligne de mots étant lue plusieurs fois en utilisant des tensions de niveau de lecture différentes afin de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective. Chaque ligne de 5 mots est associée à un identifiant de ligne de mots (par exemple une adresse de la ligne de mots). La table de décomptes d'erreurs peut ensuite être générée en se basant sur les décomptes d'erreurs produits, la table de décomptes d'erreurs indexant chaque décompte d'erreurs produit par un identifiant de ligne de mots correspondant et l'une respective parmi les différentes tensions de niveau de lecture utilisées pour produire le décompte d'erreurs. 10 [0104] En association avec la configuration d'un dispositif de stockage mettant en oeuvre la technologie selon l'invention, une pluralité de groupes de lignes de mots décalés optimaux sont formés (par exemple par l'algorithme 602) en se basant sur la table de décomptes d'erreurs et une division initiale de la pluralité de lignes de mots (1404). Les groupes de lignes de mots peuvent être formés en se basant sur les identifiants de ligne de mots utilisés 15 pour indexer la table de décomptes d'erreurs, chaque groupe de lignes de mots associant l'une respective des tensions de niveau de lecture différentes à une pluralité de lignes de mots sur lesquelles doivent être effectuées les opérations de lecture. Comme décrit précédemment en rapport avec les processus 700 et 800 et aussi les Figures 7 et 8, chaque groupe de lignes de mots décalé optimal peut inclure une portion groupée consécutivement des lignes de mots 20 appariées avec une tension de décalage correspondante, les appariements étant sélectionnés pour un décompte d'erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots décalés. À cet égard, une table de décomptes d'erreurs peut être indexée par des lignes de mots et les tensions de décalage de niveau de lecture respectives afin de déterminer les décomptes d'erreurs maximums et/ou minimums 25 possibles pour chacune des lignes de mots, et ensuite les lignes de mots organisées en groupes consécutifs, chacun apparié avec une valeur de décalage qui produit la plus petite dégradation possible du décompte d'erreurs (en comparaison des lignes de mots individuelles) pour les groupements. 101051 Après la génération des groupes de lignes de mots optimaux (y compris les 30 tensions de décalage correspondantes), le dispositif de stockage est configuré pour effectuer des opérations de lecture sur les lignes de mots respectives des groupes de lignes de mots en utilisant les tensions de décalage de niveau de lecture sélectionnées pour les groupes de lignes 3033927 36 de mots en se basant sur le décomptes d'erreurs dans la table de décomptes d'erreurs (1406). Par conséquent, en association avec la lecture des cellules de mémoire d'une ligne de mots particulière d'un groupe de lignes de mots décalé, la tension de décalage associée au groupe de lignes de mots décalé respectif peut être identifiée et les cellules de mémoire lues en 5 utilisant la tension de décalage identifiée. Dans divers modes de réalisation, la tension de décalage identifiée modifie la tension de niveau de lecture respective pour lire les cellules de mémoire avec moins d'erreurs que si la tension de niveau de lecture respective n'était pas modifiée. 101061 Après un point prédéterminé dans un cycle de vie du bloc de mémoire (par 10 exemple un point auquel les cellules de mémoire dans le bloc de mémoire produisent un taux d'erreurs binaires supérieur à un seuil prédéterminé ou ont été soumises à un nombre prédéterminé de cycles de programmation/effacement), les groupes de lignes de mots optimaux, y compris leurs valeurs de décalage associées, peuvent être recalibrés. À cet égard, la table de décomptes d'erreurs est régénérée (1408). La table de décomptes d'erreurs 15 peut être régénérée en se basant sur la lecture d'un deuxième échantillon de lignes de mots correspondant à l'identifiant de lignes de mots utilisé pour indexer la table de décomptes d'erreurs. À titre d'exemple, la table de décomptes d'erreurs peut être régénérée en se basant sur la relecture de la pluralité de lignes de mots d'un bloc de mémoire, par exemple, dans les conditions actuelles (par exemple les niveaux de tension) du dispositif à mémoire. 20 101071 Dans certains modes de réalisation, avant que la table de décomptes d'erreurs est régénérée, les niveaux de lecture et/ou les tensions de décalage utilisés pour générer la table peuvent être calibrés. En se référant brièvement à la Figure 13 et au processus 1300, des valeurs de fiabilité correspondant à de multiples lectures autour d'une tension de niveau de lecture respective peuvent être générées, une tension calibrée pour la tension de niveau de 25 lecture identifiée (par exemple une tension de décalage pour calibrer les niveaux de lecture existants) et le dispositif de stockage configuré pour relire la pluralité de lignes de mots du bloc de mémoire en se basant sur la tension calibrée en association avec la tension de niveau de lecture. Par conséquent, chacune des lectures peut utiliser une variation de la tension de niveau de lecture et chaque valeur de fiabilité générée peut être indicative d'une probabilité 30 pour qu'un état de sortie des cellules de mémoire est égal à un état programmé prédéterminé (par exemple le logarithme du rapport de vraisemblance). Une plage de valeurs de fiabilité peut couvrir les valeurs négatives et positives. La tension de décalage mise à jour identifiée 3033927 37 pour relire les lignes de mots peut correspondre à un point de passage par zéro dans la plage des valeurs de fiabilité. [0108] Les tensions de niveau de lecture différentes utilisées pour générer la table de décomptes d'erreurs initiale peuvent être mises à jour pour produire des tensions de niveau de 5 lecture mises à jour. Chacune des tensions de niveau de lecture différentes peut, par exemple, être ajustée par la tension calibrée. À cet égard, chacune des lignes de mots du deuxième échantillon est lue de multiples fois en utilisant les tensions de niveau de lecture mises à jour afin de produit un décompte d'erreurs mis à jour. La table de décomptes d'erreurs peut ensuite être régénérée à partir des décomptes d'erreurs mis à jour produits. Par conséquent, 10 la table de décomptes d'erreurs peut être mise à jour pour indexer chaque décompte d'erreurs mis à jour produit par un identifiant de ligne de mots correspondant et l'une respective parmi les tensions de niveau de lecture mises à jour utilisées pour produire les décomptes d'erreurs mis à jour. [0109] Une fois que la table de décomptes d'erreurs est régénérée, les groupes de lignes 15 de mots décalés optimaux sont régénérés en se basant sur l'indexage de la table de décomptes d'erreurs régénérée par les lignes de mots et les tensions de décalage de niveau de lecture (1410). Les groupes de lignes de mots décalés optimaux peuvent être régénérés de la manière décrite par un ou plusieurs blocs du processus 700 et/ou du processus 800. [0110] Un grand nombre des caractéristiques décrites ci-dessus des exemples de 20 processus 1200, 1300 et 1400 ainsi que les caractéristiques et applications apparentées peuvent être mises en oeuvre sous la forme de processus logiciels qui sont spécifiés sous la forme d'un ensemble d'instructions enregistré sur un support de stockage lisible par ordinateur (également appelé support lisible par ordinateur). Lorsque ces instructions sont exécutées par une ou plusieurs unités de traitement (par exemple un ou plusieurs processeurs, 25 noyaux de processeurs ou autres unités de traitement), elles amènent les unités de traitement à réaliser les actions indiquées dans les instructions. Des exemples de supports lisibles par ordinateur incluent, sans exhaustivité, les CD-ROM, les disques à mémoire flash, les mémoires RAM, les disques durs, les EPROM, etc. Les supports lisibles par ordinateur n'incluent pas les ondes porteuses ni les signaux électroniques transmis sans fil ou sur des 30 connexions filaires. 3033927 38 [0111] La Figure 15 est un synoptique représentant les composants d'un exemple de système de stockage de données 1500 (par exemple un disque électronique) conforme à divers modes de réalisation de la technologie selon l'invention. Le système de stockage de données 1500 peut inclure un contrôleur de stockage de données 1501, un support de 5 stockage 1502 et un dispositif à mémoire flash 1503. Le contrôleur 1501 peut utiliser le support de stockage 1502 pour le stockage temporaire des donnes et des informations utilisées pour gérer le système de stockage de données 1500. Le contrôleur 1501 peut inclure plusieurs composants internes (non illustrés) tels qu'un ou plusieurs processeurs, une mémoire morte, une interface pour composant de mémoire flash (par exemple un 10 multiplexeur destiné à gérer le transport des instructions et des données le long d'une liaison série avec le dispositif à mémoire flash 1503), une interface d'E/S, un circuit de correction d'erreur et similaire. Dans certains aspects, un ou plusieurs éléments du contrôleur 1501 peuvent être intégrés dans une puce unique. Dans d'autres aspects, les éléments peuvent être mis en oeuvre sur deux composants discrets ou plus. 15 [0112] Le contrôleur 1501, ou encore un ou plusieurs des composants qu'il contient, peut être configuré pour exécuter un code ou des instructions en vue de réaliser les opérations et la fonctionnalité décrites ici. À titre d'exemple, le contrôleur 1501 peut être configuré pour réaliser des opérations destinées à gérer les mises en correspondance de flux et d'adresse de demande et pour effectuer les calculs et générer les commandes. Le processeur du contrôleur 20 1501 peut servir à surveiller et à commander le fonctionnement des composants dans le contrôleur de stockage de données 1501. Le processeur peut être un microprocesseur à usage général, un microcontrôleur, un processeur de signal numérique (DSP), un circuit intégré à application spécifique (ASIC), un réseau logique programmable sur site (FPGA), un composant logique programmable (PLD), un contrôleur, une machine d'état, une logique à 25 portes, des composants physiques discrets ou une combinaison de ce qui précède. Une ou plusieurs séquences d'instructions peuvent être stockées sous la forme d'un microprogramme sur une ROM à l'intérieur du contrôleur 1501 et/ou de son processeur. Une ou plusieurs séquences d'instructions peuvent être stockées dans un logiciel et lues depuis le support de stockage 1502, le dispositif à mémoire flash 1503 ou reçues de la part du dispositif hôte 1510 30 (par exemple par le biais d'une interface d'hôte). La ROM, le support de stockage 1502, le dispositif à mémoire flash 1503 représentent des exemples de supports lisibles par machine ou par ordinateur sur lesquels peuvent être stockées les instructions/le code exécutables par le contrôleur. 1501 et/ou son processeur. Les supports lisibles par machine ou par ordinateur 3033927 39 peuvent désigner de manière générale tout support tangible et/ou non temporaire utilisé pour fournir des instructions au contrôleur 1501 et/ou à son processeur, y compris à la fois les supports volatiles, tels que la mémoire dynamique utilisée pour le support de stockage 1502 ou pour les mémoires tampons à l'intérieur du contrôleur 1501, et les supports non-volatiles, 5 tel que les supports électroniques, les supports optiques et les supports magnétiques. [0113] Par conséquent, le système de stockage de données 1500 peut en outre inclure une interface d'hôte 1505. L'interface d'hôte 1505 est configurée pour être connectée à un dispositif hôte 1510, afin de recevoir les données envoyées depuis le dispositif hôte 1510 et lui envoyer des données. L'interface d'hôte 1505 peut inclure à la fois des connexions 10 électriques et physiques destinées à la connexion opérationnelle du dispositif hôte 1510 au contrôleur 1501. L'interface d'hôte 1505 est configurée pour communiquer les données, les adresses et les signaux de commande entre le dispositif hôte 1510 et le contrôleur 1501. Ainsi, le contrôleur 1501 est configuré pour stocker les données reçues de la part du dispositif hôte 1510 dans le dispositif à mémoire flash 1503 en réponse à une commande d'écriture de 15 la part du dispositif hôte 1510, et pour lire les données stockées dans la mémoire flash 1503 et transférer les données lues au dispositif hôte 1510 par le biais de l'interface d'hôte 1505 en réponse à une commande de lecture de la part du dispositif hôte 1510. [0114] Le dispositif hôte 1510 représente tout dispositif configuré pour être connecté au système de stockage de données 1500 et pour stocker les données dans un système de 20 stockage de données 1500. Le dispositif hôte 1510 peut être un système de traitement informatique tel qu'un ordinateur personnel, un serveur, une station de travail, un ordinateur portable, un PDA, un Smartphone et similaire. En variante, le dispositif hôte 1510 peut être un dispositif électronique tel qu'un appareil photographique numérique, un lecteur audio numérique, un enregistreur vidéo numérique et similaire. 25 [0115] Dans certains aspects, le support de stockage 1502 représente la mémoire volatile servant au stockage temporaire des données et des informations utilisées pour la gestion du système de stockage de données 1500. Conformément à un aspect de la présente invention, le support de stockage 1502 est une mémoire vive (RAM) telle qu'une RAM à double débit de données (DDR). D'autres types de RAM peuvent également être utilisés pour mettre en 30 oeuvre le support de stockage 1502. Le support de stockage 1502 peut être mis en oeuvre en utilisant un module de RAM unique ou de multiples modules de RAM. Bien que le support de stockage 1502 est représenté distinct du contrôleur 1501, les personnes compétentes dans 3033927 l'art reconnaîtront que le support de stockage 1502 peut être incorporé dans le contrôleur 1501 sans s'écarter du domaine d'application de la présente invention. En variante, le support de stockage 1502 peut être une mémoire non-volatile telle qu'un disque magnétique, une mémoire flash, un SSD périphérique et similaire. 5 [0116] Comme décrit également dans la Figure 2, le système de stockage de données 1500 peut également comprendre un bus. Le bus peut employer une norme d'interface appropriée, incluant sans exhaustivité, SATA (Serial Advanced Technology Attachment - Rattachement technologique évolué série), ATA (Advanced Technology Attachment - Rattachement technologique évolué), SCSI (Small Computer System Interface - Interface 10 système de petit ordinateur), PCI étendue (PCI-X), Fibre Channel (canal à fibres), SAS (Serial Attached SCSI - SCSI à rattachement série), SD (Secure Digital - Numérique sécurisé), EMMC (Embedded Multi-Media Card - Carte multimédia incorporée), UFS (Universal Flash Storage - Stockage flash universel) et PCIe (Peripheral Component Interconnect Express - Interconnexion de composant périphérique express). 15 [0117] Le dispositif hôte 1510 et le système de stockage de données 1500 peuvent se trouver en communication l'un avec l'autre par le biais d'une connexion filaire ou sans fil et peuvent être locaux ou distants l'un de l'autre. Conformément à certains aspects, le système de stockage de données 1500 peut inclure des broches (ou un support) destinées à s'accoupler avec un support (ou des broches) correspondant sur le dispositif hôte 1510 afin d'établir une 20 connexion électrique et physique. Conformément à un ou plusieurs autres aspects, le système de stockage de données 1500 comprend un émetteur/récepteur sans fil destiné à mettre le dispositif hôte 1510 et le système de stockage de données 1500 en communication sans fil l'un avec l'autre. [0118] Le dispositif à mémoire flash 1503 représente un dispositif à mémoire non- 25 volatile servant au stockage des données. Conformément à un aspect de la présente invention, le dispositif à mémoire flash 1503 comprend, par exemple, une mémoire flash NAND. Le dispositif à mémoire flash 1503 peut comprendre un dispositif à mémoire flash ou puce unique, et peut inclure de multiples dispositifs à mémoire flash ou puces disposés en de multiples canaux. Le dispositif à mémoire flash 1503 n'est pas limité à une quelconque 30 capacité ou configuration particulière. Le nombre de blocs physiques, par exemple, le nombre de pages physiques par bloc physique, le nombre de secteurs par page physique et la taille des secteurs peuvent varier au sein du domaine d'application de la présente invention. 3033927 41 [0119] La mémoire flash peut présenter une spécification d'interface normalisée. Cette norme garantit que les puces provenant de plusieurs fabricants peuvent être utilisées de manière interchangeable (au moins dans une large mesure). L'interface peut en outre masquer le travail interne de la mémoire flash et ne retourner que les valeurs binaires détectées en 5 interne pour les données. [0120] Le terme « logiciel » s'entend inclure, lorsqu'il y a lieu, les microprogrammes résidant dans une mémoire morte ou les applications stockées sur un support magnétique qui peuvent être chargées dans la mémoire en vue de leur traitement par un processeur. De même, dans certains modes de réalisation, de multiples aspects logiciel de l'objet de 10 l'invention peuvent être mis en oeuvre en tant que sous-parties d'un programme plus grand tout en restant des aspects logiciel distincts de l'objet de l'invention. Dans certains modes de réalisation, de multiples aspects logiciel peuvent également être mis en oeuvre sous la forme de programmes séparés. Pour terminer, toute combinaison de programmes séparés qui, ensemble, mettent en oeuvre un aspect logiciel décrit ici se trouve à l'intérieur du domaine 15 d'application de l'objet de l'invention. Dans certains modes de réalisation, les programmes logiciels, lorsqu'ils sont installés de manière à fonctionner sur un ou plusieurs systèmes électroniques, définissent une ou plusieurs mises en oeuvre de machine spécifiques qui exécutent et réalisent les opérations des programmes logiciels. [0121] Un programme informatique (également connu sous le nom de programme, 20 logiciel, application logicielle, script ou code) peut être écrit sous toute forme de langage de programmation, y compris les langages compilés ou interprétés ainsi que les langages déclaratifs ou procéduraux, et il peut être déployé sous n'importe quelle forme, y compris sous la forme d'un programme autonome ou d'un module, un composant, une sous-routine, un objet ou une autre unité adaptée à une utilisation dans un environnement informatique. Un 25 programme informatique peut, mais ne doit pas nécessairement, correspondre à un fichier dans un système de fichiers. Un programme peut être stocké dans une portion d'un fichier qui contient d'autres programmes ou données (par exemple une ou plusieurs scripts stockés dans un document en langage de balisage), dans un fichier unique dédié au programme en question ou dans de multiples fichiers coordonnés (par exemple des fichiers qui stockent un 30 ou plusieurs modules, sous-programmes ou portions de code). Un programme informatique peut être déployé en vue d'être exécuté sur un ordinateur ou sur plusieurs ordinateurs qui se 3033927 42 trouvent sur un site ou distribués entre plusieurs sites et interconnectés par un réseau de communication. 101221 Il est entendu que les blocs, modules, éléments, composants, méthodes et algorithmes illustratifs décrits ici peuvent être mis en oeuvre sous la forme de matériels 5 électroniques, de logiciels d'ordinateur ou de combinaisons des deux. Pour illustrer cette interchangeabilité du matériel et du logiciel, divers blocs, modules, éléments, composants, méthodes et algorithmes illustratifs ont été décrits ci-dessus, généralement en termes de leur fonctionnalité. La mise en oeuvre d'une telle fonctionnalité sous forme matérielle ou logicielle dépend de l'application particulière et des contraintes de conception imposées au 10 système dans son ensemble. Les artisans compétents peuvent mettre en oeuvre la fonctionnalité décrite de différentes manières pour chaque application particulière. Divers composants et blocs peuvent être disposés différemment (par exemple disposés dans un ordre différent ou partitionnés d'une manière différente), le tout sans s'écarter du domaine d'application de la présente invention. 15 101231 Il est entendu que l'ordre spécifique ou la hiérarchie des étapes dans les processus divulgués est présenté comme une illustration de certains exemples d'approches. Suivant les préférences de conception et/ou d'autres considérations, il est entendu que l'ordre spécifique ou la hiérarchie des étapes dans les processus peut être réorganisé. Dans certains modes de réalisation, par exemple, certaines des étapes peuvent être exécutées simultanément. Par 20 conséquent, les revendications de procédé jointes présentent les éléments des diverses étapes dans un exemple d'ordre et ne se veulent pas être limitées à l'ordre spécifique ou à la hiérarchie présenté. 101241 La description précédente est fournie dans le but de permettre à toute personne compétente dans l'art de mettre en application pratique les divers aspects décrits ici. La 25 description précédente fournit divers exemples de la présente invention et la présente invention n'est pas limitée à ces exemples. Diverses modifications à ces aspects apparaîtront facilement aux personnes compétentes dans l'art, et les principes génériques définis ici peuvent être appliqués à d'autres aspects. Par conséquent, les revendications ne sont pas destinées à être limitées aux aspects indiqués ici, mais l'intégralité du domaine d'application 30 est à accorder en cohérence avec les revendications linguistiques, la référence à un élément au singulier n'étant pas destinée à signifier « un et un seul », sauf explicitement précisé, mais plutôt « un ou plusieurs ». Sauf indication spécifique différente, le terme « certains » fait 3033927 43 référence à un ou plusieurs. Les pronoms au masculin (par exemple son) incluent le genre féminin (par exemple sa) et inversement. Les titres et sous-titres éventuellement présents sont uniquement utilisés pour des raisons de commodité et ne limitent pas l'objet de l'invention. [0125] Les mots prédicatifs « configuré pour », « pouvant être utilisé pour » et 5 « programmé pour » n'impliquent pas une quelconque modification tangible ou intangible particulière d'un sujet, mais sont plutôt destins à être utilisés de manière interchangeable. Un processeur configuré pour surveiller et commander une opération ou un composant, par exemple, peut également signifier que le processeur est programmé pour surveiller et commander l'opération ou que le processeur peut être utilisé pour surveiller et commander 10 l'opération. De même, un processeur configuré pour exécuter un code peut être construit sous la forme d'un processeur programmé pour exécuter le code ou pouvant être utilisé pour exécuter le code. [0126] Les phrases « en communication avec » et « connecté » signifient en communication directe avec ou en communication indirecte avec par le biais d'un ou de 15 plusieurs composants nommés ou non ici (par exemple un lecteur de carte à mémoire) [0127] Une phrase telle qu'un « aspect » n'implique pas qu'un tel aspect est essentiel pour la présente invention ou qu'un tel aspect s'applique à toutes les configurations de la présente invention. Une divulgation en rapport avec un aspect peut s'appliquer à toutes les configurations ou à une ou plusieurs configurations. Un aspect peut fournir un ou plusieurs 20 exemples. Une phrase telle qu'un aspect peut faire référence à un ou plusieurs aspects et inversement. Une phrase telle qu'un « mode de réalisation » n'implique pas qu'un tel mode de réalisation est essentiel à la présente invention ou qu'un tel mode de réalisation s'applique à toutes les configurations de la présente invention. Une divulgation en rapport avec une mise en oeuvre peut s'appliquer à tous les aspects, ou à un ou plusieurs aspects. Une mise en oeuvre 25 peut fournir un ou plusieurs exemples. Une phrase telle qu'un « mode de réalisation » peut faire référence à une ou plusieurs mises en oeuvre et inversement. Une phrase telle qu'une « configuration » n'implique pas qu'une telle configuration est essentielle à la présente invention ou qu'une telle configuration s'applique à toutes les configurations de la présente invention. Une divulgation en rapport avec une configuration peut s'appliquer à toutes les 30 configurations, ou à une ou plusieurs configurations. Une configuration peut fournir un ou plusieurs exemples. Une phrase telle qu'une « configuration » peut faire référence à une ou plusieurs configurations et inversement. 3033927 44 [01281 Le mot «à titre d'exemple » est utilisé ici pour indiquer « servant d'exemple ou d'illustration ». Tout aspect ou toute conception décrit ici comme étant «à titre d'exemple » ne doit pas nécessairement être considéré comme préféré ou avantageux par rapport à d'autres aspects ou conceptions. 5 REVENDICATIONS1. Procédé mis en oeuvre par ordinateur, comprenant : lecture d'un premier exemple de lignes de mots d'un bloc de mémoire, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective ; génération d'une table de décomptes d'erreurs en se basant sur les décomptes d'erreurs produits, la table de décomptes d'erreurs indexant chaque décompte d'erreurs 10 produit par un identifiant de ligne de mots correspondant et une tension respective des différentes tensions de niveau de lecture utilisées pour produire le décompte d'erreurs ; et configuration d'un dispositif de stockage pour réaliser les opérations de lecture en utilisant des tensions de niveau de lecture sélectionnées sur la base des décomptes d'erreurs de la table de décomptes d'erreurs. 15 2. Procédé mis en oeuvre par ordinateur selon la revendication 1, dans lequel la configuration du dispositif de stockage comprend : formation d'une pluralité de groupes de lignes de mots en se basant sur les identifiants de ligne de mots utilisés pour indexer la table de décomptes d'erreurs, chaque 20 groupe de lignes de mots associant l'une respective parmi les tensions de niveau de lecture différentes à une pluralité de lignes de mots sur lesquelles doivent être effectuées les opérations de lecture, dans lequel le dispositif de stockage est configuré pour effectuer une opération de lecture respective sur les lignes de mots respectives en utilisant la tension de niveau de 25 lecture du groupe de lignes de mots correspondant aux lignes de mots respectives. 3. Procédé mis en oeuvre par ordinateur selon la revendication 2, dans lequel la pluralité de groupes de lignes de mots sont générés en se basant sur une division initiale des lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table 30 de décomptes d'erreurs, et dans lequel chaque groupe de lignes de mots comprend une portion groupée consécutivement des lignes de mots correspondantes appariée avec une tension de niveau de lecture correspondante, les appariements étant sélectionnés pour un 3033927 46 décompte d'erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots. 4. Procédé mis en oeuvre par ordinateur selon la revendication 2, comprenant en 5 outre : après un point prédéterminé dans un cycle de vie d'un ou de plusieurs blocs de mémoire dans le dispositif de stockage, régénération de la table de décomptes d'erreurs en se basant sur la lecture d'un deuxième échantillon de lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d'erreurs, et régénération de la pluralité de groupes de lignes de mots en se basant sur la table de décomptes d'erreurs régénérée. 5. Procédé mis en oeuvre par ordinateur selon la revendication 4, dans lequel la régénération de la table de décomptes d'erreurs comprend : génération d'une pluralité de valeurs de fiabilité correspondant à une pluralité de lectures des cellules de mémoire du ou des plusieurs blocs de mémoire, chaque lecture étant effectuée en utilisant une tension de niveau de lecture différente, une plage de valeurs de fiabilité couvrant des valeurs négatives et positives ; identification d'une tension calibrée qui correspond à un point de passage par zéro dans la plage des valeurs de fiabilité ; et configuration du dispositif de stockage pour lire le deuxième échantillon de lignes de mots en se basant sur la tension calibrée. 6. Procédé mis en oeuvre par ordinateur selon la revendication 5, dans lequel la régénération de la table de décomptes d'erreurs comprend en outre : mise à jour des tensions de niveau de lecture différentes en se basant sur la tension calibrée, chacun des deuxièmes échantillons de lignes de mots étant lu de multiples fois en utilisant les tensions de niveau de lecture mises à jour en vue de produire un décompte d'erreurs mis à jour ; et régénération de la table de décomptes d'erreurs en se basant sur les décomptes d'erreurs mis à jour produits, la table de décomptes d'erreurs étant mise à jour pour indexer chaque décompte d'erreurs mis à jour produit par un identifiant de ligne de mots correspondant et l'une respective parmi les tensions de niveau de lecture mises à jour afin de produire les décomptes d'erreurs mis à jour. 3033927 47 7. Procédé mis en oeuvre par ordinateur selon la revendication 5, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend un point dans le cycle de vie auquel une ou plusieurs lectures des cellules de mémoire dans le ou les plusieurs blocs de mémoire produit un taux d'erreurs binaires supérieur à un seuil 5 d'erreur. 8. Procédé mis en oeuvre par ordinateur selon la revendication 5, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend un point dans le cycle de vie auquel les cellules de mémoire dans le ou les plusieurs blocs de mémoire ont été soumis à un nombre prédéterminé de cycles de programmation/effacement. 10 9. Système de stockage de données, comprenant : une pluralité de dispositifs à mémoire flash, chaque dispositif à mémoire flash comprenant une pluralité de blocs de mémoire ; et un contrôleur connecté à la pluralité de dispositifs à mémoire flash, le 15 contrôleur étant configuré pour, pendant un mode de configuration : lire un premier exemple de lignes de mots des dispositifs à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de 20 produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture correspondante ; générer une table de décomptes d'erreurs en se basant sur les décomptes d'erreurs produits, la table de décomptes d'erreurs indexant chaque décompte d'erreurs produit par un identifiant de ligne de mots 25 correspondant et une tension respective des différentes tensions de niveau de lecture utilisées pour produire le décompte d'erreurs ; et sélectionner les tensions de niveau de lecture pour les futures opérations de lecture en se basant sur les décomptes d'erreurs de la table de décomptes d'erreurs. 30 10. Système de stockage de données selon la revendication 9, dans lequel le contrôleur est en outre configuré pour, pendant le mode de configuration : 3033927 48 former une pluralité de groupes de lignes de mots en se basant sur les identifiants de ligne de mots utilisés pour indexer la table de décomptes d'erreurs, chaque groupe de lignes de mots associant l'une respective parmi les tensions de niveau de lecture différentes à une pluralité de lignes de mots sur lesquelles doivent être effectuées les 5 opérations de lecture ; et configuration du système de stockage de données pour effectuer une opération de lecture respective sur les lignes de mots respectives en utilisant la tension de niveau de lecture du groupe de lignes de mots correspondant aux lignes de mots respectives. 11. Système de stockage de données selon la revendication 10, dans lequel la 10 pluralité de groupes de lignes de mots sont générés en se basant sur une division initiale des lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d'erreurs, et avec lequel chaque groupe de lignes de mots comprend une portion groupée consécutivement des lignes de mots correspondantes appariée avec une tension de niveau de lecture correspondante, les appariements étant sélectionnés pour un 15 décompte d'erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots. 12. Système de stockage de données selon la revendication 10, dans lequel l'association de la tension de niveau de lecture à la pluralité de lignes de mots comprend 20 l'association de la tension de niveau de lecture à une pluralité d'adresses de ligne de mots correspondant à la pluralité de lignes de mots. 13. Système de stockage de données selon la revendication 12, dans lequel le contrôleur est configuré pour : 25 après un point prédéterminé dans un cycle de vie d'un bloc de mémoire respectif, régénérer la table de décomptes d'erreurs en se basant sur la lecture d'un deuxième échantillon de lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d'erreurs, et régénérer la pluralité de groupes de lignes de mots en se basant sur la table de 30 décomptes d'erreurs régénérée. 14. Système de stockage de données selon la revendication 13, dans lequel la régénération de la table de décomptes d'erreurs comprend : 3033927 49 génération d'une pluralité de valeurs de fiabilité correspondant à une pluralité de lectures des cellules de mémoire du bloc de mémoire respectif, chaque lecture étant effectuée en utilisant une tension de niveau de lecture différente, une plage de valeurs de fiabilité couvrant des valeurs négatives et positives ; 5 identification d'une tension calibrée qui correspond à un point de passage par zéro dans la plage des valeurs de fiabilité ; et configuration du dispositif de stockage pour lire les lignes de mots du bloc de mémoire respectif en se basant sur la tension calibrée. 10 15. Système de stockage de données selon la revendication 13, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend un point dans le cycle de vie auquel une ou plusieurs lectures des cellules de mémoire dans le ou les plusieurs blocs de mémoire produit un taux d'erreurs binaires supérieur à un seuil d'erreur. 15 16. Système de stockage de données selon la revendication 13, dans lequel le point prédéterminé dans le cycle de vie du bloc de mémoire respectif comprend un point dans le cycle de vie auquel les cellules de mémoire dans le bloc de mémoire respectif ont été soumises à un nombre prédéterminé de cycles de programmation/effacement. 20 17. Procédé mis en oeuvre par ordinateur, comprenant : lecture d'un premier exemple de lignes de mots d'un dispositif à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à une adresse de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en 25 vue de produire un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective ; génération d'une table de décomptes d'erreurs en se basant sur les décomptes d'erreurs produits, la table de décomptes d'erreurs indexant chaque décompte d'erreurs produit par une adresse de ligne de mots correspondante et une tension respective des 30 différentes tensions de niveau de lecture ; formation d'une pluralité de groupes de lignes de mots en se basant sur la table de décomptes d'erreurs, chaque groupe associant une tension respective parmi les tensions de niveau de lecture différentes à une pluralité d'adresses de ligne de mots ; et 3033927 50 configuration d'un dispositif de stockage pour lire les cellules de mémoire en utilisant une tension de niveau de lecture d'un groupe de lignes de mots généré correspondant à une adresse de ligne de mots des cellules de mémoire à lire. 5 18. Procédé mis en oeuvre par ordinateur selon la revendication 17, dans lequel la pluralité de groupes de lignes de mots sont également générés en se basant sur une division initiale des lignes de mots correspondant aux adresses de ligne de mots utilisées pour indexer la table de décomptes d'erreurs, et selon lequel chaque groupe de lignes de mots comprend une portion groupée consécutivement des adresses de ligne de mots appariée avec une tension 10 de niveau de lecture correspondante, les appariements étant sélectionnés pour un décompte d'erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots. 19. Procédé mis en oeuvre par ordinateur selon la revendication 18, comprenant en 15 outre : après un point prédéterminé dans un cycle de vie d'un ou de plusieurs blocs de mémoire, régénération de la table de décomptes d'erreurs en se basant sur la lecture d'un deuxième échantillon de lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d'erreurs, et 20 régénération de la pluralité de groupes de lignes de mots en se basant sur la table de décomptes d'erreurs régénérée. 20. Procédé mis en oeuvre par ordinateur selon la revendication 19, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend des 25 cellules de mémoire dans le ou les plusieurs blocs de mémoire ayant été soumises à un nombre prédéterminé de cycles de programmation/effacement.