Brevet FR2875352A1 — publié le 20060317

Procédé de détection et de correction d'erreurs pour une mémoire et circuit intégré correspondant L'invention concerne la détection et la correction d'erreurs dans la lecture de données stockées dans une mémoire, par exemple une mémoire non volatile de type FLASH/EEPROM ou bien une mémoire magnétique de type MRAM. L'utilisation des codes correcteurs d'erreurs est maintenant largement répandue dans les systèmes à mémoire. Ils sont destinés à corriger aussi bien les défauts intervenus dans la fabrication des circuits, en complément ou en remplacement des traditionnelles colonnes de redondance, que pour corriger les défauts intervenant pendant le fonctionnement de la mémoire. Les circuits de mémoire dynamiques (DRAM) comprennent de plus en plus souvent des blocs de codes correcteurs d'erreurs pour, par exemple, augmenter les rendements de fabrication ou bien pour corriger les erreurs générées par les bombardements de particules alpha intervenant durant la vie du produit. Les mémoires non-volatiles de type flash/EEPROM associent également de plus en plus souvent leurs circuits de contrôle à des systèmes correcteurs d'erreurs pour augmenter les caractéristiques de rétention de données et la fiabilité des circuits, notamment dans le domaine des mémoires multi-niveaux/bit. Généralement, dans ces applications, les données codées sont lues et traitées par un décodeur qui fournit une indication sur la présence d'erreurs et leur nombre, et éventuellement les corrige, ou indique que la correction n'est pas possible. La complexité des codeurs/décodeurs varie d'un système à l'autre mais toujours en utilisant le principe d'une lecture et d'une analyse. Les circuits correcteurs les plus utilisés dans le domaine des mémoires repose sur l'utilisation de codes linéaires de type Hamming ou ReedSolomon (RS) appartenant à la famille des codes de Bose-ChaudhuriHocquenghem (BCH). Ces codes se caractérisent par la longueur de leurs blocs-codes. Plus précisément, ces blocs-codes comportent k données contenant l'information utile et r bits de contrôle, la somme k+r étant égale à n et définissant la longueur du bloc-code. L'évaluation des caractéristiques des blocs correcteurs doit prendre en compte l'augmentation de surface apportée par les cellules stockant les bits de contrôle, la surface occupée par les codeurs/décodeurs ainsi que les retards engendrés par le passage des données à travers ces blocs qui pénalisent les temps d'accès des mémoires. L'intégration des circuits correcteurs résulte alors le plus souvent d'un compromis effectué entre ces différents critères et le gain en fiabilité, et ne permet généralement pas d'intégrer des codes trop complexes. Les réalisations industrielles s'orientent donc aujourd'hui vers l'intégration de codes permettant de corriger une erreur et de détecter deux erreurs. De tels codes détecteurs et correcteurs sont par exemple ceux appelés codes SEC-DED ( Single Error Correction-Double Error Detection ). Un exemple d'implémentation de tels codes est par exemple décrit dans la demande de brevet Etats-Unis n 3 623 155. D'autres codes, de type à redondance cyclique (CRC: Cyclic Redonduncy code) peuvent parfois être utilisés. Ces codes reposent sur le principe de la division polynomiale. Plus précisément, l'information binaire à coder est considérée comme un polynome qui, une fois divisé par un nombre défini, donne un reste qui est codé par les bits de contrôle. Les polynomes caractéristiques les plus connus sont le CRC16-forward (x16+x15+ x2+1) et le CRC-CCITT (x16+x12+x5+1). Bien que ces codes soient simples et présentent un faible surcoût de surface, leur inconvénient réside dans le fait qu'ils constituent seulement des codes de détection d'erreur et ne permettent pas d'effectuer des corrections. Leur emploi s' est alors plutôt destiné aux tests des mémoires qui utilisent un circuit spécifique de test intégré lors de la fabrication de la mémoire et l'algorithme de test associé (connu par l'homme du métier sous la dénomination anglaise BIST: Built-In-Self-Test . Dans les systèmes intégrant des codes correcteurs de type SECDED, si le nombre d'erreurs dépasse l'unité, alors la correction n'est pas possible et l'information contenue dans la mémoire reste erronée. De plus, si le nombre d'erreurs est supérieur à deux, le système n'est plus capable de détecter les erreurs et fournit alors une information faussée. Ce principe de détection-correction d'erreur est très adapté aux cas pour lesquels les erreurs sont dues à la défaillance de bits isolés mais est peu performant dès que les erreurs proviennent d'une dérive plus globales des caractéristiques des points mémoire. Par ailleurs, les codes à redondance cyclique ( du type CRC), bien que performants en détection d'erreurs, sont aujourd'hui restreints au domaine du test (BIST) dans lequel une information simple, du type circuit bon ou mauvais , est recherchée. Ces systèmes apparaissent donc rapidement limitatifs et peu robustes face à la dégradation de données d'une mémoire intervenant dans la vie du produit. Quelques tentatives pour améliorer les systèmes sont aujourd'hui reportées dans la littérature. Plus précisément, certains font appel à l'utilisation d'une mémoire morte (US 4 163 147). D'autres apportent la possibilité de corriger deux erreurs avec un code correcteur d'erreurs du type SEC-DED, mais uniquement si l'une des deux erreurs est une erreur matérielle (Hard Error)(US 4 319 357). Par ailleurs, le brevet US 6 657 896 propose un circuit complexe pour coder un courant qui est proportionnel au nombre de 1 contenus dans les mots informatifs. L'invention vise à apporter une solution radicalement différente aux problèmes de la correction et de la détection des erreurs dans les mémoires. Un but de l'invention est d'utiliser des codes correcteurs d'erreurs simples (par exemple du type SEC-DED) ou bien des codes uniquement détecteurs d'erreurs simples (par exemple du type CRC) tout en améliorant le nombre total de corrections d'erreurs possibles. L'invention a également pour but de proposer un tel dispositif présentant un faible surcoût de surface et une robustesse améliorée. L'invention repose ainsi sur la combinaison, dans un même circuit, d'un décodeur mettant en oeuvre un décodage d'un code détecteur d'erreur simple ou d'un code détecteur et correcteur d'erreurs simple, par exemple du type CRC et/ou du type SEC-DED, avec une analyse du résultat obtenu pour des blocs-codes résultants de lectures réalisées dans différentes conditions, en particulier mais non exlusivement au niveau du courant de référence utilisé pour la lecture des données de ces blocs-codes. L'invention propose donc un procédé de détection et de correction d'erreurs pour une mémoire, en particulier une mémoire non-volatile du type à stockage par grille flottante, ou bien une mémoire non-volatile du type magnétique. La mémoire stocke des blocs-codes comportant des données d'information et des données de contrôle. Le procédé selon l'invention comprend une lecture de chaque élément d'un bloc-code. Le procédé comprend également un décodage du bloc-code ainsi lu délivrant une information représentative du nombre d'erreurs dans le bloc-code lu. Selon une caractéristique générale de l'invention, en présence d'un nombre d'erreurs supérieur à un, a) on modifie d'une valeur choisie au moins un paramètre de ladite lecture, et b) on effectue de nouveau une lecture et un décodage du bloc- code de façon à obtenir une nouvelle information d'erreurs. On réitère éventuellement les phases a) et b) jusqu'à obtenir un nombre final d'erreurs au plus égal à un. En pratique et dans la majorité des architectures de mémoires, la lecture de chaque élément d'un bloc-code comporte une comparaison du courant délivré par la cellule-mémoire stockant cet élément avec un courant de référence, et une prise en compte du résultat de ladite comparaison à un instant de prise en compte choisi. Ainsi, selon une variante de l'invention, le paramètre de lecture modifié est le courant de référence. Plus précisément dans l'étape a) on modifie la valeur du courant de référence d'un pas choisi. Selon une autre variante de l'invention, le paramètre de lecture modifié est ledit instant de prise en compte, par exemple l'instant où on enregistre le résultat de la comparaison dans un registre ou une bascule. Plus précisément selon cette variante on modifie l'instant de prise en compte d'un pas choisi. Il est également possible de combiner ces deux variantes, c'est à dire de modifier le courant de référence et l'instant de prise en compte. Le nombre final d'erreurs qui peut être par conséquent égal à 1 ou à 0, est choisi en particulier en fonction du type de code avec lequel a été encodé le bloc-code. Plus précisément, si le bloc-code est encodé avec un code détecteur et correcteur d'erreurs, par exemple un code du type SECDED, alors le nombre final d'erreur peut être choisi égal à 1. En effet, lorsque le nombre d'erreurs à été réduit à 1, un tel code permet la correction de l'erreur résiduelle par le décodeur lui-même. Par contre, si le bloc-code est encodé avec un code uniquement détecteur d'erreurs, par exemple un code du type à redondance cyclique, alors le nombre final d'erreurs est avantageusement choisi égal à O. En d'autres termes, on modifiera dans ce cas la valeur du courant de référence jusqu'à obtenir zéro erreur détectée. Dans un mode de réalisation préférentiel, le bloc-code peut être encodé avec un code uniquement détecteur d'erreurs (par exemple un code du type CRC) puis avec un code détecteur et correcteur d'erreurs (par exemple du type SEC-DED). Dans ce cas, les décodages successifs éventuels s'effectuent avantageusement avec le code détecteur et correcteur d'erreurs jusqu'à obtenir un nombre final d'erreurs égal à 1. Puis l'erreur résiduelle est corrigée. Et l'absence finale d'erreur est alors avantageusement confirmée par une lecture du bloc-code ainsi corrigé suivie d'un décodage utilisant le code uniquement détecteur d'erreurs. L'invention propose également un circuit intégré comprenant une mémoire stockant des blocs-codes comportant des données d' information et des données de contrôle, et un système de détection et de correction d'erreurs affecté à cette mémoire et comportant des moyens de lecture de chaque élément d'un bloc-code. Le système de détection et de correction d'erreurs comprend par ailleurs des moyens de décodage du bloc-code ainsi lu, aptes à délivrer une information représentative du nombre d'erreurs dans le bloc-code lu. Selon une caractéristique générale de l'invention, le système de détection et de correction d'erreurs comprend en outre des moyens de commande aptes en présence d'un nombre d'erreurs supérieur à un, - à modifier d'une valeur choisie au moins un paramètre des moyens de lecture, et - à activer de nouveau les moyens de lecture et de décodage du bloc-code de façon à obtenir une nouvelle information d'erreur, et - à réitérer éventuellement les phases a) et b) jusqu'à obtenir un nombre final d'erreurs au plus égal à un. Selon une première variante de l'invention, les moyens de lecture comportent des moyens de comparaison du courant délivré par la cellulemémoire stockant cet élément avec un courant de référence, ainsi que des moyens d'enregistrement aptes à enregistrer à un instant d' enregistrement choisi, le résultat délivré par les moyens de comparaison, et les moyens de commande sont aptes à modifier, en tant que paramètre des moyens de lecture, la valeur du courant de référence d'un pas choisi. Selon une deuxième variante de l'invention, les moyens de commande sont aptes à modifier, en tant que paramètre des moyens de lecture, la valeur de l'instant d'enregistrement d'un pas choisi. Selon un mode de réalisation de l'invention dans lequel le bloc-code est encodé avec un code uniquement détecteur d'erreurs puis avec un code détecteur et correcteur d'erreurs, les moyens de décodage comportent un premier décodeur apte à effectuer les décodages successifs éventuels avec le code détecteur et correcteur d'erreurs jusqu'à obtenir un nombre final d'erreurs égal à 1, puis à corriger l'erreur résiduelle. Les moyens de décodage comportent alors un deuxième décodeur apte à décoder le bloccode ainsi corrigé et lu, avec le code uniquement détecteur d'erreurs. D'autre avantages et caractéristiques de l'invention apparaîtront à l'examen de la description détaillée de modes de réalisation et de mise en oeuvre, nullement limitatifs, et des dessins annexés sur lesquels: la figure 1 représente un mode de réalisation de moyens de lecture d'un dispositif selon l'invention, la figure 2 représente une évolution temporelle de la tension en un noeud des moyens de lecture dans le cas d'une cellule programmée, - la figure 3 représente une évolution temporelle de la tension en un noeud des moyens de lecture dans le cas d'une cellule vierge, la figure 4 présente une distribution des courants des cellules vierges et programmées d'une mémoire, la figure 5 illustre un exemple de distribution des courants de cellules-mémoire après dégradation de leur état initial, - la figure 6 illustre des modifications successives du courant de référence pour la lecture des données stockées dans la mémoire dans le cadre d'une mise en oeuvre d'une première variante du procédé selon l'invention, la figure 7 est une autre illustration d'une modification du courant de référence pour la lecture des données stockées dans la mémoire dans le cadre de ladite première variante du procédé selon l'invention, la figure 8 est un organigramme schématique d'un mode de mise en oeuvre de ladite première variante du procédé selon l'invention, la figure 9 illustre schématiquement un mode de réalisation d'une première variante d'un dispositif intégré selon l'invention, la figure 10 illustre une modification de la durée de lecture des données stockées dans la mémoire dans le cadre d'une mise en oeuvre d'une deuxième variante du procédé selon l'invention, - la figure 11 est un organigramme schématique d'un mode de mise en oeuvre de ladite deuxième variante du procédé selon l'invention, et, la figure 12 illustre schématiquement un mode de réalisation d'une deuxième variante d'un dispositif intégré selon l'invention. Généralement, les systèmes de lecture de données dans les mémoires, en particulier non-volatiles, consistent à comparer un courant de référence Iref avec le courant Icell délivré par la cellule-mémoire lue (figure 1). 10 15 20 25 Le résultat de la comparaison est fourni par une tension sur le noeud de sortie OUT. Cette tension contrôle la valeur DATA obtenue sur la sortie (et représentative de la donnée lue) qui peut être prise en compte ou enregistrée à tout moment dans un registre ou une bascule MV en réponse à un signal d'enregistrement LTEN. Il est généralement prévu un moyen de précharge du noeud OUT qui stabilise la tension de ce noeud à VDD (tension d'alimentation),à GND (masse) ou à toute autre tension intermédiaire, en dehors des périodes de lecture. Les évolutions de la tension sur le noeud OUT, avec un moyen de précharge à VDD, pendant une lecture d'une cellule programmée ou vierge, sont présentées sur les figures 2 et 3. La figure 2 montre que lorsque le courant de la cellule-mémoire est supérieur au courant de référence Iref, comme dans le cas d'une cellule programmée contenant par exemple un 1 logique, la tension du noeud OUT reste stable. Le courant Iref est trop faible par rapport à Icell pour décharger le noeud OUT. Par contre lorsque le courant délivré par la cellule est très faible, comme dans le cas d'une cellule vierge contenant par exemple un 0 logique (figure 3), le noeud OUT se décharge au cours du temps jusqu'à atteindre une tension nulle. La durée de décharge dépend de la différence entre les courants Icell et Iref. Pour lire correctement les données l'instant Tl (c'est à dire la durée de lecture) auquel la donnée est enregistrée, doit être suffisamment tardif (durée suffisamment longue) pour permettre une décharge éventuelle presque complète du noeud OUT. Le courant de référence Iref est réglé de façon à se qu'il prenne une valeur intermédiaire LN entre les courants typiques délivrés par une cellule vierge et une cellule programmée. La figure 4 présente les résultats caractéristiques obtenus lors de la lecture de l'ensemble des cellules d'une mémoire pour laquelle les nombres de cellules vierges et programmées sont sensiblement équivalents. La référence CMCE désigne le courant moyen initial délivré par des cellules vierges (contenant un zéro logique) tandis que la référence CMCP désigne le courant moyen initial délivré par les cellules programmées (contenant un 1 logique). Dans le cadre des mémoires non-volatiles, par exemple, les mécanismes de dégradation de l'intégrité des données, comme les perturbations dues aux lectures ou programmations répétées du plan en mémoire, ou la perte de charges stockées dans une grille flottante, amènent à décaler les distributions des courants des cellules dans le temps. Ces dérives peuvent être suffisamment importantes pour produire des lectures erronées de certaines cellules qui auront, pour le système de lecture, subi un changement d'état comme le montre la figure 5. En d'autres termes lorsque le courant Icell diminue dû à l'une ou l'autre de ces dérives, la différence entre Iref et Icell diminue et le noeud OUT se décharge avant que la donnée soit prise en compte (enregistrée) par le signal LTEN. Il en résulte alors une lecture erronée de la cellule. Sur la figure 5, la référence EA désigne l'ensemble des cellules qui sont lues comme étant vierges au lieu d'être lues comme étant programmées. Les codes correcteurs d'erreurs de type SEC-DED, facilement intégrables, permettent de corriger des lectures erronées mais seulement jusqu'à une seule erreur par bloc-code de n=k+r données. Les codes uniquement détecteurs d'erreur, par exemple les codes à redondance cyclique du type CRC, permettent quant à eux de détecter une ou plusieurs erreurs mais sans pouvoir les corriger. L'invention vise à réaliser plusieurs détections-corrections d'erreurs pour les n données du bloc-code, obtenues en modifiant le niveau du courant de référence Iref. La figure 6 donne une illustration du principe d'une première variante d'un tel système de correction selon l'invention dans le cas où le mécanisme de dégradation des données par perte de charge est important et conduit en particulier à un décalage dans la population des cellules. C'est le cas en particulier pour les mémoires non volatiles à grille flottante. Ainsi, une première lecture est réalisée avec le niveau de référence LN correspondant à une lecture normale. L'ensemble des n éléments du bloccode ainsi lu fournit un premier résultat. Si le code de détection indique la présence d'une erreur, une seconde lecture utilisant un niveau de référence LEI inférieur au niveau LN est réalisée. Le courant de référence de lecture étant plus faible, le nombre d'erreurs diminue. Et, on réitère ces opérations en diminuant le courant de référence Iref à chaque itération jusqu'à obtenir un nombre final d'erreurs choisi. Dans l'exemple illustré sur la figure 6, pour le niveau de courant de référence LE2, le nombre d'erreurs est réduit à zéro et l'intégrité de l'information est retrouvée. La figure 7 illustre différemment cette première variante de l'invention. Sur cette figure 7, la courbe Cl représente l'évolution de la tension du noeud OUT avec un courant de référence ayant le niveau de référence standard LN. On voit que compte tenu de l'instant Tl auquel l'enregisterment dans la bascule MV est effectué, la lecture utilisant le niveau LN pour le courant Iref conduit à la lecture d'un 0 au lieu de la lecture d'un 1 . En diminuant le courant de référence pour lui donner la valeur LE2, le temps de décharge est plus long (courbe C2) et la valeur correcte de lecture est obtenue. Il convient cependant de veiller à ne pas diminuer le niveau du courant de référence de façon trop importante car dans ce cas il est possible que le code détecte une erreur due à une cellule vierge qui serait lue comme une cellule programmée. L'homme du métier saura ajuster la valeur des pas de modification du courant de référence en fonction notamment des données de caractérisation de la mémoire testée qui fournissent des indications en particulier sur les dérives des distributions de courant et/ou sur les pertes de charge. A titre indicatif, pour une mémoire MRAM, le niveau LN est par exemple égal à 15 A, et on choisira un pas égal par exemple à 1 A. Lorsque le code utilisé est un code uniquement détecteur d'erreurs, par exemple un code CRC, le courant de référence minimum LE2 doit être correctement déterminé pour ne pas atteindre de cellules vierges. Dans le cas où le code utilisé est un code détecteur et correcteur d'erreurs, par exemple un code simple du type SEC-DED, on peut diminuer le courant de référence jusqu'à atteindre un niveau pour lequel une seule erreur résiduelle est détectée. En effet, dans ce cas, cette erreur résiduelle unique pourra être corrigée par le décodeur. Par ailleurs, dans le cas où la population des cellules vierges et la population des cellules programmées se chevauchent, il n'est pas possible d'obtenir un nombre d'erreurs détectées égal à zéro quelle que soit la valeur du courant de référence. Aussi, dans ce cas, on choisira de préférence l'utilisation d'un code détecteur et correcteur d'erreurs du type SEC-DED par exemple, et on ajustera la valeur du courant de référence jusqu'à détecter une seule erreur résiduelle qui sera corrigée. Ensuite, il sera possible de lire de nouveau le bloc-code ainsi corrigé et qui aura été préalablement également encodé avec un code du type CRC, pour confirmer par le code CRC qu'il n'y a plus d' erreur résiduelle. Bien entendu, ce qui a été décrit en référence aux figures 6 et 7 pour des niveaux de référence décroissants de LN à LE2, s'applique également dans le cas où la dégradation des données est principalement due à des perturbations par lecture ou programmation qui conduisent à un décalage de la distribution des courants des cellules vierges vers de plus forts courants. Dans ce cas, les lectures suivant celle effectué avec le niveau de référence LN sont effectuées avec des niveaux de courant de référence LP supérieurs au niveau LN. Un organigramme d'un mode de mise en oeuvre du procédé est représenté sur la figure 8. Plus précisément, la lecture d'un bloc-code 40 est suivie du décodage du bloc-code 41. Si le nombre d'erreurs est supérieur à 1 (étape 42) on modifie alors le courant de référence (étape 43) et on recommence la lecture du bloc-code. S i le nombre d'erreurs est inférieur ou égal à 1, deux cas sont possibles. Soit le nombre d'erreurs est égal à 1, soit il est égal à zéro. Si le nombre d'erreurs est égal à 1, et si le code utilisé permet une correction de l'erreur (étapes 44 et 45), comme c'est le cas pour un code SEC-DED, la correction est effectuée (étape 46). Si par contre la correction n'est pas possible (étapes 44 et 45), par exemple parce qu'un code CRC a été utilisé, alors on modifie de nouveau le courant de référence (étape 43) et on recommence la lecture du bloc- code de façon à obtenir un nombre final d'erreurs égal à zéro La figure 9 présente le diagramme bloc d'un circuit intégré CI incorporant un système SYS de détection et de correction d'erreurs selon l'invention affecté à une mémoire MM. Le système SYS comporte un encodeur ENC capable d'encoder les données destinées à être stockées dans la mémoire MM en utilisant un code approprié. Selon le type d'application envisagée, en particulier selon le type de mémoire utilisée, les moyens d'encodage ENC peuvent comporter par exemple soit uniquement un encodeur capable d'encoder les données, en utilisant un code du type SEC-DED, soit uniquement un bloc encodeur capable d'encoder les données en utilisant un code de redondance cyclique, ou bien les deux blocs encodeurs précédemment cités. Dans ce dernier cas, selon un exemple de réalisation, on encodera par exemple les données d'abord en utilisant le code CRC puis, l'ensemble des données ainsi codées sera à son tour codé en utilisant un code du type SEC-DED. Les différents niveaux LE, LN et LP du courant de référence sont délivrés aux moyens de lecture (par exemple du type de ceux illustrés sur la figure 1) de la mémoire par des moyens de contrôle BCL. Les résultats de lecture correspondants sont stockés dans des mémoires-tampons BN, BP et BE (analogues à la bascule MV de la figure 1) reliées à des moyens de décodage MCD par l'intermédiaire d'un multiplexeur MUX, également commandé par les moyens de contrôle BCL. Les moyens de décodages MDCD présentent une architecture analogue à celle des moyens d'encodage ENC. Ainsi, ils peuvent comporter selon les cas, soit un premier décodeur DCD1 capable d'effectuer les décodages successifs éventuels avec le code SEC-DED, soit un deuxième décodeur DCD2 capable d'effectuer les décodages successifs éventuels avec le code CRC, soit les deux décodeurs DCD1 et DCD2. Les informations représentatives des nombres d'erreurs résiduels sont alors traitées par un bloc d'analyse BLAN. Le bloc d'analyse BLAN et le bloc de contrôle BCL forment des moyens de commande, réalisés par exemple au moyen de portes logiques et de circuits logiques à partir d'algorithmes de synthèse logique. Ces moyens de commande vont être aptes à activer de façon itérative les moyens de lecture et de décodage après avoir modifié les valeurs des courants de référence. Dans le cas où les données ont été doublement encodées avec d'abord un code SEC-DED puis avec un code CRC, les moyens de commande vont activer d'abord le premier décodeur DCD1 puis, une fois que l'erreur aura été corrigée, le décodeur DCD2. L'invention n'est pas limitée au modes de mise en oeuvre et de réalisation qui viennent d'être décrits. En effet selon une deuxième variante de l'invention on modifie comme paramètre de lecture, non pas le courant de référence, mais l'instant T 1 de prise en compte du résultat de la comparaison, c'est à dire la durée de lecture. Ceci est illustré en particulier sur la figure 10. Sur cette figure la courbe C3 représente l'évolution de la tension du noeud OUT d'une cellule programmée ( 1 logique) dégradée lors d'une lecture avec un courant de référence Iref ayant le niveau standard LN. On voit qu'en prenant en compte le résultat de la comparaison à l'instant standard Ti, on obtient un 0 logique c'est à dire un résultat de lecture erroné. Par contre en diminuant la durée de lecture, c'est à dire en effectuant l'enregistrement du résultat de la comparaison à des instants TE plus précoces, par exemple à l'instant TE2, on élimine cette erreur de lecture. Il convient cependant de veiller à ne pas diminuer la durée de lecture de façon trop importante afin d'éviter que le code détecte une erreur due à une cellule vierge qui serait lue comme une cellule programmée. L'homme du métier saura ajuster la valeur des pas de modification de la durée de lecture en fonction notamment des données de caractérisation de la mémoiretestée qui fournissent des indications en particulier sur les dérives des distributions de courant et/ou sur les pertes de rétention de charge. A titre indicatif, pour une mémoire MRAM, la durée standard T 1 de lecture est par exemple égal à 30 ns, et on choisira un pas égal par exemple à 5 ns. Bien entendu, ce qui a été décrit pour des durée décroissant de T1 à TE2, s'applique également dans le cas où la dégradation des données est principalement due à des perturbations par lecture ou programmation qui conduisent à un décalage de la distribution des courants des cellules vierges vers de plus forts courants. Dans ce cas, les lectures suivant celle effectuée à l'instant standard Ti sont effectuées à des instants TP postérieurs à l'instant Ti, c'est à dire avec des durées de lecture plus longues. Un organigramme de cette variante de mise en oeuvre du procédé est représenté sur la figure 11. Sur cette figure les références des étapes identiques ou analogues à celles représentées sur la figure 8, sont multipliées par 10 par rapport à celles de la figure 8. Seules les différences entre les figures 8 et 11 seront maintenant décrites. En fait la seule différence entre ces deux figures réside dans le fait que l'étape 430 de la figure 11 prévoit non pas une modification du courant de référence mais une modification de l'instant de prise en compte du résultat de la comparaison dans l'opération de lecture. La figure 12 présente le diagramme bloc d'un circuit intégré CI incorporant un système SYS de détection et de correction d'erreurs selon cette deuxième variante de l'invention, affecté à une mémoire MM. Une différence entre le système de la figure 12 et le système de la figure 9 réside en ce que cette fois ci ce sont les différents instants TE, Tl, TP etc.. de prise en compte des résultats de la comparaison lors de l'opération de lecture qui sont délivrés aux moyens de lecture (par exemple du type de ceux illustrés sur la figure 1) de la mémoire par les moyens de contrôle BCL. Par ailleurs les moyens de commande vont être aptes à activer de façon itérative les moyens de lecture et de décodage après avoir modifié les valeurs des instants de prise en compte c'est à dire les durées de lecture. Bien que les deux variantes de l'invention aient été considérées séparément, il n'est pas exclu qu'elles puissent être combinées, c'est à dire que l'on choisisse de modifier à la fois, par exemple séquentiellement dans un ordre quelconque, la valeur du courant de référence et la valeur de l'instant d'enregistrement de la donnée. Ainsi on pourrait envisager par exemple de modifier d'abord le courant de référence en utilisant un pas grossier, puis d'affiner le processus en modifiant l'instant d'enregistrement en utilisant un pas fin. Dans un système selon une telle variante, les niveaux LE, LN, LP du courants de référence et les instants TE, Ti, TP sont délivrés aux moyens de lecture. Et les moyens de commande vont être aptes à activer de façon itérative les moyens de lecture et de décodage après avoir modifié les valeurs du courant de référence et/ou les valeurs des instants de prise en compte c'est à dire les durées de lecture. Quelles que soient les variantes envisagées, l'invention permet, avec l'utilisation d'un code de redondance cyclique (CRC) de réaliser un système très performant en termes de correction d'erreurs avec une fiabilité reconnue pour être supérieure à 99 % et ce pour un coût de surface très faible. Par ailleurs, la solution proposée avec l'intégration combinée d'un code de redondance cyclique (CRC) et d'un code détecteur et correcteur d'erreurs, par exemple du type SEC-DED, conduit à l'obtention d'un circuit détecteur-correcteur d'erreurs qui garantit l'intégrité de l'information stockée avec une grande fiabilité sans surcoût significatif par rapport aux solutions existantes. Bien entendu, suivant le type d'obligation et la nature des défauts à corriger, la réalisation du circuit se fera avec un type de code plutôt qu'un autre. Ainsi, dans le cas d'une mémoire non-volatile avec stockage par grille flottante, par exemple, où la dégradation de l'information se fait aussi bien par modification des courants des cellules à cause des perturbations provoquées par les phases de lecture ou de programmation, qu'à cause d'une longue période de non-utilisation de la mémoire pendant laquelle il y a diminution des courants des cellules programmées, un système intégrant un code de type CRC et un code du type SEC-DED sera plutôt choisi. Par contre, pour d'autres mémoires comme les mémoires magnétiques (MRAM), dans lesquelles on observe une dérive temporelle identique des populations des cellules vierges et programmées, une solution avec un code à redondance cyclique, du type CRC, seul, est suffisant pour répondre aux besoins de détection-correction d'erreurs. REVENDICATIONS 1. Procédé de détection et de correction d'erreurs pour une mémoire stockant des blocs-codes comportant des données d'informations et des données de contrôle, le procédé comprenant une lecture de chaque élément d'un bloc-code, et un décodage du bloc-code ainsi lu délivrant une information représentative du nombre d'erreurs dans le bloc-code lu, caractérisé par le fait qu'en présence d'un nombre d'erreurs supérieur à un, a) on modifie (43, 430) d'une valeur choisie au moins un paramètre de ladite lecture, et b) on effectue de nouveau une lecture (40, 400) et un décodage (41, 410) du bloc-code de façon à obtenir une nouvelle information d'erreur, et c) on réitère éventuellement les phases a) et b) jusqu'à obtenir un nombre final d'erreurs au plus égal à un. 2. Procédé selon la revendication 1, caractérisé par le fait que la lecture de chaque élément d'un bloc-code comporte une comparaison du courant délivré par la cellule-mémoire stockant cet élément avec un courant de référence, et une prise en compte du résultat de ladite comparaison à un instant de prise en compte choisi, et par le fait que dans l'étape a) on modifie (43) la valeur du courant de référence (Iref) d'un pas choisi. 3. Procédé selon la revendication 1 ou 2, caractérisé par le fait que la lecture de chaque élément d'un bloc-code comporte une comparaison du courant délivré par la cellule-mémoire stockant cet élément avec un courant de référence, et une prise en compte du résultat de ladite comparaison à un instant de prise en compte choisi, et par le fait que dans l'étape a) on modifie (430) l'instant de prise en compte d'un pas choisi. 4. Procédé selon l'une des revendications 1 à 3, caractérisé par le fait que le bloc-code est encodé avec un code détecteur et correcteur d'erreur, et par le fait que le nombre final d'erreurs est choisi égal à un. 5. Procédé selon l'une des revendications 1 à 3, caractérisé par le fait que le bloc-code est encodé avec un code uniquement détecteur d'erreur, et par le fait que le nombre final d'erreurs est choisi égal à zéro. 6. Procédé selon l'une des revendications 1 à 3, caractérisé par le fait que le bloc-code est encodé avec un code uniquement détecteur d'erreur puis avec un code détecteur et correcteur d'erreur, par le fait que les décodages successifs éventuels s'effectuent avec le code détecteur et correcteur d'erreur jusqu'à obtenir un nombre final d'erreur égal à un, puis l'erreur résiduelle est corrigée, et l'absence finale d'erreur est confirmée par une lecture du bloc-code ainsi corrigé, suivie d'un décodage utilisant le code uniquement détecteur d'erreur. 7. Procédé selon la revendication 4 ou 6, caractérisé par le fait que le code détecteur et correcteur d'erreur est un code capable de corriger une erreur et de détecter deux erreurs. 8. Procédé selon la revendication 5 ou 6, caractérisé par le fait que le code uniquement correcteur d'erreur est un code cyclique de redondance. 9. Procédé selon l'une des revendications précédentes, caractérisé par le fait que la mémoire est une mémoire non volatile du type avec stockage par grille flottante. 10. Procédé selon l'une des revendications 1 à 8, caractérisé par le fait que la mémoire est une mémoire non volatile du type magnétique. 11. Circuit intégré comprenant une mémoire stockant des blocs-codes comportant des données d'informations et des données de contrôle, et un système de détection et de correction d'erreurs affecté à cette mémoire et comportant des moyens de lecture de chaque élément d'un bloc-code, et des moyens de décodage du bloc-code ainsi lu aptes à délivrer une information représentative du nombre d'erreurs dans le bloc- code lu, caractérisé par le fait que le système de détection et de correction d'erreurs (SYS) comprend en outre des moyens de commande (BCL, BLAN) aptes en présence d'un nombre d'erreurs supérieur à un, a) à modifier d'une valeur choisie au moins un paramètre des moyens de lecture, b) à activer de nouveau les moyens de lecture et de décodage du bloc- code de façon à obtenir une nouvelle information d'erreur, et c) à réitérer éventuellement les phases a) et b) jusqu'à obtenir un nombre final d'erreurs au plus égal à un. 12. Circuit intégré selon la revendication 11, caractérisé par le fait que les moyens de lecture comportent des moyens de comparaison du courant délivré par la cellule-mémoire stockant cet élément avec un courant de référence, ainsi que des moyens d'enregistrement aptes à enregistrer à un instant d'enregistrement choisi, le résultat délivré par les moyens de comparaison, et par le fait que les moyens de commande sont aptes à modifier, en tant que paramètre des moyens de lecture, la valeur du courant de référence (Iref) d'un pas choisi. 13. Circuit intégré selon la revendication 11 ou 12, caractérisé par le fait que les moyens de lecture comportent des moyens de comparaison du courant délivré par la cellule-mémoire stockant cet élément avec un courant de référence, ainsi que des moyens d'enregistrement aptes à enregistrer à un instant d'enregistrement choisi, le résultat délivré par les moyens de comparaison, et par le fait que les moyens de commande sont aptes à modifier, en tant que paramètre des moyens de lecture, la valeur de l'instant d'enregistrement d'un pas choisi. 14. Circuit intégré selon l'une des revendications 11 à 13, caractérisé par le fait que le bloc-code est encodé avec un code détecteur et correcteur d'erreur, et par le fait que le nombre final d'erreurs est choisi égal à un. 15. Circuit intégré selon l'une des revendications 11 à 13, caractérisé par le fait que le bloc-code est encodé avec un code uniquement détecteur d'erreur, et par le fait que le nombre final d'erreurs est choisi égal à zéro. 16. Circuit intégré selon l'une des revendications 11 à 13, caractérisé par le fait que le bloc-code est encodé avec un code uniquement détecteur d'erreur puis avec un code détecteur et correcteur d'erreur, par le fait que les moyens de décodage comportent un premier décodeur apte à effectuer les décodages successifs éventuels avec le code détecteur et correcteur d'erreur jusqu'à obtenir un nombre final d'erreur égal à un, puis à corriger l'erreur résiduelle, et par le fait que les moyens de décodage comportent un deuxième décodeur apte à décoder le bloc-code ainsi corrigé et lu, avec le code uniquement détecteur d'erreur. 17. Circuit intégré selon la revendication 14 ou 16, caractérisé par le fait que le code détecteur et correcteur d'erreur est un code capable de corriger une erreur et de détecter deux erreurs. 18. Circuit intégré selon la revendication 15 ou 16, caractérisé par le fait que le code uniquement correcteur d'erreur est un code cyclique de redondance. 19. Circuit intégré selon l'une des revendications 11 à 18, caractérisé par le fait que la mémoire est une mémoire non volatile du type avec stockage par grille flottante. 20. Circuit intégré selon l'une des revendications 11 à 19, caractérisé par le fait que la mémoire est une mémoire non volatile du type magnétique