FR3055714A1 - Procede de correction d'erreur dans une memoire flash - Google Patents

Procede de correction d'erreur dans une memoire flash Download PDF

Info

Publication number
FR3055714A1
FR3055714A1 FR1658324A FR1658324A FR3055714A1 FR 3055714 A1 FR3055714 A1 FR 3055714A1 FR 1658324 A FR1658324 A FR 1658324A FR 1658324 A FR1658324 A FR 1658324A FR 3055714 A1 FR3055714 A1 FR 3055714A1
Authority
FR
France
Prior art keywords
software
copy
corrupted
block
page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1658324A
Other languages
English (en)
Other versions
FR3055714B1 (fr
Inventor
Oliva Jose De
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Continental Automotive GmbH
Continental Automotive France SAS
Original Assignee
Continental Automotive GmbH
Continental Automotive France SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Continental Automotive GmbH, Continental Automotive France SAS filed Critical Continental Automotive GmbH
Priority to FR1658324A priority Critical patent/FR3055714B1/fr
Priority to PCT/FR2017/052378 priority patent/WO2018046857A1/fr
Priority to CN201780054614.XA priority patent/CN109643261B/zh
Priority to US16/323,868 priority patent/US10866867B2/en
Publication of FR3055714A1 publication Critical patent/FR3055714A1/fr
Application granted granted Critical
Publication of FR3055714B1 publication Critical patent/FR3055714B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1417Boot up procedures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/82Solving problems relating to consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/84Using snapshots, i.e. a logical point-in-time copy of the data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

La présente invention concerne un procédé de correction d'erreur dans une mémoire flash non volatile de type NAND, ladite mémoire comprenant une première et une deuxième copies (SW1, SW2), identiques, d'un logiciel à charger, une page (P1) d'un bloc (B2) occupé par des données de la première copie (SW1) du logiciel étant corrompue, et une page (P3) d'un bloc (B53) occupé par des données de la deuxième copie (SW2) du logiciel étant corrompue, ledit procédé comprenant : • le remplacement du bloc occupé par la deuxième copie du logiciel et comprenant une page corrompue par le bloc identique occupé par la première copie du logiciel, permettant de corriger la deuxième copie du logiciel ; • la réexécution du programme de chargement au démarrage ; • le chargement de la deuxième copie du logiciel.

Description

Titulaire(s) : CONTINENTAL AUTOMOTIVE FRANCE Société par actions simplifiée, CONTINENTAL AUTOMOTIVE GMBH.
Demande(s) d’extension
Mandataire(s) : CONTINENTAL AUTOMOTIVE FRANCE Société par actions simplifiée.
P4) PROCEDE DE CORRECTION D'ERREUR DANS UNE MEMOIRE FLASH.
FR 3 055 714 - A1 tg/2 La présente invention concerne un procédé de correction d'erreur dans une mémoire flash non volatile de type NAND, ladite mémoire comprenant une première et une deuxième copies (SW1, SW2), identiques, d'un logiciel à charger, une page (P1 ) d'un bloc (B2) occupé par des données de la première copie (SW1) du logiciel étant corrompue, et une page (P3) d'un bloc (B53) occupé par des données de la deuxième copie (SW2) du logiciel étant corrompue, ledit procédé comprenant:
le remplacement du bloc occupé par la deuxième copie du logiciel et comprenant une page corrompue par le bloc identique occupé par la première copie du logiciel, permettant de corriger la deuxième copie du logiciel;
la réexécution du programme de chargement au démarrage;
le chargement de la deuxième copie du logiciel.
Figure FR3055714A1_D0001
Figure FR3055714A1_D0002
L’invention concerne le domaine des mémoires non volatiles de type « flash NAND » dans le domaine plus large des systèmes embarqués, notamment automobiles. Les mémoires flash de type NAND permettent le stockage persistent de données. Ces données sont en principe associées à un algorithme de correction automatique, ou code correcteur d’erreur, désigné sous l’abréviation anglaise ECC, pour « Error Correction Code », afin de prémunir lesdits systèmes embarqués contre la corruption des données stockées dans leur mémoire non volatile.
Cependant, il peut survenir des erreurs non corrigibles, et les systèmes embarqués génèrent alors une exception lors de la lecture d’une telle erreur non corrigible.
Dans ce contexte, la présente invention concerne un procédé permettant de corriger, dans une mémoire non volatile de type « flash NAND », certaines erreurs non corrigibles par les algorithmes de correction automatiques connus.
Comme cela est connu, les véhicules automobiles, comme tout autre type de véhicule, comprennent des calculateurs aptes à exécuter un logiciel embarqué.
A cette fin, lesdits systèmes embarqués présentent des moyens de stockage de données, autrement dit des mémoires, volatiles ou non. De tels systèmes embarqués présentent ainsi notamment une mémoire volatile, également appelée mémoire vive, typiquement de la mémoire de type RAM, pour « Random Access Memory » selon l’acronyme anglais bien connu de l’homme du métier.
Les microcontrôleurs, anciens ou actuels, utilisent en interne de la mémoire flash de type NOR permettant de garantir l’intégrité des données stockées à 100 %.
Aujourd’hui, de plus en plus, les systèmes embarqués embarquent de la mémoire flash de type NAND, bien connue de l’homme du métier, qui présente l’avantage d’un coût réduit et de grandes capacités de stockage, et l’inconvénient d’une incapacité à garantir l’intégrité des données stockées à 100 %. La mémoire flash de type NAND est notamment utilisée pour la sauvegarde du logiciel du microcontrôleur, également appelé le « firmware » selon l’appellation anglaise bien connue de l’homme du métier, et pour la sauvegarde de données relatives aux cycles de vie du système embarqué et de son logiciel.
En pratique, quand le logiciel embarqué sur le système est exécuté, celui-ci lit la mémoire flash pour permettre le chargement et la mise en œuvre d’un logiciel applicatif et la bonne exécution des fonctions décisionnelles qu’il comporte.
Plus précisément, le calculateur concerné par le chargement et l’exécution d’un logiciel hébergé sur une mémoire flash de type NAND fait appel à un programme de démarrage de ladite mémoire flash, ledit programme de démarrage pouvant être désigné par l’homme du métier sous l’abréviation RBL pour « ROM Boot Loader » en anglais. Ce programme de démarrage exécute un programme de chargement au démarrage, connu de l’homme du métier sous l’abréviation UBL pour « User Boot Loader », dont la fonction est de charger en mémoire vive le logiciel à exécuter, stocké sur la mémoire flash.
Par ailleurs, dans le contexte des calculateurs embarqués, notamment dans le domaine de l’automobile, il est bien connu que la mémoire flash de type NAND est une mémoire non volatile très utilisée, en raison de sa compétitivité économique et de son faible encombrement.
Un problème connu lié à l’utilisation de mémoire flash de type NAND réside cependant dans la difficulté à assurer la consistance des données qui y sont stockées. En effet, un défaut bien connu des mémoires flash réside dans le risque d’altération physique des bits qui la composent. Une altération physique d’un bit induit typiquement un risque de changement non souhaité de la valeur dudit bit, du fait d’une variation de la valeur de la tension à ses bornes.
Selon l’état de la technique, comme évoqué brièvement ci-dessus, il existe des systèmes embarqués à mémoire flash de type NAND, dans laquelle les données sauvegardées sont associées à un algorithme de correction automatique de type ECC, pour « Error Correction Code », signifiant code de correction d’erreur.
Grâce à l’association des données sauvegardées dans la mémoire flash à un code de correction d’erreur, l’état de la technique permet de détecter et de traiter une grande partie des erreurs relatives à une inconsistance des données lues en mémoire flash.
Cependant, parmi les erreurs qui peuvent survenir lors de la lecture de données en mémoire flash de type NAND, certaines ne sont pas corrigibles par un algorithme de correction automatique de type ECC. Dans ce cas, lorsqu’en cours d’exécution un système embarqué tente de lire une donnée correspondant à une erreur non corrigible, ce dernier lève une exception qui entraîne généralement le redémarrage du système embarqué, voire celui du calculateur.
Un problème technique réside alors dans le fait qu’en cas d’altération physique non corrigible de la mémoire, le calculateur peut entrer dans une boucle d’échecs au démarrage suivi de redémarrages. En tout état de cause, le système embarqué ne parvient pas à charger le logiciel voulu.
Pour pallier ce problème, dans l’état de la technique, une première solution simple consiste à charger un programme invitant l’utilisateur à mettre à jour le logiciel. Lors d’une réinstallation dudit logiciel, éventuellement modifié, le problème est très probablement corrigé.
Afin d’éviter cette manipulation et l’indisponibilité temporaire du logiciel, il est connu une deuxième solution consistant à stocker, en mémoire flash, une copie alternative du logiciel à charger, encore appelée copie de sauvegarde du logiciel, correspondant à une duplication, c’est-à-dire à une copie à l’identique du logiciel à charger. En effet, généralement, lorsque le logiciel à exécuter est de taille réduite, il peut être stocké en deux copies identiques (ou deux « instances ») sur la mémoire flash, de sorte qu’il est supposé statistiquement peu probable que les deux copies soient corrompues simultanément, une copie assurant alors la fonction de copie de sauvegarde de l’autre version. Le programme de chargement au démarrage choisit la copie du logiciel à charger en mémoire vive.
Ainsi, en cas d’échec du chargement d’une première copie du logiciel, le programme de chargement au démarrage de la mémoire flash cherche à charger la copie alternative.
La copie alternative du logiciel peut alors, comme cela est connu, servir de source pour « réparer » la version corrompue du logiciel stocké en mémoire flash.
Une limite de cette technique connue se produit cependant lorsque la version de sauvegarde, c’est-à-dire la copie à l’identique de la version corrompue du logiciel, s’avère elle-même corrompue. Même statistiquement assez réduite, la probabilité que les deux versions du logiciel à charger soient corrompues existe et l’état de la technique ne comprend pas de solution simple à ce problème. Or, s’il est possible de stocker en mémoire vive un nombre élevé d’instances du programme de chargement au démarrage, de sorte que le programme de démarrage a selon toute vraissemblance la possibilité d’en exécuter une instance qui ne soit pas corrompue, il n’en va pas de même des logiciels embarqués à l’initiative de l’utilisateur. En effet, la taille et le nombre de ces logiciels utilisateurs sont en pratique trop grands pour permettre le stockage en mémoire flash de plus de deux copies desdits logiciels.
Il existe donc un besoin pour un procédé apte à gérer la survenance d’erreurs, non corrigibles par les algorithmes de type ECC connus, à la fois sur la première copie du logiciel à charger lue par le programme de chargement au démarrage et sur la copie de sauvegarde lue par un programme de chargement au démarrage après (re-)démarrage du calculateur.
A cette fin, plus précisément, la présente invention a pour objet un procédé de correction d’erreur dans une mémoire flash non volatile de type NAND, ladite mémoire flash comprenant un ensemble de blocs auxquels l’application accède en lecture ou en écriture ou en effacement, chaque bloc comportant une pluralité de pages, ladite mémoire comprenant une première et une deuxième copies, identiques, d’un logiciel à charger, la première et la deuxième copies du logiciel occupant physiquement un nombre égal de blocs distincts, une page d’un bloc occupé par des données de la première copie du logiciel étant corrompue, et une page d’un bloc occupé par des données de la deuxième copie du logiciel étant corrompue, ledit procédé comprenant l’exécution d’un programme de chargement au démarrage mettant en œuvre les étapes suivantes :
• la tentative de chargement de la première copie du logiciel par le programme de chargement au démarrage ;
• la découverte par le programme de chargement au démarrage qu’au moins une page d’un bloc occupé par la première copie du logiciel est corrompue ;
• l’enregistrement d’une identification de ladite au moins une page corrompue dans une mémoire persistante de la mémoire flash ;
• la configuration du programme de chargement au démarrage pour qu’il charge la deuxième copie du logiciel à la prochaine exécution ;
• la réexécution du programme de chargement au démarrage ;
• la tentative de chargement de la deuxième copie du logiciel par le programme de chargement au démarrage ;
• la découverte par le programme de chargement au démarrage qu’au moins une page d’un bloc occupé par la deuxième copie du logiciel est corrompue ;
• l’enregistrement d’une identification de ladite au moins une page corrompue dans une mémoire persistante de la mémoire flash ;
• le remplacement du bloc occupé par la deuxième copie du logiciel comprenant une page corrompue par le bloc identique occupé par la première copie du logiciel ne comprenant pas de page corrompue, permettant de corriger la deuxième copie du logiciel ;
• la réexécution du programme de chargement au démarrage ;
• le chargement de la deuxième copie du logiciel.
Grâce au procédé selon l’invention, lorsque deux ensembles de blocs d’une mémoire flash occupés respectivement par deux copies d’un logiciel à charger, comprennent chacun au moins un bloc comportant une page corrompue par une erreur non corrigible par un algorithme automatique de correction d’erreur de type ECC, il est possible de corriger chacune des deux copies et de charger le logiciel en mémoire vive.
Avantageusement, le procédé selon l’invention comprend par ailleurs le remplacement du bloc corrompu de la première copie du logiciel par le bloc identique occupé par la deuxième copie du logiciel, permettant de corriger la première copie du logiciel à charger.
Selon un mode de réalisation, le procédé selon l’invention comprend, avant le remplacement du bloc corrompu de la deuxième copie du logiciel, lorsque deux pages distinctes de deux blocs identiques sont corrompues, c’est-à-dire lorsque, dans des blocs destinés à être occupés par des données identiques, respectivement de la première et de la deuxième copies du logiciel à charger, deux pages destinées à contenir des données distinctes, respectivement dans chacun desdits blocs, sont corrompues :
• la mise en œuvre d’un algorithme configuré pour reconstituer un bloc non corrompu correspondant auxdits blocs corrompus, à partir des données occupant des pages non corrompues de chacun desdits blocs corrompus, • le remplacement du bloc corrompu de la première copie du logiciel à charger par ledit bloc non corrompu reconstitué.
Ainsi, selon ce mode de réalisation, lorsque deux blocs identiques, hébergeant des données relatives aux deux copies du logiciel à charger sont corrompus, en des pages différentes, il est reconstitué un bloc équivalent non corrompu à partir des pages non corrompues de chacun desdits blocs. Ce bloc non corrompu reconstitué est disponible pour réparer les deux blocs corrompus.
La présente invention vise également un système embarqué comprenant un programme de chargement au démarrage configuré pour mettre en œuvre le procédé brièvement décrit ci-dessus.
La présente invention vise également un calculateur comprenant un programme de chargement au démarrage configuré pour mettre en œuvre le procédé brièvement décrit ci-dessus.
La présente invention vise aussi un véhicule automobile comprenant un tel calculateur.
L’invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d’exemple, et se référant aux dessins annexés qui représentent :
- la figure 1, le schéma de principe d’une mémoire de type « flash NAND », selon l’état de la technique :
- la figure 2, le diagramme représentant le principe d’exécution d’un programme de chargement au démarrage ;
- la figure 3, le diagramme représentant le principe du procédé selon l’invention.
II faut noter que les figures exposent l’invention de manière détaillée pour en permettre la mise en œuvre, lesdites figures pouvant bien entendu également servir à mieux définir l’invention.
L'invention est présentée principalement en vue d’une mise en œuvre du procédé de correction d’erreur dans une mémoire flash de type NAND comprenant deux versions identiques d’un logiciel à charger, quel que soit le domaine technique dans lequel ladite mémoire flash est mise en œuvre.
Cependant, le procédé selon l’invention vise notamment le domaine technique de l’automobile, dans lequel des mémoires non volatiles, de type mémoire « flash NAND », sont couramment mises en œuvre, et dans lequel le cycle de vie du produit (l’automobile) peut être long au regard du nombre de cycles autorisés sur lesdites mémoires flash.
En référence à la figure 1, comme cela est connu de l’homme du métier, une mémoire de type « flash NAND » est divisée en blocs BO, B1, Bn comprenant chacun plusieurs pages PO, P1,..., P62, P63. D’autre part, chaque page est constituée d’une zone de « données » D, dite « data area » selon l’expression en anglais connue de l’homme du métier, et une zone « réservée » S, dite « spare area » selon l’expression en anglais connue de l’homme du métier. La zone réservée S comporte en particulier une balise spéciale comprenant une information relative à l’éventuel caractère corrompu de la page correspondante.
En pratique, une application accède en lecture / écriture à une page et réalise des effacements bloc par bloc.
Comme évoqué précédemment, et en référence à la figure 2, un programme de démarrage RBL, également désigné en anglais sous l’expression de « ROM Boot Loader » est exécuté au démarrage du système embarqué. Le programme de démarrage RBL charge en mémoire vive un programme de chargement au démarrage UBL pour en permettre l’exécution. Bien que cela ne soit pas représenté, il peut exister en mémoire flash, comme indiqué précédemment, plusieurs instances du programme de chargement au démarrage UBL, l’une de ces instances, valide, étant chargée en mémoire vive, en vue de son exécution, par le programme de démarrage RBL. Le programme de chargement au démarrage UBL, également désigné en anglais sous l’expression de « User Boot Loader », assure la fonction de chargement en mémoire vive d’un logiciel exécutable voulu, stocké dans une mémoire flash de type NAND. Le logiciel à charger existe en au moins deux copies identiques SW1, SW2 en mémoire flash.
Le programme de chargement au démarrage UBL est par exemple configuré, au lancement du processus de chargement du logiciel, pour charger en mémoire vive une première copie SW1 du logiciel. Le programme de chargement au démarrage UBL accède par conséquent aux données présentes dans la mémoire flash et correspondant à la première copie SW1 du logiciel. Pour chaque page de chaque bloc hébergeant lesdites données, Le programme de chargement au démarrage UBL vérifie l’intégrité des données présentes dans ladite page, en lisant la balise prévue à cet effet.
En cas de corruption d’une page, en raison d’une erreur sur au moins un bit non corrigible par un algorithme de correction automatique de type ECC, le chargement de la première copie SW1 du logiciel est interrompu et la configuration du programme de chargement au démarrage UBL est modifiée de telle sorte qu’il démarre, la fois suivante, sur la deuxième copie SW2, alternative, du logiciel.
Le programme de chargement au démarrage UBL redémarre alors et cherche à charger la deuxième copie SW2 du logiciel.
Selon l’état de la technique, cette stratégie permet de résoudre la plupart des cas d’altération de bits d’une mémoire flash. Cependant, un problème majeur persiste dans le cas où un bit d’une page hébergeant des données correspondant à la deuxième copie SW2 du logiciel est corrompu, sans être corrigible par un algorithme de correction automatique de type ECC. Dans l’état de l’art, le problème est alors insoluble de façon simple.
En référence à la figure 3, le procédé selon l’invention permet de parer à cette éventualité.
En effet, dans l’hypothèse où les deux copies identiques SW1, SW2 du logiciel à charger en mémoire vive seraient corrompues, faisant l’objet d’une erreur non corrigible par un algorithme de correction automatique de type ECC, le procédé selon l’invention permet d’éviter d’entrer dans une boucle infinie d’échecs au démarrage suivi de redémarrages du programme de chargement au démarrage UBL.
A cette fin, à titre d’exemple non limitatif, il est fait référence à la figure 3 dans laquelle une première copie SW1 du logiciel à charger est stockée en mémoire flash sur N blocs, dont les blocs BO à B4 de ladite mémoire flash, tandis qu’une deuxième copie SW2 est stockées entre les en mémoire flash sur N blocs, dont les blocs B50 à B54 de ladite mémoire flash, les blocs BO et B50 étant destinés à contenir des données identiques du logiciel, de même que, respectivement, les blocs B1 et B51, les blocs B2 et B52, les blocs B3 et B53, les blocs B4 et B54, etc. Chaque bloc comprend 64 pages numérotées de P1 à P63. Il est rappelé à nouveau que les nombres et les numéros de pages ou de blocs de la mémoire flash sont choisis ici à titre purement illustratifs. Ainsi, par exemple, la page P1 du bloc B2, affectant la première copie SW1, est corrompue par une erreur non corrigible par un algorithme de correction automatique de type ECC, et la page P3 du bloc B53, affectant la deuxième copie SW2, est également corrompue par une erreur non corrigible par un algorithme de correction automatique de type ECC.
Le programme de chargement au démarrage UBL assure alors la réparation des deux copies corrompues en « flashant », c’est-à-dire en effaçant puis en réécrivant les blocs comprenant la page corrompue, par copie du bloc non corrompu correspondant issu de l’autre copie du logiciel.
Dans l’exemple choisi, le programme de chargement au démarrage est supposé avoir tenté de démarrer la première copie SW1 du logiciel. En raison de la corruption de la page P1 du bloc B2, cette information étant stockée en mémoire persistante de la mémoire flash, le programme de chargement au démarrage UBL voit sa configuration modifiée de façon à ce qu’il tente de charger la deuxième copie SW2 du logiciel au prochain démarrage, et il redémarre.
La tentative de chargement de la deuxième copie SW2 du logiciel échoue également en raison de la corruption de la page P3 du bloc B53, cette information étant stockée en mémoire persistante de la mémoire flash. Dès lors, le programme de chargement au démarrage UBL sait que les deux copies SW1, SW2 du logiciel à charger sont corrompues.
De ce fait, le programme de chargement au démarrage UBL « flashe » le bloc B53 en l’effaçant puis en y copiant le contenu du bloc B3, identique et non corrompu.
Par suite, le programme de chargement au démarrage UBL, selon un mode de réalisation, répare également la première copie du logiciel en « flashant » le bloc B2 à l’aide du contenu du bloc B52, identique et non corrompu.
L’exemple précédent est adapté à une situation dans laquelle le bloc comportant une page corrompue occupé par la première copie SW1 du logiciel et le bloc comportant une page corrompue occupé par la deuxième copie SW2 du logiciel sont distincts, c’est-à-dire que lesdits blocs comportant respectivement une page corrompue ne sont pas configurés pour être occupés par des données identiques du logiciel.
Cependant, De la même manière, si deux pages différentes d’un même bloc, c’est-à-dire, par exemple la page P1 du bloc B1 et la page P12 du bloc B51, sont corrompues par une erreur non corrigible par un algorithme de correction automatique de type ECC, chaque bloc est réparé au moyen d’un bloc sain reconstitué, dans une étape intermédiaire, à partir de pages saines des deux blocs.
Il est à noter que le fait de « flasher » le bloc corrompu pour le réparer présente l’avantage incident de recharger les bits correspondants de la mémoire flash, réduisant le risque de subir la présence de bits erronés en raison d’un basculement non souhaité de leur valeur suite à la « fatigue » de la mémoire flash entraînant une baisse de la tension aux bornes de ces bits (phénomène de « bit flipping » selon l’expression usuelle en anglais).
En résumé, le procédé selon l’invention permet de démarrer une application logicielle dupliquée sur une mémoire flash de type NAND, même lorsque les deux copies sont corrompues.
Il est précisé, en outre, que la présente invention n’est pas limitée au mode de réalisation décrit ci-dessus et est susceptible de variantes accessibles à l’homme de l’art.

