FR 3024271 A1 20160129 FR 1556408 A 20150707 PLUSIEURS TAILLES DE MOTS CODÉS ECC DANS UN SSD ARRIÈRE-PLAN [0001] La technologie selon l'invention concerne généralement des dispositifs de stockage électroniques. Des données hôte peuvent être stockées de façon fiable dans un support de stockage de données, tel qu'une mémoire flash, en codant les données hôte dans des mots codés de code de correction d'erreurs (ECC) et en stockant les mots codés sur le support de stockage de données. En réponse à une commande de lecture, les mots codés peuvent être lus à partir du support de stockage de données et décodés avant de retourner les données hôte exemptes d'erreurs à l'hôte. La taille d'un secteur de données hôte peut varier en fonction du système hôte. Par exemple, dans des applications d'entreprise, la taille de secteur hôte peut faire 536 octets avant d'ajouter des bits de parité ECC par comparaison avec les 512 octets utilisés dans plusieurs applications grand public. Des secteurs hôte de différentes tailles peuvent ajouter à la complexité d'un système de stockage de données à base de mémoire flash comme un disque électronique (SSD) et compromettre ses performances. RÉSUMÉ [0002] L'invention concerne un système et un procédé permettant de stocker des données dans un disque électronique. Selon un aspect, un procédé peut consister à recevoir une pluralité d'unités de données hôte pour un stockage dans une mémoire flash, diviser la pluralité d'unités de données hôte en une pluralité de champs utiles de données, un premier champ utile de données comprenant une première unité de données hôte et un deuxième champ utile de données comprenant une partie d'une deuxième unité de données hôte, coder le premier champ utile de données en un premier mot codé ayant une première taille de mot codé, coder le deuxième champ utile de données en un deuxième mot codé ayant une deuxième taille de mot codé, la deuxième taille de mot codé étant différente de la première taille de mot codé, et écrire le premier mot codé et le deuxième mot codé dans une première page de la mémoire flash. Dans un autre aspect, un support lisible par machine peut stocker des instructions qui, lorsqu'elles sont exécutées, mettent en oeuvre le procédé décrit précédemment. - 1 - 3024271 [0003] Dans un autre aspect, un système peut comporter une mémoire flash, une ou plusieurs mémoires tampons de données configurées pour recevoir une pluralité d'unités de données hôte pour un stockage dans la mémoire flash, un contrôleur configuré pour diviser la pluralité d'unités de données hôte dans les une ou plusieurs mémoires tampons de données en une 5 pluralité de champs utiles de données, un premier champ utile de données comportant une première unité de données hôte et un deuxième champ utile de données comportant une partie d'une deuxième unité de données hôte, et un codeur/décodeur configuré pour coder le premier champ utile de données en un premier mot codé ayant une première taille de mot codé ; pour coder le deuxième champ utile de données en un deuxième mot codé ayant une deuxième taille 10 de mot codé, la deuxième taille de mot codé étant différente de la première taille de mot codé, le contrôleur étant en outre configuré pour écrire le premier mot codé et le deuxième mot codé dans une première page de la mémoire flash. [0004] D'autres configurations de la technologie selon l'invention ressortiront plus clairement pour l'homme du métier à la lecture de la description détaillée suivante, dans laquelle 15 diverses configurations de la présente technologie sont représentées et décrites à titre illustratif. Comme il pourra le comprendre, la technologie selon l'invention peut avoir d'autres configurations différentes et plusieurs détails peuvent être modifiés à divers autres égards, sans sortir du cadre de la technologie selon l'invention. C'est pourquoi, les dessins et la description détaillée doivent être considérés comme étant donnés à titre illustratif et non restrictif. 20 BRÈVE DESCRIPTION DES DESSINS [0005] Une description détaillée sera faite en référence aux dessins annexés : [0006] La figure 1 illustre un schéma de principe montrant une série de mots codés donnée à titre d'exemple, comportant des données hôte et un codage de correction d'erreurs, stockés dans plusieurs pages d'un bloc de mémoire selon les aspects de la technologie de l'invention. 25 [0007] La figure 2 illustre un schéma de principe montrant les composants d'un disque électronique configuré pour stocker des données reçues à partir d'un système hôte selon les aspects de la technologie de l'invention. - 2 - 3024271 [0008] La figure 3 est un organigramme illustrant un processus donné à titre d'exemple permettant de stocker des données dans un disque électronique selon les aspects de la technologie de l'invention. DESCRIPTION DÉTAILLÉE 5 [0009] La description détaillée ci-dessous a pour objet de décrire diverses configurations de la technologie selon l'invention et n'est pas destinée à représenter les seules configurations dans lesquelles la présente technologie peut être mise en oeuvre. Les dessins annexés sont inclus ici et font partie de la description détaillée. La description détaillée comporte des détails spécifiques pour une meilleure compréhension de la technologie selon l'invention. Cependant, la présente 10 technologie peut être mise en oeuvre sans ces détails spécifiques. Dans certains exemples, des structures et des composants sont représentés sous la forme d'un schéma de principe afin que les concepts de la présente technologie soient illustrés plus clairement. Des composants similaires sont référencés avec des numéros d'éléments identiques pour faciliter la compréhension. [0010] Une mémoire flash est organisée en blocs de cellules de mémoire flash. Chaque bloc 15 comporte un certain nombre de pages qui peuvent contenir des milliers de bits. Des données sont écrites et lues dans/depuis une mémoire flash en unités de pages. Cependant, une mémoire flash doit être effacée en unités de blocs. Des données peuvent être écrites dans des pages de mémoire flash séquentiellement au moyen de dispositifs à mémoire flash. Des pages séquentielles peuvent être écrites sur différents dispositifs à mémoire flash par l'intermédiaire de 20 canaux séparés, ce qui permet de lire les pages séquentielles en parallèle en envoyant des commandes de lecture à chaque dispositif à mémoire flash respectif par l'intermédiaire des canaux séparés. De cette manière, une récupération de données à partir d'une mémoire flash peut être accomplie rapidement. [0011] Certains fabricants de dispositifs à mémoire flash peuvent configurer des pages de 25 mémoire flash qui sont dimensionnées pour contenir des multiples de 512 octets plus un espace supplémentaire pour la surcharge ECC. Cependant, dans un SSD d'entreprise, les unités de données hôte (ou secteurs) devant être stockées sur le SSD peuvent ne pas s'aligner avec les pages de mémoire flash. Par exemple, les unités de données hôte d'entreprise peuvent faire plus de 512 octets, comme 528 octets ou 536 octets, ce qui peut réduire la quantité d'espace pour les bits de parité ECC. De plus, le format ECC spécifié peut être insuffisant pour atteindre le - 3 - 3024271 nombre désiré de cycles de programmation/effacement avec le taux d'erreur binaire incorrigible requis parce que le taux d'erreur binaire brut de la mémoire flash augmente avec son usure. [0012] Lorsque des unités de données hôte supérieures à 512 octets sont écrites dans un SSD qui est configuré pour des unités de données hôte de 512 octets, le SSD peut s'arrêter avant de 5 remplir une page entière de la mémoire flash parce que des mots codés non divisés ne rempliront pas la page, ou diviser certains des mots codés sur deux pages. La première solution peut être coûteuse car il faut plus de mémoire flash pour stocker la même quantité de données hôte. La deuxième solution peut nécessiter la lecture de deux pages afin de récupérer le(s) mot(s) codé(s) pour une seule unité de données hôte, ce qui attache les ressources dans le SSD 10 tout en attendant de récupérer les deux pages. [0013] Le codage ECC ne peut pas être commencé tant que le mot codé entier n'a pas été récupéré à partir de la mémoire flash. Cependant, pour maximiser l'utilisation de l'espace de stockage de la mémoire flash, un mot codé peut être coupé sur deux pages de mémoire flash. Par exemple, si une page de mémoire flash a une taille de 16k0 et que chaque mot codé a une taille 15 de 4kO plus les bits de parité ECC, trois mots codés complets peuvent être écrits dans la page de mémoire flash, mais un quatrième mot codé complet ne peut pas tenir sur la page de mémoire flash à cause de l'espace occupé par les bits de parité ECC de chaque mot codé. Au lieu de laisser sans rien l'espace restant sur la page de mémoire flash, le mot codé suivant peut être coupé sur deux pages de mémoire flash. Dans cet exemple, 3k0 du mot codé de 4kO peuvent 20 être écrits dans la page de mémoire flash et le lkO restant du mot codé de 4kO peut être écrit dans une autre page de mémoire flash. [0014] Cependant, si un mot codé est coupé sur deux pages de mémoire flash, le décodeur doit attendre que les deux pages soient lues, ce qui peut nécessiter de mettre la première partie reçue dans une mémoire tampon jusqu'à ce que la deuxième partie soit reçue. Pour des systèmes 25 ECC plus évolués, tels que le contrôle de parité de faible densité (LDPC), les conséquences peuvent être plus sévères car les caractéristiques d'erreur des deux pages peuvent requérir un traitement différent. C'est pourquoi, il n'est pas désirable qu'un mot codé dépasse des limites de page et il est désirable de maximiser l'utilisation de l'espace de stockage de la mémoire flash. [0015] Au lieu de couper sur deux pages un mot codé qui ne tient pas sur une page, la 30 technologie selon l'invention divise l'unité de données hôte en deux mots codés séparés et écrit - 4 - 3024271 les deux mots codés sur des pages adjacentes. De cette manière, chaque mot codé ne dépasse pas les limites de page et l'espace de stockage de la mémoire flash peut être maximisé. [0016] Un seul codeur/décodeur ECC peut être conçu pour changer des longueurs de mot codé en utilisant le même nombre de bits de parité dans les mots codés les plus longs et dans les 5 mots codés les plus courts. Par exemple, le même nombre de bits de parité peut être utilisé pour un mot codé de lkO et pour un mot codé de 4k0. Le mot codé de lkO peut être surprotégé par l'ECC, car il peut ne pas nécessiter autant de bits de parité que ceux fournis par l'ECC ; mais, tout espace supplémentaire occupé par les bits de parité en excès est petit par comparaison avec le gain obtenu en réduisant le nombre de bits non utilisés dans la page en ayant des mots codés 10 additionnels plus petits. De même, si le volume de toutes les données hôte est contenu dans les mots codés les plus longs, les performances du système avec plusieurs tailles de mot codé approcheront alors celles d'un système avec des tailles fixes utilisant uniquement les mots codés les plus longs, et l'amplification de lecture pourra également être minimisée. [0017] La figure 1 représente un schéma de principe illustrant une série de mots codés donnée 15 à titre d'exemple, stockés sur plusieurs pages d'un bloc de mémoire flash selon un aspect de la technologie selon l'invention. Chaque mot codé 100a-1001, 102a-102b, 104a-104b, 106a-106b contient des données hôte et un codage de correction d'erreurs. La taille de chaque mot codé est sélectionnée à partir d'une liste de tailles possibles de mot codé. Par exemple, sur la figure 1, des mots codés 100a-1001 ont une première taille, des mots codés 102a-102b ont une deuxième 20 taille, des mots codés 104a-104b ont une troisième taille, et des mots codés 106a-106b ont une quatrième taille. [0018] La technologie selon l'invention génère et fournit des mots codés 100a-1001, 102a- 102b, 104a-104b, 106a-106b qui occupent autant d'espace que possible de chaque page de mémoire flash 120a-120d. Par exemple, après avoir écrit des mots codés 100a-100c dans la page 25 120a, la taille de mot codé la plus grande qui tiendra dans l'espace restant de la page 120a est le mot codé 102a, qui a la deuxième taille. En utilisant un mot codé de la taille du mot codé 102a, autant d'espace que possible de la page de mémoire flash 120a-120d est utilisé, contrairement au cas où le mot codé 104a ou le mot codé 106a sont écrits dans la page 120a. Même si la combinaison des mots codés 100a-100c et 102a n'occupe pas toujours toute la page 120a, 30 pratiquement toute la page 120a est occupée. Dans certains aspects, si la quantité d'espace - 5 - 3024271 restant dans une page particulière est inférieure à la taille de mot codé la plus petite, pratiquement toute la page est alors occupée. [0019] La figure 2 représente un schéma de principe illustrant les composants d'un disque électronique configuré pour stocker des données reçues à partir d'un système hôte selon les 5 aspects de la technologie de l'invention. Un système de stockage de données 200 comporte un processeur 201 (par exemple, un contrôleur SSD ou de stockage de données, un microprocesseur, ou autres), un ou plusieurs dispositifs de stockage 202 (par exemple, des dispositifs à mémoire flash ou d'autres types de dispositifs de stockage tels qu'une mémoire vive, des dispositifs de supports optiques ou magnétiques), une interface d'entrée/sortie (E/S) 10 203, une mémoire tampon de données 204, une mémoire de configuration 205, et un codeur/décodeur ECC 206. [0020] La mémoire tampon de données 204 fournit un mécanisme matériel pour faciliter la séparation de la partie amont du SSD qui s'interface avec un système hôte, et de la partie aval du SSD qui s'interface avec un dispositif de stockage 202. Des données sont stockées 15 temporairement dans la mémoire tampon de données 204 lorsqu'elles sont reçues pour un stockage par l'intermédiaire de l'interface d'E/S 203 à partir d'un système hôte, ou lorsqu'elles sont récupérées à partir du dispositif de stockage 202 pour une transmission par l'intermédiaire de l'interface d'E/S 203 au système hôte. Lors d'un fonctionnement et pour faciliter le stockage, la mémoire tampon de données 204 peut être partitionnée pour diviser temporairement les 20 données stockées dedans et pour créer des champs utiles de données dimensionnés de façon appropriée pour un codage en mots codés destinés à être utilisés par la partie aval du SSD. De cette manière, la partie aval du SSD est concernée par le codage de champs utiles de données en mots codés qui tiendront dans les limites de page du dispositif de stockage 202, et par le décodage des mots codés récupérés à partir du dispositif de stockage 202 en les champs utiles de 25 données de même taille. D'autre part, la partie amont du SSD est concernée par la réception et l'envoi d'unités de données hôte. [0021] La mémoire tampon de données 204 peut être réalisée par une mémoire volatile ou non volatile, et peut comporter un ou plusieurs blocs, une ou plusieurs pages, ou d'autres unités de mémoire. La fonctionnalité de la mémoire tampon de données 204 et du dispositif de 30 stockage 202 peut être mise en oeuvre dans le même dispositif de stockage ou distribuée à - 6 - 3024271 travers un groupe de dispositifs de stockage. En outre, les dispositifs de stockage peuvent avoir n'importe quelle forme comme une mémoire flash, une RAM, un support optique ou magnétique, ou autres. Dans un exemple, la mémoire tampon de données 204 est une section de mémoire réservée (par exemple, dynamiquement au moment de l'exécution) à l'intérieur d'un 5 ou plusieurs dispositifs de stockage 202. 100221 Le système de stockage de données 200 peut comporter un support lisible par machine (par exemple, un support non transitoire), stockant des instructions qui, lorsqu'elles sont exécutées, facilitent le transfert de données entre l'interface d'E/S 203, la mémoire tampon de données 204, et le dispositif de stockage 202, et d'autres procédés de transmission et/ou de 10 modification des données décrits ici. Dans un exemple, le système de stockage de données 200 reçoit une unité de données hôte à partir d'un dispositif hôte. L'unité de données hôte peut contenir un ou plusieurs secteurs de données ou d'autres unités de données dimensionnées selon le dispositif hôte. Les unités de données hôte peuvent avoir chacune la même taille, et la taille peut être déterminée par le système hôte. Le système hôte peut comprendre, par exemple, un 15 microprocesseur, une mémoire externe, et/ou des composants périphériques fonctionnant en concert avec un système de stockage de données qui comporte le dispositif de stockage. [0023] Des données reçues à partir d'un hôte peuvent être stockées dans le dispositif de stockage 202 en codant le champ utile de données obtenu à partir d'une unité de données hôte en un mot codé, et en stockant le mot codé dans le dispositif de stockage 202. L'unité de données 20 hôte est reçue à partir de l'hôte, dans la mémoire tampon de données 204, et la mémoire tampon de données 204 stocke l'unité de données hôte dans un champ utile de données. Le champ utile de données est codé par le codeur/décodeur ECC 206 et la mémoire tampon de données 204 facilite le remplissage d'un ou plusieurs mots codés d'une ou plusieurs tailles à partir du champ utile de données. Dans certains aspects, les tailles de mot codé disponibles sont basées sur les 25 capacités du codeur/décodeur ECC 206. Par exemple, le codeur/décodeur ECC 206 peut être capable de coder et de décoder des mots codés de 1k0, des mots codés de 2k0, des mots codés de 3k0, et des mots codés de 4k0. Dans certains aspects, le contrôleur 201 indique au codeur/décodeur ECC 206 la taille du mot codé à utiliser pour coder un champ utile de données particulier. Dans certains aspects, le codeur/décodeur ECC 206 peut déterminer dynamiquement 30 la taille de mot codé à utiliser en fonction de la taille du champ utile de données à coder. - 7 - 3024271 [0024] Le débit du codeur/décodeur ECC 206 peut être mesuré en mots codés par seconde. Par exemple, le codeur/décodeur ECC 206 peut prendre la même quantité de temps pour coder un mot codé de 4kO et un mot codé de 1k0. Dans ce cas, il est désirable d'avoir des mots codés d'une taille aussi grande que possible, car le temps nécessaire pour coder un mot codé de 4kO 5 est inférieur au temps nécessaire pour coder quatre mots codés de 1k0. En variante, le débit du codeur/décodeur ECC 206 peut être mesuré en octets par seconde. Par exemple, le codeur/décodeur ECC 206 peut mettre moins de temps pour coder un mot codé de lkO que pour coder un mot codé de 4kO. Dans ce cas, utiliser des mots codés plus petits n'est pas toujours aussi efficace que d'utiliser des mots codés plus longs, car il peut y avoir un temps de traitement 10 par mot codé. [0025] Dans l'exemple décrit, le système de stockage de données 200 peut diviser une unité de données hôte reçue entre deux champs utiles de données. Le premier champ utile de données peut être codé dans un premier mot codé et le deuxième champ utile de données peut être codé dans un deuxième mot codé. Comme décrit ci-dessus, la taille du mot codé à coder pour chaque 15 champ utile de données peut être déterminée par le contrôleur 201 et indiquée au codeur/décodeur ECC 206. La construction des mots codés peut avoir lieu dans la mémoire tampon de données 204. La mémoire tampon de données 204 peut stocker des données hôte reçues à partir de l'hôte ; la mémoire tampon de données 204 peut stocker des champs utiles de données créés par le contrôleur 201, et la mémoire tampon de données 204 peut stocker des 20 mots codés encodés prêts à être écrits dans le dispositif de stockage 202. [0026] Après que les mots codés ont été générés, les mots codés peuvent être écrits dans une ou plusieurs pages de la mémoire flash. Dans certains aspects, les mots codés peuvent être stockés à des adresses respectives d'une page de mémoire flash. Dans un aspect, les mots codés peuvent être stockés séquentiellement. Dans l'exemple décrit, le premier mot codé contenant la 25 première partie de l'unité de données hôte reçue peut être écrit dans une première page et le deuxième mot codé contenant la deuxième partie de l'unité de données hôte reçue peut être écrit dans une deuxième page. Comme décrit ci-dessus, les première et deuxième pages peuvent être des pages adjacentes, car les pages de mémoire flash sont écrites séquentiellement. Les adresses respectives auxquelles chaque mot codé est stocké peuvent être prédéterminées, ou déterminées 30 lors de l'exécution, en fonction de la longueur de mot codé, de la taille de page de mémoire flash, et d'une adresse de début d'une page de mémoire flash respective et peuvent être stockées, - 8 - 3024271 par exemple, dans une mémoire de configuration 205. La mémoire de configuration 205 peut comprendre une table de consultation et, avant de stocker ou de récupérer un mot codé à partir du dispositif de stockage 202, le processeur 201 peut récupérer à partir de la table de consultation une adresse respective associée au mot codé. 5 [0027] Dans certains aspects, le contrôleur SSD maintient une adresse virtuelle de chaque unité de données hôte stockée dans la mémoire flash. Lorsque des données hôte sont reçues pour un stockage, les unités de données hôte sont associées à des adresses logiques respectives. Le contrôleur mappe les adresses logiques respectives des unités de données hôte aux adresses virtuelles de mots codés correspondants de données dans lesquelles les unités de données hôte 10 étaient codées. De cette manière, chaque unité de données hôte peut être retrouvée parmi la pluralité de mots codés de données, une fois stockée. L'adresse virtuelle de chacun de la pluralité de mots codés est ensuite mappée à une adresse physique dans la mémoire flash. En conséquence, le contrôleur SSD connaît l'emplacement de chaque unité de données hôte, même si cette unité de données hôte commence à un emplacement à l'intérieur d'un mot codé (par 15 exemple, au début de la position de données), tombe entièrement à l'intérieur d'un seul mot codé, dépasse les limites de mot codé ou dépasse les limites de page de mémoire flash. Dans un exemple, le mappage de l'adresse logique comprend une valeur de décalage pour chacune des premières adresses virtuelles de sorte qu'une unité de données hôte peut être indexée et récupérée à partir d'un ou plusieurs champs utiles de données codés dans un seul mot codé ou 20 entre plusieurs mots codés. [0028] Similairement, le contrôleur SSD peut stocker les un ou plusieurs mots codés à des adresses de décalage respectives, les adresses de décalage étant basées sur la longueur de mot codé, la taille de page de mémoire flash, et sur une adresse de début d'une page de mémoire flash. En conséquence, le stockage des mots codés dans le dispositif de stockage peut consister à 25 récupérer, à partir d'une table de consultation, une adresse de décalage respective associée à une page de mémoire flash du dispositif de stockage, et à stocker un mot codé respectif à l'adresse de décalage respective. [0029] En référence à la figure 2, le processeur 201 peut fonctionner comme un contrôleur SSD. Le processeur 201 peut utiliser la mémoire de configuration 205 pour un stockage 30 temporaire de données et d'informations utilisées pour gérer le système de stockage de données - 9 - 3024271 200. Le processeur 201 peut comporter plusieurs composants internes (non représentés) tels qu'une mémoire morte, une interface de composant de mémoire flash (par exemple, un multiplexeur destiné à gérer un transport d'instructions et de données le long d'une connexion série vers le dispositif de stockage 202), une interface d'E/S, une circuiterie de correction d'erreurs, et autres. Dans certains aspects, tous ces éléments de contrôleur 201 peuvent être intégrés dans une seule puce. Dans d'autres aspects, ces éléments peuvent être séparés sur leur propre carte de circuit imprimé. [0030] Le processeur 201 peut également être configuré pour exécuter un code ou des instructions destinés à exécuter les opérations et la fonctionnalité décrites ici, gérer un flux de 10 requête et des mappages d'adresses, et pour exécuter des calculs et générer des commandes. Le processeur 201 est configuré pour contrôler et pour commander le fonctionnement des composants du système 200. Le processeur peut être un microprocesseur universel, un microcontrôleur, un processeur de signal numérique (DSP), un circuit intégré spécifique à l'application (ASIC), un circuit intégré prédiffusé programmable (FPGA), un dispositif logique 15 programmable (PLD), un contrôleur, une machine à états, une logique à portes, des composants matériels discrets, ou une combinaison de ce qui précède. Une ou plusieurs séquences d'instructions peuvent être stockées sous la forme de microprogrammes sur une ROM à l'intérieur du processeur 201 et/ou sur son processeur. Une ou plusieurs séquences d'instructions peuvent être stockées sous la forme de logiciels et lues à partir d'un support de stockage 205, 20 d'un dispositif de stockage 202, ou reçues à partir d'un dispositif hôte (par exemple, par l'intermédiaire d'une interface d'E/S 203). Une ROM, un support de stockage 205, un dispositif de stockage 202 représentent des exemples de supports lisibles par machine ou par ordinateur (par exemple, des supports non transitoires) sur lesquels des instructions/un code exécutables par un processeur 201 et/ou leur processeur peuvent être stockées. Des supports lisibles par 25 machine ou par ordinateur peuvent généralement désigner n'importe quel support utilisé pour fournir des instructions au processeur 201 et/ou à son processeur, notamment des supports volatiles, tels qu'une mémoire dynamique utilisée pour des supports de stockage 205 ou pour des mémoires tampons à l'intérieur d'un processeur 201, et des supports non volatiles, tels que des supports électroniques, des supports optiques et des supports magnétiques. 30 [0031] Dans certains aspects, le dispositif de stockage 202 comprend une mémoire flash. Le processeur 201 est configuré pour stocker, dans le dispositif de stockage 202, des données -10- 3024271 reçues à partir d'un dispositif hôte (par exemple, des données de secteur hôte décrites précédemment) en réponse à une commande d'écriture envoyée à partir du dispositif hôte. Le processeur 201 est en outre configuré pour lire des données stockées dans le dispositif de stockage 202 et pour transférer les données lues vers le dispositif hôte en réponse à une 5 commande de lecture envoyée à partir du dispositif hôte. Un dispositif hôte peut être n'importe quel dispositif configuré pour être couplé au système de stockage de données 200 par l'intermédiaire de l'interface d'E/S 203 et pour stocker des données dans le système de stockage de données 200. Le dispositif hôte peut être un système informatique tel qu'un ordinateur personnel, un serveur, un poste de travail, un ordinateur portable, un assistant numérique 10 personnel, un téléphone intelligent, et autres. En variante, un dispositif hôte peut être un dispositif électronique tel qu'une caméra numérique, un lecteur audio numérique, un magnétoscope numérique, et autres. [0032] Dans certains aspects, une mémoire de configuration est un support de stockage. À cet égard, un support de stockage 205 représente une mémoire volatile utilisée pour stocker 15 temporairement des données et des informations utilisées pour gérer un système de stockage de données 200. Selon un aspect de la technologie de l'invention, un support de stockage 205 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 oeuvre un support de stockage 205. Une mémoire 205 peut être mise en oeuvre en utilisant un seul module RAM ou plusieurs modules 20 RAM. Si un support de stockage 205 est décrit comme étant distinct d'un processeur 201, l'homme du métier notera qu'un support de stockage 205 peut être incorporé dans un processeur 201 sans sortir du cadre de la technologie selon l'invention. En variante, un support de stockage 205 peut être une mémoire non volatile telle qu'un disque magnétique, une mémoire flash, un SSD périphérique, et autres. 25 [0033] Comme illustré sur la figure 2, le système de stockage de données 200 peut comporter également l'interface d'E/S 203 (par exemple, une interface hôte). L'interface d'E/S 203 est configurée pour être couplée à un dispositif hôte, pour recevoir des données à partir du dispositif hôte et pour envoyer des données au dispositif hôte. L'interface d'E/S 203 peut comprendre des connexions électriques et physiques permettant de coupler fonctionnellement le dispositif hôte 30 au processeur 201, par exemple, par l'intermédiaire de l'interface d'E/S du processeur 201. L'interface d'E/S 203 est configurée pour communiquer des données, des adresses, et des 3024271 signaux de commande entre un dispositif hôte et le processeur 201. En variante, l'interface d'E/S du processeur 201 peut comporter et/ou être combinée à l'interface d'E/S 203. L'interface d'E/S 203 peut être configurée pour mettre en oeuvre une interface standard, telle que Serial-Attached SCSI (SAS), interface Fibre Channel, PCI Express (PCIe), SATA, USB, et autres. 5 L'interface d'E/S 203 peut être configurée pour mettre en oeuvre une seule interface. En variante, l'interface d'E/S 203 (et/ou l'interface d'E/S du processeur 201) peut être configurée pour mettre en oeuvre plusieurs interfaces, qui sont sélectionnables individuellement en utilisant un paramètre de configuration sélectionné par un utilisateur ou programmé au moment de l'assemblage. L'interface d'E/S 203 peut comporter une ou plusieurs mémoires tampons 10 destinées à mettre en mémoire tampon les transmissions entre un dispositif hôte et le processeur 201. [0034] Le dispositif de stockage 202 représente un dispositif de mémoire non volatile permettant de stocker des données. Selon des aspects de la technologie selon l'invention, le dispositif de stockage 202 comprend, par exemple, une mémoire flash NAND. Le dispositif de 15 stockage 202 peut comporter un seul dispositif ou une seule puce de mémoire flash, comme décrit sur la figure 2, ou peut comprendre plusieurs dispositifs ou puces de mémoire flash disposés dans plusieurs canaux. Une mémoire flash n'est pas limitée à une capacité ou à une configuration particulière. Par exemple, le nombre de blocs physiques, le nombre de pages physiques par bloc physique, le nombre de secteurs par page physique, et la taille des secteurs 20 peuvent varier dans le cadre de la technologie selon l'invention. [0035] La figure 3 est un organigramme illustrant un processus, donné à titre d'exemple, permettant de stocker des données dans un disque électronique selon des aspects de la technologie de l'invention. Le processus illustratif représenté sur la figure 3 peut être exécuté avec une mémoire flash, qui représente un exemple de mémoire non volatile à semi-conducteur 25 utilisée dans des disques électroniques de stockage de données. D'autres types de mémoire non volatile à semi-conducteur peuvent être utilisés avec la présente technologie, notamment ceux qui sont organisés dans des pages de longueur finie. D'autres types de mémoire non volatile à semi-conducteur peuvent comporter, sans limitation, une mémoire vive restrictive (ReRAM ou RRAM), une mémoire vive statique non volatile (nvSRAM), une mémoire vive ferroélectrique 30 (FeRAM), une mémoire vive magnétorésistive (MRAM), une RAM de transfert de couple de rotation (STTRAM), une mémoire à changement de phase (PCM ou PCRAM), une mémoire à - 12 - 3024271 cellule de métallisation programmable (PMC), une mémoire silicium-oxyde-nitrure-oxydesilicium (SONOS), une mémoire racetrack ou paroi de domaine (DWM), et une nano-RAM (NRAM). Plusieurs unités de données hôte (par exemple, des secteurs) destinées à être stockées dans une mémoire non volatile à semi-conducteur, par exemple une mémoire flash, peuvent être 5 reçues par le contrôleur 201 (302). Des unités de données hôte peuvent comporter un ou plusieurs secteurs de données fournis par un système hôte. Comme décrit ci-dessus, les unités de données hôte peuvent avoir chacune la même taille. [0036] Les multiples unités de données hôte sont divisées en une pluralité de champs utiles de données, un premier champ utile de données comprenant une première unité de données hôte et 10 un deuxième champ utile de données comprenant une partie d'une deuxième unité de données hôte (304). À cet égard, certains des champs utiles de données comprennent une unité de données hôte entière et d'autres comprennent des parties d'unités de données hôte. C'est pourquoi, si les unités de données hôte ont chacune la même taille, les champs utiles de données peuvent ne pas avoir tous la même taille. 15 [0037] Le premier champ utile de données est codé en un premier mot codé ayant une première taille de mot codé (306). Un deuxième champ utile de données est codé en un deuxième mot codé ayant une deuxième taille de mot codé, la deuxième taille de mot codé étant différente de la première taille de mot codé (308). Comme expliqué ci-dessus, la première taille de mot codé et la deuxième taille de mot codé peuvent dépendre des capacités du 20 codeur/décodeur ECC 206. [0038] Le premier mot codé et le deuxième mot codé sont écrits dans une première page de la mémoire flash (310). En divisant la deuxième unité de données hôte en plusieurs champs utiles de données, un espace de stockage de mémoire flash peut être maximisé. Par exemple, en référence à la figure 1, si une page 120a de mémoire flash a une taille de 16k0 et de la place 25 pour une surcharge, elle peut stocker trois mots codés 100a-100c ayant chacun des tailles de 4kO, plus des bits de parité ECC. Cependant, la page 120a dans la mémoire flash peut ne pas avoir suffisamment d'espace restant pour un quatrième mot codé de 4kO et pour les bits de parité ECC. Par contre, elle peut avoir de la place pour un mot codé de 3kO 102a, plus les bits de parité ECC. Si la mémoire flash n'a pas assez d'espace restant pour un mot codé de 3kO, le 30 contrôleur 201 peut alors vérifier s'il y a suffisamment de place pour un mot codé de 1k0. S'il - 13 - 3024271 n'y a pas assez de place pour un mot codé même le plus petit, un mot codé de la taille maximale, dans cet exemple 4kO, peut alors être écrit dans la page suivante. [0039] Une fois que le deuxième mot codé 102a a été écrit dans la première page 120a de la mémoire flash, un troisième champ utile de données contenant la partie restante de la deuxième 5 unité de données hôte peut être codé en un troisième mot codé 104a ayant une troisième taille de mot codé. Dans l'exemple ci-dessus, le deuxième mot codé 102a a une taille de 3k0, de sorte que le troisième mot codé 104a a une taille de 1k0. Le troisième mot codé 104a est écrit dans une deuxième page 120b qui est adjacente à la première page 120a. Comme décrit ci-dessus, si le système reçoit une commande de lecture d'une unité de données hôte qui est divisée sur deux 10 mots codés 102a et 104a sur deux pages 120a et 120b, il peut décoder les deux mots codés 102a et 104a, et il ne lit aucune autre donnée sur la première page 120a ni sur la deuxième page 120b pour accéder à l'unité de données hôte demandée. [0040] Pour avoir un nombre aussi grand que possible de mots codés les plus grands, le contrôleur 201 peut vérifier si un ou plusieurs mots codés de la taille maximale peuvent être 15 écrits dans la page. Dans ce cas, il y a suffisamment de place pour plusieurs mots codés de la taille maximale, de sorte que trois mots codés supplémentaires 100d-100f de la première taille de mot codé (dans cet exemple, 4kO) sont écrits dans la deuxième page 120b. Après avoir écrit un mot codé 104a ayant une taille de mot codé de lkO et des mots codés 100d-100f ayant chacun une taille de mot codé de 4kO, la deuxième page 120b, qui a une taille de 16k0, ne peut 20 pas contenir un autre mot codé de 3k0, mais peut contenir un mot codé 106a ayant une taille de mot codé de 2k0. Comme décrit précédemment, l'unité de données hôte suivante devant être stockée sur la mémoire flash est divisée en deux champs utiles de données et codée en deux mots codés 106a et 106b. Un mot codé 106a est écrit dans la deuxième page 120b et l'autre mot codé 106b est écrit dans une troisième page 106b. 25 [0041] Le processus continue en utilisant un nombre de mots codés de taille maximale le plus grand possible. Sur la figure 1, les mots codés 100g-1001, 102b, 104b sont écrits dans les pages 120c-120d jusqu'à ce qu'une page se termine avec un mot codé de la taille de mot codé maximale. Dans cet exemple, une quatrième page 120d se termine avec un mot codé de la taille de mot codé maximale 1001. Un mot codé de lkO ne tiendra pas dans la quatrième page 120d. 30 Les mots codés 100a-1001, 102a-102b, 104a-104b, 106a-106b sont écrits et placés dans un -14- 3024271 schéma de tailles de mot codé. Dans ce cas, le schéma est 4kB, 4kB, 4kB, 3kB, 1kB, 4kB, 4kB, 4kB, 2kB, 2kB, 4kB, 4kB, 4kB, 1kB, 3kB, 4kB, 4kB, 4kB. Ce même schéma peut être répété lors du codage et du stockage des unités de données hôte restantes. [0042] L'homme du métier notera que les divers blocs, modules, éléments, composants, 5 procédés, et algorithmes illustratifs décrits ici peuvent être mis en oeuvre sous une forme matérielle électronique, logicielle informatique, ou une combinaison des deux. Pour illustrer cette interchangeabilité matérielle et logicielle, divers blocs, modules, éléments, composants, procédés, et algorithmes donnés à titre d'exemple ont été décrits généralement ci-dessus en termes de leur fonctionnalité. Le choix de la mise en oeuvre sous forme matérielle ou logicielle 10 d'une telle fonctionnalité dépend de l'application particulière et des contraintes de conception imposées sur l'ensemble du système. L'homme du métier peut mettre en oeuvre la fonctionnalité décrite de diverses façons, pour chaque application particulière. Divers composants et blocs peuvent être arrangés différemment (par exemple, arrangés dans un ordre différent, ou partitionnés d'une façon différente) sans sortir du cadre de la technologie de l'invention. 15 [0043] Il est clair que l'ordre ou la hiérarchie spécifique des étapes des processus décrits sont une illustration d'approches données à titre d'exemple. Selon des préférences de conception, il faut comprendre que l'ordre ou la hiérarchie spécifiques des étapes des processus peuvent être modifiés. Certaines des étapes peuvent être exécutées simultanément. Les revendications annexées présentent les éléments des diverses étapes dans un ordre illustratif, et ne doivent pas 20 être considérées comme étant limitées à l'ordre ou à la hiérarchie spécifiques présentés. [0044] La description précédente est destinée à permettre à l'homme du métier de pratiquer les divers aspects décrits ici. La précédente description fournit divers exemples de la technologie selon l'invention, et la présente technologie n'est pas limitée à ces exemples. Diverses modifications de ces aspects apparaîtront clairement à l'homme du métier, et les principes 25 génériques définis ici peuvent être appliqués à d'autres aspects. Ainsi, les revendications ne sont pas destinées à se limiter aux aspects indiqués ici, mais leur portée doit être étendue conformément au langage des revendications, dans lesquelles une référence à un élément au singulier ne signifie pas « un et uniquement un » à moins que cela ne soit expressément stipulé, mais plutôt « un ou plusieurs ». Sauf indication contraire, le terme « quelque(s) » désigne un ou 30 plusieurs. Les pronoms au masculin (par exemple, son) comprennent le genre féminin et le genre -15- 3024271 neutre (par exemple, sa et son) et vice versa. Les titres et les sous-titres, s'ils en existent, sont utilisés uniquement par souci de commodité et ne limitent pas l'invention. [0045] Les prédicats « configuré pour », « opérable pour » et « programmé pour » n'impliquent aucune modification particulière tangible ou non tangible d'un sujet, mais sont 5 conçus pour être utilisés de façon interchangeable. Par exemple, un processeur configuré pour contrôler et commander une opération ou un composant peut également signifier que le processeur est programmé pour contrôler et pou. r commander l'opération ou le processeur permettant de contrôler et de commander l'opération. De même, un processeur configuré pour exécuter un code peut être interprété comme un processeur programmé pour exécuter un code ou 10 opérable pour exécuter un code. [0046] Un mot tel qu'un « aspect » n'implique pas qu'un tel aspect est essentiel à la technologie de l'invention ou qu'un tel aspect s'applique à toutes les configurations de la présente technologie. Une description relative à un aspect peut s'appliquer à toutes les configurations, ou à une ou plusieurs configurations. Un aspect peut fournir un ou plusieurs 15 exemples. Un mot tel qu'un aspect peut désigner un ou plusieurs aspects et vice versa. Un terme tel qu'un « mode de réalisation » n'implique pas qu'un tel mode de réalisation est essentiel à la technologie selon l'invention ou qu'un tel mode de réalisation s'applique à toutes les configurations de la technologie selon l'invention. Une description concernant un mode de réalisation peut s'appliquer à tous les modes de réalisation, ou à un ou plusieurs modes de 20 réalisation. Un mode de réalisation peut fournir un ou plusieurs exemples. Un terme tel qu'un « mode de réalisation » peut désigner un ou plusieurs modes de réalisation et vice versa. Un mot tel qu'une « configuration » n'implique pas qu'une telle configuration est essentielle à la technologie selon l'invention ou qu'une telle configuration s'applique à toutes les configurations de la technologie selon l'invention. Une description concernant une configuration peut 25 s'appliquer à toutes les configurations, ou à une ou plusieurs configurations. Une configuration peut fournir un ou plusieurs exemples. Un mot tel qu'une « configuration » peut désigner une ou plusieurs configurations et vice versa. [0047] Le mot « exemplaire » est utilisé ici pour signifier « servir à titre d'exemple ou d'illustration ». Tout aspect ou toute conception décrits ici comme « exemplaires » ne doivent -16- 3024271 pas nécessairement être interprétés comme préférés ou avantageux par rapport à d'autres aspects ou à d'autres conceptions. [0048] Tous les équivalents structurels et fonctionnels des éléments des divers aspects décrits dans cette description qui sont connus ou deviendront connus à l'homme du métier sont 5 expressément incorporés ici par référence et sont destinés à entrer dans le cadre des revendications. En outre, aucun élément décrit ici n'est destiné à être dédié au public, qu'une telle description soit explicitement développée ou pas dans les revendications. Aucun élément des revendications ne doit être interprété selon les clauses de 35 U.S.C. §112, sixième paragraphe, à moins que l'élément ne soit expressément décrit en utilisant l'expression « moyens 10 destinés à» ou, dans le cas d'une revendication du procédé, à moins que l'élément ne soit décrit en utilisant l'expression « étape consistant à ». En outre, dans la mesure où les termes « inclure », « avoir », ou autres sont utilisés dans la description ou dans les revendications, de tels termes sont destinés à être inclusifs similairement au terme « comprendre », comme « comprendre » est interprété lorsqu'il est employé comme un mot transitionnel dans une 15 revendication. -17- REVENDICATIONS1. Procédé permettant de stocker des données dans un disque électronique, le procédé comprenant les étapes suivantes : recevoir une pluralité d'unités de données hôte pour un stockage dans une mémoire non volatile à semi-conducteur ; diviser la pluralité d'unités de données hôte en une pluralité de champs utiles de données, un premier champ utile de données comportant une première unité de données hôte et un deuxième champ utile de données comportant une partie d'une deuxième unité de données hôte ; coder le premier champ utile de données en un premier mot codé ayant une première taille de mot codé ; coder le deuxième champ utile de données en un deuxième mot codé ayant une deuxième taille de mot codé, la deuxième taille de mot codé étant différente de la première taille de mot codé ; et écrire le premier mot codé et le deuxième mot codé dans une première page de la mémoire non volatile à semi-conducteur. 2. Procédé selon la revendication 1, comprenant en outre les étapes suivantes : coder un ensemble de champs utiles de données en une pluralité de mots codés ayant la 20 première taille de mot codé, l'ensemble de champs utiles de données comportant deux champs utiles de données ou plus de la pluralité de champs utiles de données ; et écrire la pluralité de mots codés ayant la première taille de mot codé dans la première page de la mémoire non volatile à semi-conducteur. 25 3. Procédé selon la revendication 1, dans lequel un troisième champ utile de données comprend une partie restante de la deuxième unité de données hôte, le procédé comprenant en outre les étapes suivantes : diviser une partie restante de la deuxième unité de données hôte en un troisième champ utile de données ; - 18 - 3024271 coder le troisième champ utile de données en un troisième mot codé ayant une troisième taille de mot codé, la troisième taille de mot codé étant différente de la première taille de mot codé et de la deuxième taille de mot codé ; et écrire le troisième mot codé dans une deuxième page de la mémoire non volatile à semi- 5 conducteur. 4. Procédé selon la revendication 3, dans lequel la première page et la deuxième page sont dans un ordre séquentiel dans la mémoire non volatile à semi-conducteur. 10 5. Procédé selon la revendication 3, dans lequel la deuxième page comprend trois mots codés ayant chacun une taille différente de mot codé. 6. Procédé selon la revendication 1, dans lequel une pluralité de mots codés sont écrits et placés dans un schéma de répétition de tailles de mot codé à travers une pluralité de pages de la 15 mémoire non volatile à semi-conducteur. 7. Procédé selon la revendication 1, dans lequel la première taille de mot codé et la deuxième taille de mot codé sont sélectionnées à partir d'une pluralité de tailles de mot codé. 8. Procédé selon la revendication 1, dans lequel le premier mot codé et le deuxième mot codé comprennent en outre un certain nombre de bits de parité, le nombre de bits de parité dans le premier mot codé étant identique au nombre de bits de parité dans le deuxième mot codé. 9. Procédé selon la revendication 1, dans lequel l'étape consistant à diviser la pluralité d'unités de données hôte en la pluralité de champs utiles de données comprend : attribuer une quantité en fonction d'une taille de mot codé à écrire dans la mémoire non volatile à semiconducteur. 10. Système, comprenant : une mémoire non volatile à semi-conducteur ; -19- 3024271 une ou plusieurs mémoires tampons de données configurées pour recevoir une pluralité d'unités de données hôte pour un stockage dans la mémoire non volatile à semi-conducteur ; un contrôleur configuré pour : diviser la pluralité d'unités de données hôte dans les une ou plusieurs mémoires tampons 5 de données en une pluralité de champs utiles de données, un premier champ utile de données comportant une première unité de données hôte et un deuxième champ utile de données comportant une partie d'une deuxième unité de données hôte ; et un codeur/décodeur configuré pour : coder le premier champ utile de données en un premier mot codé ayant une première 10 taille de mot codé ; et coder le deuxième champ utile de données en un deuxième mot codé ayant une deuxième taille de mot codé, la deuxième taille de mot codé étant différente de la première taille de mot codé, le contrôleur étant en outre configuré pour écrire le premier mot codé et le deuxième mot 15 codé dans une première page de la mémoire non volatile à semi-conducteur. 11. Système selon la revendication 10, dans lequel le codeur/décodeur est en outre configuré pour coder un ensemble de champs utiles de données en une pluralité de mots codés ayant la première taille de mot codé, l'ensemble de champs utiles de données comportant deux champs 20 utiles de données ou plus de la pluralité de champs utiles de données, et le contrôleur étant en outre configuré pour écrire la pluralité de mots codés ayant la première taille de mot codé dans la première page de la mémoire non volatile à semi-conducteur. 12. Système selon la revendication 10, dans lequel un troisième champ utile de données 25 comprend une partie restante de la deuxième unité de données hôte, le contrôleur étant en outre configuré pour diviser une partie restante de la deuxième unité de données hôte en un troisième champ utile de données, le codeur/décodeur étant en outre configuré pour coder le troisième champ utile de données en un troisième mot codé ayant une troisième taille de mot codé, la troisième taille de 30 mot codé étant différente de la première taille de mot codé et de la deuxième taille de mot codé, et -20- 3024271 le contrôleur étant en outre configuré pour écrire le troisième mot codé dans une deuxième page de la mémoire non volatile à semi-conducteur. 13. Système selon la revendication 12, dans lequel la première page et la deuxième page sont 5 en ordre séquentiel dans la mémoire non volatile à semi-conducteur. 14. Système selon la revendication 12, dans lequel la deuxième page comprend trois mots codés ayant chacun une taille différente de mot codé. 10 15. Système selon la revendication 10, dans lequel une pluralité de mots codés sont écrits et placés dans un schéma de répétition de tailles de mot codé à travers une pluralité de pages de la mémoire non volatile à semi-conducteur. 16. Système selon la revendication 10, dans lequel la première taille de mot codé et la 15 deuxième taille de mot codé sont sélectionnées à partir d'une pluralité de tailles de mot codé. 17. Système selon la revendication 16, dans lequel la pluralité de tailles de mot codé dépend de la capacité du codeur/décodeur. 20 18. Système selon la revendication 10, dans lequel le premier mot codé et le deuxième mot codé comprennent en outre un certain nombre de bits de parité, le nombre de bits de parité dans le premier mot codé étant identique au nombre de bits de parité dans le deuxième mot codé. 19. Système selon la revendication 10, dans lequel l'étape consistant à diviser la pluralité 25 d'unités de données hôte en la pluralité de champs utiles de données comprend : attribuer une quantité en fonction d'une taille de mot codé à écrire dans la mémoire non volatile à semiconducteur. 20. Support lisible par machine sur lequel sont stockées des instructions qui, lorsqu'elles sont 30 exécutées, mettent en oeuvre un procédé, le procédé comprenant les étapes suivantes : - 21 - 3024271 recevoir une pluralité d'unités de données hôte pour un stockage dans une mémoire non volatile à semi-conducteur ; diviser la pluralité d'unités de données hôte en une pluralité de champs utiles de données, un premier champ utile de données comportant une première unité de données hôte et un 5 deuxième champ utile de données comportant une partie d'une deuxième unité de données hôte ; coder le premier champ utile de données en un premier mot codé ayant une première taille de mot codé ; coder le deuxième champ utile de données en un deuxième mot codé ayant une deuxième taille de mot codé, la deuxième taille de mot codé étant différente de la première taille de mot 10 codé ; et écrire le premier mot codé et le deuxième mot codé dans une première page de la mémoire non volatile à semi-conducteur. -22-