FR 2665791 A1 19920214 FR 9010297 A 19900813 DESCRIPTION PROCEDE DE MISE A JOUR D'UNE MEMUIRE EEPROM La présente invention a pour objet un procédé de mise à jour d'une mémoire EEPROM. Elle trouve une application générale en informatique et, plus specia- lement, dans la gestion des cartes à microprocesseur (dites parfois "cartes à puce"). L'avènement des mémoires EEPROM ("Electrical Erasable Programmable Memory"), notamment dans les cartes à microprocesseur, a modifié sensiblement la façon dont sont écrits les programmes informatiques. En effet, si cette technologie permet d'écrire des données et de les lire, elle permet aussi d'effacer et de ré-écrire à une même adresse. Si ces possibiLités ouvrent des applications nouvelles, elles sou Lèvent également des problèmes relativement aux risques encourus lors des mises à jour. En effet, si, pour une raison quelconque (coupure du secteur, malveillance, etc...), la nouvelle donnée devant remplacer l'ancienne vient à ne pas s'écrire ou à s'écrire de manière inexacte, des erreurs pouvant avoir des conséquences désastreuses dans certaines applications (financières, médicales, contrôLe d'accès, sécurité, ...) peuvent se produire. La présente invention a justement pour but de remédier à cet inconvénient, A cette fin, elle propose un procédé de mise à jour qui évite tout risque de perte de l'information. Le procédé de l'invention est caractérisé par le fait que : - pour chaque information I à mémoriser, on utilise une pluralité de p zones d'une mémoire, p étant un entier au moins égal à 2, on mémorise les p dernières valeurs de l'information Int In~1, ..., 1n-p+1' dans ces p zones, depuis la valeur courante In jusqu'à la (p-1)ième précédente valeur In-p+1 t on définit par un pointeur P l'adresse de la zone contenant la valeur courante In de l'information, - pour mettre à jour la valeur courante de l'information, on effectue une suite d'opérations n'affectant chacune qu'une des zones mémoire ou que le pointeur, ces opérations comprenant, notamment, L'effacement de la plus ancienne valeur 1n-p+1' l'écriture de la nouvelle valeur et et la modification du pointeur pour définir la nouvelle adresse de la nouvelle zone où se trouve finalement la nouvel Le valeur In+1 mise à jour, après chaque opération d'écriture dans une zone, on vérifie si le nouveau contenu de la zone est bien égal au contenu que l'on voulait y écrire, et, dans la négati- ve, lorsque l'opération d'écriture a été manquée, on rétablit le contenu antérieur à l'opération manquée et on réitère ladite opération. Dans une première variante avantageuse, on utilise deux zones mémoire (p=2), la précédente valeur de l'information In-1 étant écrite dans une première zone (a) et la valeur courante In dans une seconde zone (b), le pointeur P étant constitué d'un seul bit, dont la valeur indique celle des deux zones mémoire (a) ou (b) qui contient la valeur courante 1n Dans une seconde variante, on utilise huit zones mémoire a, b, c, d, e, f, g, h pour mémoriser les huit dernières valeurs de l'information 1n' In~1, ..., In~7 rangées de la gauche vers la droite, le pointeur d'adresse P étant constitué par un octet dont le contenu est une suite de bits à 1, le rang du bit à 1 le plus à droite désignant le rang de la zone ou se trouve la valeur courante In de l'information, un indicateur à un bit étant utilise pour valider le pointeur P. Naturellement, on peut imaginer des variantes à plus de huit zones, la variante à huit zones convenant cependant bien aux dispositifs à microprocesseur à 8 bits. De toute façon, les caractéristiques de l'invention apparaîtront mieux à la Lumière de La description qui va suivre. Cette description porte sur des modes de réalisation du procédé de l'invention, qui sont donnés à titre explicatif et nullement limitatif. Dans la variante à deux zones, on peut procéder à la mise à jour de plusieurs manières, par exemple en six étapes ou en trois. 1) Mise à jour en six etapes - étape O (ou état initial) : le pointeur P est à O, la première zone (a) contient la valeur précédente In~1, la seconde zone (b) La valeur courante In, - étape 1 : on efface la zone (a), - étape 2 : on écrit la valeur courante In dans la première zone (a), - étape 3 : on fait passer le pointeur P à 1, - étape 4 : on efface la seconde zone (b), - étape 5 : on écrit la nouvelle valeur à jour In+1 dans la seconde zone (b), - étape 6 (état final) : on refait passer le pointeur à 0. Le tableau I suivant résume ces opérations TABLEAU I (p) (a) (b) état O (état initial) 0 1n-l In état 1 U U In état 2 0 In In état 3 1n In état 4 1 Ln état 5 1 In 1n In+1 état 6 (état final) 0 In In+1 Naturellement, le pointeur P pourrait être mis d'abord à 1 (au lieu de O) si, par convention inverse, la zone (b) était pointée par un 1. 2) Mise à jour en trois étapes : - étape O (état initial) : le contenu du pointeur P est à 0, la première zone (a) comprend la valeur précédente In-l et la seconde zone (b) la valeur courante Int - étape 1 : on efface la première zone (a), - étape 2 : on écrit dans la première zone (a) la nouvelle valeur à jour In+1, - étape 3 : on fait passer le pointeur P à 1. Le tableau Il suivant résume ces opérations : TABLEAU Il (p) (a) (b) étape U (état initial) U 1n-l In étape 1 0 0 In étape 2 Ion+1 In étape 3 (état final) I In+1 In Là encore, la convention sur le pointeur peut être inversée (1 au lieu de 0, U au Lieu de 1). Dans le mode de réalisation utilisant huit zones et un octet comme pointeur, le procédé de mise à jour comprend, par exemple, les étapes suivantes - étape U (état initial) : les huit zones a, b, c, d, e, f, g, h contiennent respecti vement les huit dernières valeurs ae l'information allant de la valeur courante In à la plus ancienne valeur In~7 le bit à 1 le plus à droite du pointeur indiquant la zone où se trouve la valeur courante Int l'indicateur est à 0, - étape 1 : on efface la zone directement à droite de la zone contenant la valeur courante et qui contient la plus ancienne valeur In-7 - étape 2 : on écrit la nouvelle valeur à jour In+1 dans la zone qui vient d'être effacée, - étape 3 (état final) : un 1 supplémentaire est écrit à droite dans le pointeur. Le tableau III ci-après résume les opérations. Dans le cas particulier où la valeur à jour In est mémorisée dans la zone la plus à droite, le pointeur ayant alors ses huit bits à 1, pour écrire la nouvelle valeur mise à jour, on s'y prent comme suit - étape 1 : on efface Le contenu de la premiè re zone Ca), - étape 2 : on écrit la nouvelle valeur à jour In*1 dans cette première zone (a), - étape 3 : on fait passer l'indicateur à i 1, - étape 4 : on met à O les huit bits du poin teur P, - étape 5 : on met à 1 Le premier bit à gauche du pointeur P, - étape 6 : on remet l'indicateur à i 0. Le tableau IV ci-après résume ces opérations. Comme dans le cas de la mise à jour sur deux zones, une seule donnée contenue dans une zone, dans le pointeur ou dans l'indicateur est modifiée à chaque étape. Là encore, la convention sur l'indicateur peut être inversée (1 au lieu de a, O au Lieu de 1). Si au cours d'une des opérations qui viennent d'être décrites, un quelconque problème faisait que la mise à jour ne pouvait s'effectuer complètement, il serait toujours possible, d'une part, de s'en rendre compte (en effectuant une lecture de la zone qui vient d'être écrite et en la comparant à ce que l'on voulait y écrire) et, d'autre part, de se replacer dans la situation antérieure pour réitérer C'opération manquée. TABLEAU III Zones a b c d e f g h Etape initiale: Contenu In-2 In-1 In In-7 In-6 In-5 In-4 In-3 Pointeur 1 1 1 0 0 0 0 0 Indicateur 0 Etape 1: Contenu In-2 In-1 In 0 In-6 In-5 In-4 In-3 Pointeur 1 1 1 0 0 0 0 0 Indicateur 0 Etape 2: Contenu In-2 In-1 In In+1 In-6 In-5 In-4 In-3 Pointeur 1 1 1 0 0 0 0 0 Indicateur 0 Etape 3: : Contenu In-2 In-1 In In+1 In-6 In-5 In-4 In-3 Pointeur 1 1 1 1 0 0 0 0 Indicateur 0 TABLEAU IV Zones a b c d e f g h Etape initiale Contenu In-7 In-6 In-5 In-4 In-3 In-2 In-1 In Pointeur 1 1 1 1 1 1 1 1 indicateur 0 Etape 1 Contenu 0 In-6 In-5 In-4 In-3 In-2 In-1 In Etape 2 Contenu In+1 In-6 In-5 In-4 In-3 In-2 In-1 In Etape 3 Indicateur 1 Etape 4 Pointeur 0 0 0 0 0 0 0 0 Etape 5 Pointeur 1 0 0 0 0 00 0 0 Etape 6 Indicateur 0 REVENDICATIONS Procédé de mise à jour du contenu d'une mémoire EEPROM, caractérisé par le fait que - pour chaque information (I) à mémoriser, on utilise une pluralité de p zones de la mémoire, p étant un entier au moins égal à 2, on mémorise les p dernières valeurs de l'information zone In-1, ., In-p+i), dans ces p zones, depuis la valeur courante (In) jusqu'à la (p-1)ième précédente valeur (In-p+1 ) t on définit par un pointeur (P) l'adresse de la zone contenant la valeur courante (In) de l'information, - pour mettre à jour La valeur courante de l'information, on effectue une suite d'opérations n'affectant chacune qu'une des zones mémoire ou que le pointeur, ces opérations comprenant, notamment, l'effacement de la plus ancienne valeur (In-p+1), l'écriture de la nouvelle valeur et et la modification du pointeur pour définir la nouvelle adresse de la nouvelle zone où se trouve finalement la nouvelle valeur (In+1) mise à jour, après chaque opération d'écriture dans une zone, on vérifie si le nouveau contenu de la zone est bien égal au contenu que l'on voulait y écrire, et, dans La négati- ve, lorsque l'opération d'écriture a été manquée, on rétablit le contenu antérieur à l'opération manquée et on réitère ladite opération. 2. Procédé selon la revendication 1, caracté- rise par le fait que l'on utilise deux zones mémoire (p=2), la précédente valeur de l'information (In-1) étant écrite dans une première zone (a) et la valeur courante (In) dans une seconde zone (b), le pointeur (P) étant constitué d'un seul bit, dont la valeur indique celle des deux zones mémoire ((a) ou (b)) qui contient la valeur courante (In) 3.Procédé selon la revendication 2, caracté- risé par le fait que la mise à jour s'effectue en six étapes - étape O (ou état initial) : le pointeur (P) est à p (O ou 1), la première zone (a) contient la valeur précédente (In-1), la seconde zone (b) la valeur courante - étape 1 : on efface la zone (a), - étape 2 : on écrit la valeur courante (In) dans la première zone (a), - étape 3 : on fait passer le pointeur (P) à p (1 ou 0), - étape 4 : on efface la seconde zone (b), - étape 5 : on écrit la nouvelle valeur à jour (In+1) dans la seconde zone (b), - étape 6 (état final) : on refait passer le pointeur à p (O ou 1). 4. Procédé selon la revendication 2, caracté- risé par le fait qu'il comprend les étapes suivantes : - étape O (état initial) : le contenu du pointeur (P) est à p (O ou 1), la première zone (a) comprend la valeur précédente et et la seconde zone (b) la valeur courante (In) - étape 1 : on efface la première zone (a), - étape 2 : on écrit dans la première zone (a) la nouvelle valeur à jour (In+1), - étape 3 : on fait passer le pointeur (P) à p (1 ou 0). 5. Procédé selon la revendication 1, caractérisé par le fait que l'on utilise huit zones mémoire (a, b, c, d, e, f, g, h) (p=8) pour mémoriser les huit dernières valeurs de l'information 1n, In~1, In-7), rangées de la gauche vers la droite, le pointeur d'adresse (P) étant constitué par un octet dont le contenu est une suite de bits à 1, le rang du bit à 1 le plus à droite désignant le rang de la zone ou se trouve la valeur courante (In) de l'information, un indicateur à un bit étant utilisé pour valider le pointeur (P). 6. Procédé selon la revendication 5, caractérise par le fait qu'il comprend les opérations suivantes - étape O (état initial) : les huit zones (a, b, c, d, e, f, g, h) contiennent respec tivement les huit dernières valeurs de l'information allant de la valeur courante (In) à la plus ancienne valeur (In-7), le bit à 1 le plus à droite du pointeur indiquant la zone où se trouve La valeur courante (In)* l'indicateur est à i (U ou 1), - étape 1 : on efface la zone directement à droite de la zone contenant La valeur courante et qui contient donc la plus ancienne valeur (In-7)r - étape 2 : on écrit la nouvelle valeur à jour (In+1) dans ladite zone, qui vient d'être effacée, - étape 3 (état final) : un 1 supplémentaire est écrit à droite dans le pointeur. 7. Procédé selon la revendication 6, caractérisé par le fait que, dans le cas particulier où la valeur à jour (In) est mémorisée dans la zone la plus à droite, le pointeur ayant alors ses huit bits à 1, pour écrire la nouvelle valeur mise à jour - étape 1 : on efface le contenu de la premiè re zone (a), - étape 2 : on écrit la nouvelle valeur à jour (In+1) dans cette première zone (a), - étape 3 : on fait passer l'indicateur à T (1 ou U), - étape 4 : on met à U les huit bits du poin teur (P), - étape 5 : on met à 1 le premier bit à gauche du pointeur (P), - étape 6 : on remet l'indicateur à i (O ou 1 ) .