Claims (6)

  1. REVENDICATIONS
    1. Procédé de correction d’erreur dans une mémoire flash non volatile de type NAND, ladite mémoire flash comprenant un ensemble de blocs (BO, B1, B2, B3, B4, B50, B51, B52, B53, B54) auxquels l’application accède en lecture ou en écriture ou en effacement, chaque bloc (BO, B1, ..., B50, B51, ...) comportant une pluralité de pages (PO, P1, ..., P63), ladite mémoire comprenant une première et une deuxième copies (SW1, SW2), identiques, d’un logiciel à charger, la première et la deuxième copies (SW1, SW2) du logiciel occupant physiquement un nombre égal de blocs distincts, une page d’un bloc occupé par des données de la première copie (SW1) du logiciel étant corrompue, et une page d’un bloc occupé par des données de la deuxième copie (SW2) du logiciel étant corrompue, ledit procédé comprenant l’exécution d’un programme de chargement au démarrage (UBL) mettant en œuvre les étapes suivantes :
    • la tentative de chargement de la première copie (SW1) du logiciel par le programme de chargement au démarrage (UBL) ;
    • la découverte par le programme de chargement au démarrage (UBL) qu’au moins une page(P1) d’un bloc (B2) occupé par la première copie (SW1) du logiciel est corrompue ;
    • l’enregistrement d’une identification de ladite au moins une page corrompue dans une mémoire persistante de la mémoire flash ;
    • la configuration du programme de chargement au démarrage (UBL) pour qu’il charge la deuxième copie (SW2) du logiciel à la prochaine exécution ;
    • la réexécution du programme de chargement au démarrage (UBL) ;
    • la tentative de chargement de la deuxième copie (SW2) du logiciel par le programme de chargement au démarrage (UBL) ;
    • la découverte par le programme de chargement au démarrage (UBL) qu’au moins une page (P3) d’un bloc (B53) occupé par la deuxième copie (SW2) du logiciel est corrompue ;
    • l’enregistrement d’une identification de ladite au moins une page corrompue dans une mémoire persistante de la mémoire flash ;
    • le remplacement du bloc (B53) occupé par la deuxième copie (SW2) du logiciel comprenant une page corrompue par le bloc identique (B3) occupé par la première copie (SW1) du logiciel ne comprenant pas de page corrompue, permettant de corriger la deuxième copie du logiciel ;
    • la réexécution du programme de chargement au démarrage (UBL) ;
    • le chargement de la deuxième copie (SW2) du logiciel.
  2. 2. Procédé selon la revendication 1, comprenant par ailleurs le remplacement du bloc corrompu (B2) de la première copie (SW1) du logiciel par le bloc identique (B52) occupé par la deuxième copie (SW2) du logiciel, permettant de corriger la première copie (SW1) du logiciel à charger.
  3. 3. Procédé selon l’une quelconque des revendications précédentes, comprenant, avant le remplacement du bloc corrompu de la deuxième copie (SW2) du logiciel, lorsque deux pages distinctes de deux blocs identiques sont corrompues, c’est-à-dire lorsque, dans des blocs destinés à être occupés par des données identiques, respectivement de la première (SW1) et de la deuxième (SW2) copies du logiciel à charger, deux pages destinées à contenir des données distinctes, respectivement dans chacun desdits blocs, sont corrompues :
    • la mise en œuvre d’un algorithme configuré pour reconstituer un bloc non corrompu correspondant auxdits blocs corrompus, à partir des données occupant des pages non corrompues de chacun desdits blocs corrompus, • le remplacement du bloc corrompu de la première copie (SW1) du logiciel à charger par ledit bloc non corrompu reconstitué.
  4. 4. Système embarqué comprenant un programme de chargement au démarrage configuré pour mettre en œuvre le procédé selon l’une quelconque des revendications précédentes.
  5. 5. Calculateur comprenant un programme de chargement au démarrage configuré pour mettre en œuvre le procédé selon l’une quelconque des revendications 1 à 3.
  6. 6. Véhicule automobile comprenant un calculateur selon la revendication précédente.
    1/2
