Brevet FR2965079A1 — publié le 20120323

La présente invention concerne un procédé de gestion d'une mémoire non volatile pour réaliser un stockage de données rémanent à une coupure d'alimentation. Il est connu pour réaliser un stockage rémanent d'utiliser une mémoire non 5 volatile. Si les données à stocker évoluent souvent ou beaucoup, une mémoire réinscriptible est avantageuse. Dans les mémoires réinscriptibles se trouvent des mémoires électriquement effaçables ou EEPROM (de l'anglais « Electrically Erasable Read Only Memory » signifiant : mémoire à lecture seule effaçable électriquement). Ces EEPROM 10 présentent une unité élémentaire d'écriture nommée page et une unité élémentaire d'effacement nommée secteur. Pour certaines EEPROM la taille d'une page est identique à la taille d'un secteur. La gestion d'une telle mémoire est alors simple. Il suffit d'effacer un secteur/page avant d'y réécrire. 15 Cependant pour certaines autres EEPROM, telles les Flash EEPROM, la taille d'un secteur est plus grande que la taille d'une page. II est alors nécessaire de gérer l'emploi de la mémoire sur la base d'un secteur. Selon un procédé, il est utilisé au moins deux secteurs. Un premier secteur est le secteur actif ou en cours d'utilisation. Tant qu'il n'est pas plein, une écriture de 20 données est réalisée dans ce secteur, sur de nouvelles pages encore vierges. Un second secteur n'est pas activement utilisé, mais reste prêt à devenir le secteur actif, dès que le premier secteur actuellement actif est plein. Lorsque le premier secteur est plein, les données devant être conservées (et qui représentent seulement une partie de l'ensemble des données stockées 25 jusqu'alors) sont recopiées depuis le premier secteur vers le second secteur, puis le second secteur devient le secteur actif, lors d'une opération dite de bascule. Le premier secteur ainsi libéré peut alors être effacé dans son ensemble, afin d'être vierge et disponible pour une bascule ultérieure, lorsque le second secteur sera plein à son tour. 30 Une telle utilisation en alternance permet de réaliser l'opération d'effacement. Cependant, une coupure d'alimentation est imprévisible et peut se produire à tout instant, y compris en cours d'effacement ou en cours de bascule et peut laisser l'un au moins des deux secteurs dans un état intermédiaire. Le problème se pose 35 alors, au redémarrage du système utilisant la mémoire, d'identifier quel est le secteur actif, afin de récupérer les données dernières stockées. Actuellement cette opération nécessite une lecture approfondie pouvant aller jusqu'à la lecture complète des deux secteurs et une comparaison de leur contenu respectif afin de déterminer le secteur valide. Ceci peut être long. L'objet de l'invention est principalement de gagner du temps en développant des moyens permettant de rapidement déterminer quel secteur est valide. De plus l'invention permet avantageusement de sécuriser les phases d'effacement et de bascule, ainsi que les données sauvegardées. Compte tenu de ce qui précède, l'invention concerne un procédé de gestion de mémoire non volatile, utilisant au moins deux zones de mémoire non volatile du type électriquement effaçable par secteur, inscriptible par page, un secteur étant plus grand qu'une page, où au moins un bloc de gestion indique laquelle desdites zone de mémoire est active. Selon une autre caractéristique de l'invention, une zone de mémoire 15 comprend au moins un secteur. Selon une autre caractéristique de l'invention, un bloc de gestion est associé .à chaque zone de mémoire et est situé dans ladite zone de mémoire. Selon une autre caractéristique de l'invention, le bloc de gestion est situé au début de ladite zone de mémoire. 20 Selon une autre caractéristique de l'invention, le bloc de gestion comprend au moins une page par état de ladite zone de mémoire. Selon une autre caractéristique de l'invention, les états comprennent au moins : - FIN_EFFACEMENT : est un état de fin d'effacement, indiquant que la zone de 25 mémoire marquée est complètement effacée et disponible pour une nouvelle utilisation en écriture, - DEB_EFFACEMENT : est un état de début d'effacement, indiquant que l'effacement de l'autre zone de mémoire a débuté, - DEB_BASCULE : est un état de début de bascule, indiquant qu'une bascule de 30 la zone de mémoire active vers l'autre zone de mémoire a débuté, - FIN_BASCULE : est un état de fin de bascule, indiquant qu'une bascule de la zone de mémoire active vers l'autre zone de mémoire est terminée et que l'autre zone de mémoire est maintenant active. Selon une autre caractéristique de l'invention, l'effacement d'une zone de 35 mémoire non active est déclenché immédiatement après une bascule vers l'autre zone de mémoire. Selon une autre caractéristique de l'invention, l'effacement d'une zone de mémoire non active est déclenché lorsque la zone de mémoire active atteint ou dépasse une limite de remplissage. D'autres caractéristiques, détails et avantages de l'invention ressortiront plus 5 clairement de la description détaillée donnée ci-après à titre indicatif en relation avec des dessins sur lesquels : - la figure 1, illustre le principe de l'invention et un premier mode de réalisation, - la figure 2, illustre un autre mode de réalisation de l'invention, 10 - la figure 3, illustre un autre mode de réalisation de l'invention, la figure 4 figure un diagramme des états possibles. En se référant à la figure 1 va être décrit le principe de l'invention. Il est utilisé de la mémoire non volatile. Ainsi, lorsqu'une coupure d'alimentation se produit les données précédemment écrites en mémoire sont sauvegardées et 15 peuvent être récupérées lors d'une remise sous tension du système. L'invention s'applique à une mémoire non volatile réinscriptible. Par définition, un enregistrement désigne une unité élémentaire (ou plus petit élément) de lecture, une page désigne une unité élémentaire d'écriture et un secteur désigne une unité élémentaire d'effacement. 20 Il existe différents types de mémoire non volatile réinscriptible qui se distinguent par les tailles relatives respectives d'un enregistrement, d'une page et d'un secteur. Lorsque la taille d'un secteur est identique à la taille d'une page, la gestion de la mémoire est simple. Il suffit d'effacer un secteur/page qui n'est plus utilisé, 25 avant d'y écrire/réécrire. II est possible de n'utiliser qu'une unique zone de mémoire. Cette dernière contient nécessairement les données dernières enregistrées lors d'une coupure d'alimentation. Lorsque la taille d'un secteur est plus grande que la taille d'une page, la gestion de la mémoire se complique. Il devient préférable de gérer l'écriture et 30 l'effacement séparément. L'invention s'applique particulièrement à ce second cas. Dans la pratique le premier cas (taille page = taille secteur) correspond à de la mémoire EEPROM se présentant sous forme d'un boitier indépendant. Au contraire le second cas (taille page Cependant une analyse du précédent mode de réalisation montre qu'il peut apparaitre, au moins temporairement, une indétermination. En effet entre l'instant de la bascule, où la nouvelle zone de mémoire active reçoit son identificateur 16, et l'instant de fin d'effacement effectif de l'ancienne zone de mémoire active, où est effacé son identificateur, les deux champs 13, 13' du bloc de gestion comportent ledit identificateur 16. Même si ce temps peut être très réduit dans la pratique, il n'est alors pas possible de déterminer la zone de mémoire active, à la seule lecture du bloc de gestion 13, 13'. Il peut être remédié à cet inconvénient en détaillant les informations stockées 10 dans le bloc de gestion 13, par exemple selon le mode de réalisation qui va être décrit maintenant, en référence aux figures 3 et 4. Comme illustré à la figure 3, le statut de la première zone de mémoire 21, ou de la deuxième zone de mémoire 22 est renseigné au moyen de quatre états. Ces quatre états sont FIN_EFFACEMENT, DEB_EFFACEMENT, DEB_BASCULE et 15 FIN_BASCULE. A chacun de ces quatre états est associé un indicateur 27-30 séparé dans le bloc de gestion 23 associé à la première zone de mémoire 21, respectivement un indicateur 27'-30' séparé dans le bloc de gestion 23' associé à la deuxième zone de mémoire 22. Chaque indicateur peut accueillir un identificateur 26 ici figuré par une étoile. 20 Puisque chaque indicateur 27-30, 27'-30' doit pouvoir être écrit séparément, il convient qu'il comporte au moins une page. Les quatre indicateurs associés à une même zone mémoire 21, 22 sont séparément marqués dudit identificateur 26. Ceci permet de détailler pour chaque zone mémoire 21, 22 cinq statuts différents, sans réaliser d'effacement. 25 FIN_EFFACEMENT désigne un état de fin d'effacement. Une zone de mémoire 21, 22 est marquée d'un identificateur 26 dans son indicateur 27, 27' correspondant à l'état FIN_EFFACEMENT après son effacement. Ce marquage est effectué pour une zone de mémoire à la fin de son effacement, typiquement lorsque ladite zone est en soutien. Ce marquage indique que l'effacement est complet. La 30 zone de mémoire est alors vierge et disponible pour devenir la nouvelle zone de mémoire active lors d'une prochaine bascule. On note que l'effacement efface aussi les éventuels identificateurs 26 préalablement écrits dans les indicateurs 27-30, 27'-30' du bloc de gestion 23, 23'. DEB_EFFACEMENT désigne un état de début d'effacement. Une zone de 35 mémoire 21, 22 est marquée d'un identificateur 26 dans son indicateur 28, 28' correspondant à l'état DEB_EFFACEMENT lorsque débute l'effacement de l'autre zone de mémoire. En effet, il est inutile de marquer un état dans une zone de mémoire 21, 22 qui va, immédiatement après, être totalement effacée._ . Ce marquage est effectué dans une zone de mémoire 21, 22 lorsque elle est active, mais concerne typiquement un changement relatif à l'autre zone de mémoire 21, 22. Ce marquage indique que l'effacement de l'autre zone a débuté. DEB_BASCULE désigne un état de début de bascule. Une zone de mémoire 21, 22 est marquée d'un identificateur 26 dans son indicateur 29, 29' correspondant à l'état DEB_BASCULE, lorsque débute une bascule depuis la zone de mémoire active 21, 22 vers la zone de mémoire de soutien 21, 22. Ce marquage est typiquement effectué dans une zone de mémoire 21, 22 lorsque elle est encore active, c'est-à-dire dans la zone de mémoire active qui va perdre l'activité au cours de ladite bascule. Une autre convention pourrait être utilisée en marquant la zone de mémoire en soutien, qui va gagner l'activité au cours de ladite bascule. FIN_BASCULE désigne un état de fin de bascule. Une zone de mémoire 21, 22 est marquée d'un identificateur 26 dans son indicateur 30, 30' correspondant à l'état FIN_BASCULE, lorsque une bascule depuis la zone de mémoire active 21, 22 vers la zone de mémoire de soutien 21, 22 est terminée. Ce marquage est typiquement effectué dans une zone de mémoire 21, 22 lorsque elle n'est plus active, c'est-à-dire dans l'ancienne zone de mémoire active. Une autre convention pourrait être utilisée. L'effacement de la zone de mémoire 21, 22 non active peut être déclenchée selon au moins deux modes de réalisation. Selon un premier mode l'effacement est débuté immédiatement après une bascule vers l'autre zone de mémoire 1, 2, 11, 12, 21, 22 dès que la zone de mémoire à effacer n'est plus active. Ce mode présente l'avantage de réduire au minimum la durée d'indétermination précédemment évoquée. Il permet encore de disposer d'une zone de mémoire en soutien disponible pour une bascule le plus vite possible. Selon un deuxième mode l'effacement d'une zone de mémoire non active 1, 2, 11, 12, 21, 22 est débuté lorsque le besoin d'effectuer une bascule se fait sentir, du fait du remplissage de la zone de mémoire active 1, 2, 11, 12, 21, 22. Ainsi une limite de remplissage 5, 15, 25 peut être utilisée pour la zone de mémoire active. Lorsque le taux de remplissage de la zone de mémoire active atteint ou dépasse ladite limite de remplissage 5, 15, 25, l'effacement est initié. Cette limite de remplissage 5, 15, 25 est avantageusement déterminée, en fonction d'un taux prévisionnel de remplissage de la zone de mémoire active 1, 2, 11, 12, 21, 22, afin de laisser un temps suffisant pour la réalisation de l'effacement de l'autre zone de mémoire 1, 2, 11,12, 21 22, avant que la zone de mémoire active ne risque_de se trouver pleine. Dans les deux modes de réalisation de l'effacement, le début d'effacement 5 peut être repéré par l'état DEB_EFFACEMENT. En référence à la figure 4, afin de préciser l'utilisation des blocs de gestion 23, 23', va maintenant être détaillée le cycle de changement d'état de deux zones de mémoire 21, 22. A des fins de simplification, seuls sont représentés les blocs de 10 gestion 23, 23' des deux zones de mémoires 21, 22. La ligne A correspond à un premier état. Dans cet état, la première zone de mémoire 21 est active, comme indiqué par un encadrement plus fort de son bloc de gestion 23. Son indicateur 27 FIN_EFFACEMENT est marqué depuis la fin de son dernier effacement. La seconde zone de mémoire 22 est non active ou en soutien. 15 Du fait de son histoire récente, elle est remplie et ses indicateurs 27'-30' sont tous marqués ainsi qu'il sera expliqué plus loin. Afin d'être en mesure de réaliser une future bascule, il va être procédé à un effacement de la seconde zone de mémoire 22. Avant cet effacement l'indicateur 28 DEB_EFFACEMENT de la première 20 zone de mémoire 21 (active) est marqué conformément à la ligne B. L'effacement 40 de la deuxième zone de mémoire 22 est réalisé. L'effacement 40 affectant aussi le bloc de gestion 23' inclus dans la deuxième zone de mémoire 22, tous les indicateurs 27'-30' sont maintenant effacés conformément à la ligne C. 25 La deuxième zone de mémoire 22 étant maintenant effacée, son indicateur 27' FIN_EFFACEMENT est marqué comme figuré à la ligne D. Les écritures se poursuivent dans la première zone de mémoire 21 qui est toujours active. Lorsque celle-ci devient trop remplie pour accepter une nouvelle écriture, il convient de procéder à une bascule 41. Au préalable l'indicateur 29 30 DEB_BASCULE est marqué pour indiquer cette opération comme illustré à la ligne E. La bascule 41 est effectivement réalisée et a pour effet que la deuxième zone de mémoire 22 devient la nouvelle zone de mémoire active, comme le signale le cadre en trait fort entourant le bloc de gestion 23' à la ligne F. Après que la 35 bascule 41 soit terminée l'indicateur 30 FIN_BASCULE est marqué, toujours à la ligne F. Il convient de remarque que la ligne F est l'exacte symétrique de la ligne A en échangeant les deux zones de mémoire 21, 22. La ligne F correspond à l'instant suivant la bascule 41 qui rend la deuxième zone de mémoire 22 active. La ligne A correspond à l'instant suivant la bascule qui rend la première zone de mémoire 21 active. L'historique des lignes A-F explique la configuration du bloc de gestion 23 où tous les indicateurs 27-30 sont marqués. De manière analogue, à la ligne A, la configuration du bloc de gestion 23' est telle que tous les indicateurs 27'-30' sont marqués. Les lignes F-J reproduisent respectivement, en échangeant la première zone de mémoire 21 et la deuxième zone de mémoire 22, les lignes A-E. La première zone de mémoire 21 subit un effacement 42 entre les lignes G et H. Une bascule 43 inverse rend à nouveau la première zone de mémoire 21 active. La ligne A suivant la ligne J est totalement identique à la ligne A initiale. Le cycle de changement d'état se poursuit ainsi en boucle. II n'est pas représenté ici deux configurations particulières transitoires se produisant au premier démarrage du système, où les deux zones mémoires 21, 22, le bloc de gestion 23, 23' y compris, sont initialement vierges. Ces deux configurations remplacent respectivement les lignes A et B, mais avec un bloc 23' totalement vierge. En cas de coupure d'alimentation, les deux zones mémoires 21, 22 conservent les dernières écritures réalisées, y compris celles des identificateurs 26 marquant les différents indicateurs 27-30, 27'-30' contenues dans le bloc de gestion 23, 23'. Ainsi une lecture de ce bloc de gestion 23, 23' permet une détermination directe et totalement déterminée de la zone de mémoire active au moment de la coupure d'alimentation. Ainsi les configurations des lignes A-E indiquent que la première zone de mémoire 21 est active, tandis que les configurations des lignes F-J indiquent que la deuxième zone de mémoire 22 est active. Avantageusement, la connaissance de l'état des deux zones de mémoire 21, 22 est plus fine et permet, au redémarrage de vérifier, de poursuivre ou de recommencer une opération interrompue par ladite coupure d'alimentation. Ainsi, typiquement, la configuration des lignes B, C, G ou H indique qu'un effacement était en cours. Il peut être judicieux de le recommencer pour être sûr de sa complétude.35 REVENDICATIONS1. Procédé de gestion d'une mémoire non volatile, utilisant au moins deux zones de mémoire (1, 2, 11, 12, 21, 22) non volatile du type électriquement effaçable par secteur, inscriptible par page, un secteur étant plus grand qu'une page, caractérisé en ce qu'au moins un bloc de gestion (3, 13, 13', 23, 23') indique laquelle desdites zone de mémoire (1, 2, 11, 12, 21, 22) est active. 2. Procédé selon la revendication 1, où une zone mémoire (1, 2, 11, 12, 21, 22) comprend au moins un secteur. 3. Procédé selon la revendication 1 ou 2, où un bloc de gestion (13, 13', 23, 23') est associé à chaque zone de mémoire (11, 12, 21, 22) et est situé dans ladite zone de mémoire (11, 12, 21, 22). 4. Procédé selon la revendication 3, où le bloc de gestion (13, 13', 23, 23') est situé au début de ladite zone de mémoire (11, 12, 21, 22). 5. Procédé selon la revendication 3 ou 4, où le bloc de gestion (13, 13', 23, 23') comprend au moins une page par état de ladite zone de mémoire (11, 12, 21, 22). 6. Procédé selon la revendication 5, où les états comprennent au 20 moins : - FIN_EFFACEMENT : est un état de fin d'effacement, indiquant que la zone de mémoire (11, 12, 21, 22) marquée est complètement effacée et disponible pour une nouvelle utilisation en écriture, - DEB_EFFACEMENT : est un état de début d'effacement, indiquant que 25 l'effacement de l'autre zone de mémoire (11, 12, 21, 22) a débuté, - DEB_BASCULE : est un état de début de bascule, indiquant qu'une bascule de la zone de mémoire (11, 12, 21, 22) active vers l'autre zone de mémoire (11, 12, 21, 22) a débuté, - FIN_BASCULE : est un état de fin de bascule, indiquant qu'une bascule de la 30 zone de mémoire (11, 12, 21, 22) active vers l'autre zone de mémoire (11, 12, 21, 22) est terminée et que l'autre zone de mémoire (11, 12, 21, 22) est maintenant active. 7. Procédé selon l'une quelconque des revendications 1 à 6, où l'effacement d'une zone de mémoire (1, 2, 11, 12, 21, 22) non active est déclenché 35 immédiatement après une bascule vers l'autre zone de mémoire (1, 2, 11, 12, 21, 22). 8. Procédé selon l'une quelconque des revendications 1 à 6, où l'effacement d'une zonede mémoire (1, 2, 11, 12, 21, 22) non active est déclenché lorsque la zone de mémoire active (1, 2, 11, 12, 21, 22) atteint ou dépasse une limite de remplissage (5, 15, 25).5