Brevet FR2742893A1 — publié le 19970627

PROCEDE D'INSCRIPTION D'UNE DONNEE DANS UNE MEMOIRE REINSCRIPTIBLE La présente invention concerne un procédé d'inscription de valeurs courantes successives d'une donnée D dans une mémoire réinscriptible. L'invention trouve une application particulièrement avantageuse dans le domaine des cartes à mémoire électronique telles que les cartes à mémoire simple, les cartes à microprocesseur et les cartes sans contact. D'une manière générale, les cartes à mémoire electronique précitées utilisent des mémoires du type EEPROM ou flash EPROM qui ont le double avantage d'être non volatiles et électriquement effaçables, donc réinscriptibles. En revanche, elles ne peuvent être reprogrammées qu'un nombre limite de fois et leur temps de programmation est long.Dans certaines applications, il arrive que ces mémoires soient corrompues pour l'une ou l'autre des raisons suivantes nombre de réinscriptions trop important, entraînant une usure des cellules-mémoire, - programmation effectuée dans un temps trop court, entraînant une charge insuffisante des cellules-mémoire, - interruption accidentelle de l'alimentation électrique en cours de programmation, entraînant le même effet, voire l'effacement des valeurs antérieures sans programmation de valeurs nouvelles. Ce dernier risque est particulièrement important dans les applications, telles que les cartes à mémoire électronique, où ladite mémoire est embarquée dans un objet dépendant d'une source d'alimentation extérieure dont il peut être séparé à tout moment. Des solutions à ce problème ont déjà eté décrites. Elles consistent généralement, lorsque l'on veut modifier les valeurs d'une donnée D, à inscrire les valeurs courantes successives de ladite donnée dans des zones différentes de la mémoire. En conséquence, il est nécessaire de programmer le pointeur servant d'indicateur de manière à ce qu'il puisse désigner la zone dans laquelle est inscrite la dernière valeur courante de la donnée D. L'inconvénient de ce type de procéde est qu'il nécessite plusieurs opérations d'inscription qui peuvent, chacune, être le siège d'une corruption. Le logiciel gérant les inscriptions dans la mémoire doit donc être complexe et, de là, consommateur de temps et d'espace mémoire Aussi, le problème technique à résoudre par l'objet de la présente invention est de proposer un procédé d'inscription de valeurs courantes successives d'une donnée D dans une mémoire reinscriptible, consistant à inscrire lesdites valeurs courantes successivement en différentes zones de la mémoire et à programmer des indicateurs aptes à désigner celle desdites zones contenant la dernière valeur courante inscrite de la donnée D, procédé qui permettrait de simplifier la gestion des opérations d'inscription tant en assurant l'augmentation de la durée de vie des cellules de la mémoire ainsi que l'intégrité de la donnée D au moment de l'inscription de la dernière valeur courante. La solution au problème technique posé consiste, selon la présente invention, ce que ladite mémoire est décomposée en N zones k (k= 1,..., N), chaque zone k comprenant un premier espacemémoire affecté à un indicateur I (k) et un deuxième espace-mémoire affecté à une valeur courante D (k) de la donnée D, la zone ko contenant la dernière valeur courante D (ko) inscrite étant définie, soit par une discontinuité dans la suite des indicateurs I(k), soit par la dernière zone N (ko = N) en l'absence de discontinuité, et en ce qu'une nouvelle valeur courante de la donnée D est inscrite dans la zone suivante ko + l avec mise à jour de l'indicateur I (ko + 1). Le procéde de l'invention présente plusieurs avantages. En premier lieu, le gestionnaire de mémoire se trouve simplifié puisqu'après avoir inscrit dans un premier temps la dernière valeur courante de la donnée D et vérifié que cette inscription est correcte, il suffit de mettre à jour l'indicateur correspondant. Sinon, l'indicateur n'est pas mis à jour et la valeur courante précédente reste "active". I1 n'est donc pas nécessaire de contrôler la bonne inscription à plusieurs adresses. En deuxième lieu, le mecanisme de récupération d'erreur est très simple. Comme les indicateurs ne peuvent avoir que deux valeurs faciles à déterminer, à savoir celle avant mise à jour ou celle après mise à jour si celle-ci a été effectuée suite à la validation de l'inscription de la nouvelle valeur courante de la donnée D, l'absence de mise à jour d'un indicateur entraîne que la valeur courante précédente reste "active". Donc, dans tous les cas, une corruption dans l'inscription de la donnée D n'entraîne pas la perte de cette dernière. En troisième lieu, le nombre maximum d'inscriptions d'une donnée est multiplié par N, N n'étant limité que par l'espace-mémoire total disponible. Selon un mode de réalisation particulier de l'invention, ladite discontinuité consiste dans le fait que pour ladite zone zo une relation I (k+ 1) = f[I(k), k] entre l'indicateur I (k+ 1) et l'indicateur précédent I(k) n'est pas vérifiée I (ko + 1) + f [I(ko), ko]. A titre d'exemple, la fonction fest définie par I (k+l) = I (k). Dans ce cas, l'indicateur I(ko) de la zone ko de la dernière valeur courante est celui pour lequel l'indicateur I (ko+ 1) de la zone ko + 1 suivante est différent I (ko + 1) 4 I(ko). Une variante du procédé conforme à l'invention consiste en ce que la fonction f est définie par I(k+l) = I(k) + g(k). En particulier, on peut prendre g(k) = 1, auquel cas on a I (k+l) = I(k) + 1. L'indicateur I(ko) de la zone ko de la dernière valeur courante est celui pour lequel l'indicateur I (ko + 1) de la zone ko + 1 suivante est tel que I (ko + 1) + I(ko) + 1. On verra plus loin un exemple où I(ko + 1) = I (ko). Enfin, il y a avantage à ce qu'un gestionnaire de mémoire contrôle la cohérence de la suite des indicateurs I(k). Dans ce cas, on peut même prévoir que chaque zone k de la mémoire est complétée par une information de contrôle de cohérence. La description qui va suivre en regard des dessins annexés, donnés à titre d'exemples non limitatifs, fera bien comprendre en quoi consiste l'invention et comment elle peut être réalisée. Les figures la à lc représentent une mémoire réinscriptible à differents stades d'inscription selon un premier procédé conforme à l'invention. La figure id représente la mémoire réinscriptible des figures la et lc inscrites selon une variante du premier procédé d'inscription. Les figures 2a à 2d représentent une mémoire réinscriptible à différents stades d'inscription selon un deuxième procédé conforme à l'invention. La figure 3 représente une mémoire réinscriptible analogue à celle des figures la à lc, complétée par une information de contrôle de cohérence. La mémoire réinscriptible montrée sur les figures la à lc est destinée à recevoir N valeurs courantes successives D(k) (k=l,..., N) d'une donnée D selon un procédé d'inscription qui consiste notamment à décomposer ladite mémoire en N zones k comprenant, chacune, un premier espace mémoire affecté à un indicateur Z(k) et un deuxième espace-mémoire, contigu à la première, dans laquelle est inscrite une valeur courante D(k), de la donnée D. Le rôle des indicateurs I (k) est de pouvoir désigner à un moment donné celle desdites zones, notée ko, contenant la dernière valeur courante D(ko) inscrite dans la mémoire, et, par voie de conséquence, à repérer la zone dans laquelle devra être inscrite une nouvelle valeur courante de la donnée D. Comme on peut le voir sur la figure la qui décrit un stade quelconque d'inscription de la mémoire, les valeurs courantes D(k) de la donnée D sont inscrites successivement, dans l'ordre, dans les différentes zones k correspondantes de la mémoire, c'est-à-dire la valeur D(1) en zone z=1, la valeur D(2) en zone z=2, etc... La zone ko contenant la dernière valeur courante D (k=ko) inscrite est definie par une discontinuité dans la suite des indicateurs I(k). D'une manière générale, pour repérer ladite discontinuité, et donc la zone ko, on définit une relation I(k+l) = f[I(k), k] qui doit être normalement vérifiée entre l'indicateur I(k+l) et l'indicateur précédent I(k), la discontinuité apparaissant précisément à la zone ko pour laquelle la relation précitée n'est pas vérifiée : I(ko + 1) = f (I(ko), ko). Dans les exemples des figures la à lc, la fonction f est definie par I (k+ 1) = I(k), les indicateurs pouvant prendre l'une des valeurs binaires 0 ou 1. On voit sur la figure 1 que jusqu'à k = ko on a I (k+l) = I(k) = 1 tandis que I (ko + 1) $ I (ko), indiquant que la dernière valeur inscrite est D(k=ko). Une nouvelle valeur courante de la donnée D sera inscrite dans la zone suivante ko + 1. Après validation de l'inscription, l'indicateur I(ko+ 1) est mis à jour par passage de la valeur binaire 0 à la valeur binaire 1, faisant ainsi entrer la zone ko + 1 dans la régularité de la relation I(k+ 1) = I (k) et transportant la discontinuité un rang plus loin. En l'absence de discontinuité, comme sur la figure lb, la zone ko contenant la dernière valeur courante de la donnée D est la dernière zone ko = N. Ainsi que le montre la figure lc, la valeur courante suivante D(1) est inscrite en zone z = 1 avec passage de l'indicateur I(1) de 1 à 0. L'état de la mémoire de la figure la est obtenue à partir d'une mémoire vierge D(k) = , et d'indicateurs I(k) tous égaux à 0, par exemple. Conformément à la règle énoncée plus haut, la première valeur courante de D sera inscrite dans la zone z = 1, la mise à jour de I (1) se faisant par passage de la valeur binaire 1 à la valeur O. Puis, les valeurs courantes suivantes seront inscrites successivement dans les zones k=2,3 jusqu'à N avec chaque fois mise àjour, après validation, de l'indicateur correspondant par changement d'état binaire. De manière à connaître le nombre total d'inscriptions portées successivement dans une zone k de la mémoire, on peut prévoir par exemple que le nombre des valeurs courantes D(1) ayant été inscrites dans la zone z = 1 est stocké dans un compteur, non représenté. Lorsque ce nombre atteint une valeur prédéterminée, le gestionnaire de la mémoire initie des actions particulières appropriées. La figure id illustre une variante du procédé d'inscription décrit en référence aux figures la à lc. Selon cette variante, la mise à jour de l'indicateur I(ko + 1) de la zone ko + 1 dans laquelle est inscrite la nouvelle valeur courante de la donnée D, est réalisée par incrémentation d'une unité, la nouvelle valeur de I(ko + 1) étant I (ko+l)+l. Dans ce cas, l'indicateur I(k), outre sa fonction d'indication, représente le nombre de valeurs courantes D(k) ayant été inscrites dans la zone k. I1 n'est alors plus besoin de compteur spécifique. Sur les figures 2a à 2d est représenté un deuxième procédé d'inscription conforme à l'invention caractérisé par le fait que, d'une façon générale, la fonction f de régularité est définie par I(k+l)=I(k) +g(k), g(k) étant égal à 1 dans l'exemple proposé. Dans la suite normale des indicateurs I(k), un indicateur donné se deduit de l'indicateur précédent par incrémentation d'une unité, la discontinuité apparaît lorsque deux indicateurs consécutifs ne satisfont pas cette condition, en pratique cette situation se produit pour l'égalité de deux indicateurs consécutifs. Comme pour le premier procédé précédemment décrit, en l'absence de discontinuité, la zone ko de la dernière inscription sera la dernière zone ko = N. La figure 2a montre l'état initial de la mémoire : aucune inscription n'y est portée et les indicateurs ne présentent aucune discontinuité versifiant tous la relation de régularité. Par conséquent, en vertu de la règle énoncée plus haut, la première valeur courante est inscrite dans la zone k=l, l'indicateur I(1) étant mis à jour par incrémentation d'une unité en passant de O à 1. Cette opération, illustrée sur la figure 2b, fait apparaître une discontinuité entre les indicateurs I(1) et I(2) permettant de repérer la zone ko = 1 comme celle contenant la dernière valeur courante D(1) de la donnée D. I1 en résulte qu'une nouvelle valeur courante sera inscrite dans la zone k=2 avec mise à jour de l'indicateur I(2) par passage de la valeur 1 à la valeur 2 et apparition d'une discontinuité entre les indicateurs I(2)et I(3), et ainsi de suite jusqu'à aboutir à la situation de la figure 2c où la mémoire est complètement remplie. Si une nouvelle valeur courante doit alors être inscrite, elle le sera en zone k=l, la nouvelle valeur D'(1) remplaçant l'ancienne valeur D(1). Cette substitution s'accompagne d'une mise à jour de l'indicateur I(1) qui passe de là 2, comme on peut le voir sur la figure 2d. On notera qu'avec ce procédé, il est très facile d'établir le nombre de valeurs courantes D(k) ayant été inscrites dans la zone k, ce nombre étant donné par I(k) - k+l. Généralement, les mémoires sont organisées en octets et en mots. I1 peut être avantageux, dans le dernier exemple décrit, de compléter l'indicateur par une information CRC de contrôle de cohérence (code correcteur d'erreur, valeur d'authentification, etc.) gérée par le gestionnaire de mémoire et permettant de contrôler à la fois la bonne écriture et le maintien de l'intégrité de la donnée dans le temps. La mémoire a alors la structure montree sur la figure 3. REVENDICATIONS 1. Procédé d'inscription de valeurs courantes successives d'une donnée D dans une mémoire réinscriptible, consistant à inscrire lesdites valeurs courantes successivement en différentes zones de la mémoire et à programmer des indicateurs aptes à désigner celle desdites zones contenant la dernière valeur courante inscrite de la donnée D, caractérisé en ce que ladite mémoire est décomposée en N zones k (k=l,..., N), chaque zone k comprenant un premier espace-mémoire affecté à un indicateur I(k) et un deuxième espace-mémoire affecté à une valeur courante D(k) de la donnée D, la zone ko contenant la dernière valeur courante D(ko) inscrite étant définie, soit par une discontinuité dans la suite des indicateurs I(k), soit par la dernière zone N(ko=N) en l'absence de discontinuité, et en ce qu'une nouvelle valeur courante de la donnee D est inscrite dans la zone suivante ko+l avec mise à jour de l'indicateur I (ko + 1). 2. Procédé selon la revendication 1, caractérisé en ce que ladite discontinuité consiste dans le fait que pour ladite zone zo une relation I(k+l) =f[I(k), k] entre l'indicateur I(k+l) et l'indicateur précédent I(k) n'est pas vérifiée I (ko +1) = f[I(ko), ko]. 3. Procédé selon la revendication 2, caractérisé en ce que la fonction fest définie par I(k+l)=I(k). 4. Procédé selon la revendication 3, caractérisé en ce que la mise à jour de l'indicateur I(ko+l) est réalisée par le passage d'un nombre binaire O ou 1 à l'autre : I'(ko+l) = I(ko+l). 5. Procédé selon la revendication 4, caractérisé en ce que le nombre de valeurs courantes D(1) ayant été inscrites dans la zone z=1 est stocke dans un compteur. 6. Procédé selon la revendication 3, caractérisé en ce que ladite mise à jour d'indicateur I(ko+l) est réalisée par incrémentation d'une unité : I'(ko + 1) = I (ko + 1) +1, I(k) représentant le nombre de valeurs courantes D(k) ayant été inscrites dans la zone k. 7. Procédé selon la revendication 2, caractérisé en ce que la fonction fest définie par I(k+l) = I(k) + g(k). 8. Procédé selon la revendication 7, caractérisé en ce que g(k) = 1. 9. Procédé selon la revendication 8, caractérisé en ce que ladite mise à jour de l'indicateur I (ka+1) est réalisée par incrementation d'une unité : I'(ko+l) = I(ko + 1)+1, I(k) - k+l représentant le nombre de valeurs courantes D(k) ayant été inscrites dans la zone k. 10. Procédé selon l'une quelconque des revendications 1 à 9, caractérisé en ce que dans chaque zone k lesdits premier et deuxième espaces-mémoire sont contigus. 11. Procédé selon l'une quelconque des revendications 1 à 10, caractérisé en ce qu'un gestionnaire de mémoire contrôle la coherence de ladite suite des indicateurs I(k). 12. Procedé selon la revendication 11, caractérisé en ce que chaque zone k de la mémoire est complétée par une information de contrôle de cohérence. 13. Procédé selon l'une quelconque des revendications 1 à 12, caractérisé en ce que ladite mémoire est embarquée dans un objet dépendant d'une source d'alimentation extérieure.