FR1658324A 2016-09-08 2016-09-08 Procede de correction d'erreur dans une memoire flash Active FR3055714B1 (fr)

Priority Applications (4)

Application Number Priority Date Filing Date Title
FR1658324A FR3055714B1 (fr) 2016-09-08 2016-09-08 Procede de correction d'erreur dans une memoire flash
PCT/FR2017/052378 WO2018046857A1 (fr) 2016-09-08 2017-09-07 Procédé de correction d'erreur dans une mémoire flash
CN201780054614.XA CN109643261B (zh) 2016-09-08 2017-09-07 闪存中的纠错方法
US16/323,868 US10866867B2 (en) 2016-09-08 2017-09-07 Method of error correction in a flash memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1658324A FR3055714B1 (fr) 2016-09-08 2016-09-08 Procede de correction d'erreur dans une memoire flash

Publications (2)

Publication Number Publication Date
FR3055714A1 true FR3055714A1 (fr) 2018-03-09
FR3055714B1 FR3055714B1 (fr) 2018-09-28

Family

ID=57137181

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1658324A Active FR3055714B1 (fr) 2016-09-08 2016-09-08 Procede de correction d'erreur dans une memoire flash

Country Status (4)

Country Link
US (1) US10866867B2 (fr)
CN (1) CN109643261B (fr)
FR (1) FR3055714B1 (fr)
WO (1) WO2018046857A1 (fr)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111190648A (zh) * 2019-12-26 2020-05-22 湖南工程学院 基于nand flash的实时嵌入式系统及其启动方法
US12019503B2 (en) 2022-05-18 2024-06-25 Samsung Electronics Co., Ltd. Systems and methods for expandable memory error handling

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050160217A1 (en) * 2003-12-31 2005-07-21 Gonzalez Carlos J. Flash memory system startup operation
US20060155979A1 (en) * 2005-01-07 2006-07-13 Blinick Stephen L Multiple execution-path system
US20110283136A1 (en) * 2007-11-28 2011-11-17 Icera Inc. Memory errors

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1238783C (zh) * 2002-10-15 2006-01-25 联发科技股份有限公司 光盘损坏管理方法
US20050168767A1 (en) * 2004-02-02 2005-08-04 International Business Machines Corporation Method and system for reprinting pages
KR100802059B1 (ko) * 2006-09-06 2008-02-12 삼성전자주식회사 읽기 디스터브로 인한 배드 블록의 생성을 억제할 수 있는메모리 시스템 및 그것의 동작 방법
JP2008191701A (ja) * 2007-01-31 2008-08-21 Toshiba Corp エラー回復処理方法および情報処理装置
US8904098B2 (en) * 2007-06-01 2014-12-02 Netlist, Inc. Redundant backup using non-volatile memory
CN102073563B (zh) * 2011-02-23 2015-09-09 深圳市江波龙电子有限公司 闪存设备、闪存设备中存储块的管理方法及系统
US8990549B2 (en) * 2012-07-12 2015-03-24 Freescale Semiconductor, Inc. Method and system for booting electronic device from NAND flash memory
US9262257B2 (en) * 2014-04-21 2016-02-16 Netapp, Inc. Providing boot data in a cluster network environment

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050160217A1 (en) * 2003-12-31 2005-07-21 Gonzalez Carlos J. Flash memory system startup operation
US20060155979A1 (en) * 2005-01-07 2006-07-13 Blinick Stephen L Multiple execution-path system
US20110283136A1 (en) * 2007-11-28 2011-11-17 Icera Inc. Memory errors

Also Published As

Publication number Publication date
CN109643261A (zh) 2019-04-16
WO2018046857A1 (fr) 2018-03-15
FR3055714B1 (fr) 2018-09-28
CN109643261B (zh) 2023-06-02
US10866867B2 (en) 2020-12-15
US20190171534A1 (en) 2019-06-06

Similar Documents

Publication Publication Date Title
US9086961B2 (en) Repair method and device for abnormal-erase memory block of non-volatile flash memory
US20090161430A1 (en) Bit map control of erase block defect list in a memory
US20110289349A1 (en) System and Method for Monitoring and Repairing Memory
CN111176890B (zh) 一种星载软件数据存储及异常恢复方法
WO2018046857A1 (fr) Procédé de correction d'erreur dans une mémoire flash
FR2896612A1 (fr) Dispositif de memoire non volatile a rafraichissement periodique et procede de programmation d'un tel dispositif
FR3055992A1 (fr) Gestion d'index dans une memoire flash
EP2724237B1 (fr) Procédé de gestion de l'endurance de mémoires non volatiles
US20080040368A1 (en) Recording notations per file of changed blocks coherent with a draining agent
CN109683980B (zh) 实现轨旁安全平台u盘配置文件可靠装载的方法
FR3044817A1 (fr) Procede de gestion d'une ligne de bits defectueuse du plan memoire d'une memoire non volatile et dispositif de memoire correspondant
US11500848B2 (en) Method for determining the integrity of navigation data of a control unit of an automotive vehicle
CN113157490B (zh) 一种芯片内嵌的Flash存储器和存储控制方法
US20100146188A1 (en) Replicated file system for electronic devices
EP3131005B1 (fr) Equipement électronique ferroviaire comprenant un programme de démarrage comportant une ou plusieurs partitions de démarrage, véhicule ferroviaire et système ferroviaire associés
CN110297728B (zh) 基于起源数据的文件重建过程中选择性数据重建方法
WO2007090857A1 (fr) Procede de mise a jour securisee de memoire non volatile
FR3026870A1 (fr) Dispositif de gestion du stockage de donnees.
EP0919914B1 (fr) Architecture pour la gestion de données vitales dans une machine multi-modulaire et procédé pour la mise en oeuvre d'une telle architecture
EP2229648A1 (fr) Methode de transfert securise de donnees
FR3079945A1 (fr) Procede de detection d’un risque de perte de donnees d’une memoire non volatile-temporaire dans un calculateur et de perennisation de ces donnees.
US20220137861A1 (en) Method and device for operating a nonvolatile memory device
US20230315520A1 (en) Electric device and controlling method for electric device
FR2903791A1 (fr) Procede de telechargement d'un module logiciel.
US20180292994A1 (en) Method and device for operating a memory device

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 2

PLSC Publication of the preliminary search report

Effective date: 20180309

PLFP Fee payment

Year of fee payment: 3

PLFP Fee payment

Year of fee payment: 4

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9