FR 3051574 A1 20171124 FR 1654490 A 20160520 B15054 - 15-ZV2-0813 1 GESTION DU STOCKAGE DANS UNE MEMOIRE FLASH Domaine La présente description concerne de façon générale les circuits électroniques et, plus particulièrement, les circuits exploitant une mémoire flash. La présente description vise plus 5 particulièrement la gestion d'une mémoire flash. Exposé de l'art antérieur Les mémoires flash sont de plus en plus utilisées dans des microcontrôleurs pour stocker de façon non volatile des informations. 10 Le stockage de données dans une mémoire flash présente diverses contraintes temporelles liées à la granularité des opérations réalisées, l'écriture s'effectuant par mot (par exemple, par mot de quatre octets) tandis que l'effacement s'effectue par page de plusieurs mots (quelques dizaines à 15 quelques centaines de mots). Dans certaines applications, on souhaite s'assurer que les transactions réalisées et stockées respectent un critère d'atomicité. L'atomicité d'une transaction correspond à s'assurer que des données stockées en mémoire présentent bien un état 20 exploitable et intègre. Cela revient à s'assurer que des données en mémoire non volatile présentent soit l'état avant la 3051574 B15054 - 15-ZV2-0813 2 transaction soit l'état après la transaction concernée mais qu'elles ne présentent pas un état intermédiaire. La gestion de l'atomicité des transactions est particulièrement utilisée dans des applications où une 5 interruption de l'alimentation du circuit ou l'apparition d'une perturbation accidentelle ou volontaire peut engendrer le stockage de données dans un état les rendant soit inexploitables par la suite soit vulnérables du point de vue de la confidentialité ou de leur intégrité. Par exemple, dans le domaine des cartes à 10 microcircuit, on souhaite s'assurer qu'en cas d'arrachement (tearing) volontaire ou accidentel d'une carte du lecteur dans laquelle elle se trouve, les informations contenues dans une mémoire flash de la carte soient fiables. Dans un circuit intégrant un module de sécurité, l'équivalent de l'arrachement 15 correspond à une coupure de l'alimentation du circuit. Résumé Il existe un besoin d'améliorer la gestion du stockage d'informations dans une mémoire flash, en particulier pour préserver le caractère atomique de certaines transactions 20 impliquant une mise à jour de données dans la mémoire flash. Un mode de réalisation pallie tout ou partie des inconvénients des techniques connues de gestion d'une mémoire flash. Un mode de réalisation d'un premier aspect facilite la 25 gestion d'atomicité des transactions dans une mémoire flash. Un mode de réalisation d'un deuxième aspect équilibre l'effacement des pages d'une mémoire flash. Ainsi, un mode de réalisation du premier aspect prévoit un procédé de gestion d'une mémoire flash, dans lequel : 30 les données à stocker sont organisées en blocs logiques ; la mémoire est divisée en pages ; chaque page est divisée en trames, chaque trame pouvant contenir au moins un bloc de données et au moins deux mots de 35 métadonnées de trame ; 3051574 B15054 - 15-ZV2-0813 3 chaque page comporte au moins un mot de métadonnées de page qui contient, lorsqu'une page est écrite, une valeur d'un compteur de nombre de pages écrites ; une écriture d'un bloc logique dans la mémoire 5 s'accompagne d'une programmation d'un premier mot de métadonnées de trame avec un identifiant de ce bloc logique ; et la page dans laquelle procéder à l'écriture est choisie comme étant celle dont le premier mot de métadonnées contient la valeur maximum du compteur de pages écrites parmi toutes les 10 pages. Selon un mode de réalisation, les trames sont écrites séquentiellement dans une page. Selon un mode de réalisation, le premier mot de métadonnées de trame contient également une valeur représentative 15 d'un code de contrôle d'erreur calculé au moins à partir du bloc de données de la trame. Selon un mode de réalisation, lors de l'écriture d'une trame, un deuxième mot de métadonnées de trame est écrit en premier avec une valeur, indépendante du contenu de la donnée à écrire et 20 qui est toujours la même pour une trame donnée. Selon un mode de réalisation, ledit deuxième mot de métadonnées a une valeur fixe pour toutes les trames de la mémoire. Selon un mode de réalisation, ledit premier mot de métadonnées de page est écrit avant écriture d'une première trame 25 dans la page. Selon un mode de réalisation, une lecture d'un bloc de données logique comporte les étapes de : rechercher la dernière trame écrite dont l'identifiant de bloc correspond à celui du bloc logique ; 30 vérifier que l'écriture des données dans cette dernière trame respecte un code de contrôle d'erreur et, si ce n'est pas le cas, rechercher la précédente trame écrite dont l'identifiant de bloc correspond à celui du bloc de données logique jusqu'à avoir parcouru toutes les pages. 3051574 B15054 - 15-ZV2-0813 4 Selon un mode de réalisation, un circuit de gestion de la mémoire effectue, à chaque démarrage, une vérification d'atomicité de la dernière trame écrite. Selon un mode de réalisation, en cas de défaut 5 d'atomicité, toutes les trames valides de la page courante sont transférées dans une page disponible et la page courante est effacée. Selon un mode de réalisation, ladite page disponible est une page dédiée. 10 Un mode de réalisation de ce premier aspect prévoit également une mémoire flash, programmée conformément au procédé ci-dessus. Un mode de réalisation de ce premier aspect prévoit également un circuit électronique comportant une mémoire flash. 15 Un mode de réalisation du deuxième aspect prévoit un procédé de gestion d'une mémoire flash, dans lequel : la mémoire est organisée en pages ; et chaque page contient un mot de métadonnées destiné à stoker un nombre d'effacements de la page. 20 Selon un mode de réalisation, la sélection d'une page à effacer pour libérer de l'espace s'effectue en fonction du nombre d'effacements subis par les différentes pages afin d'uniformiser le nombre d'effacement subis par chaque page. Selon un mode de réalisation : 25 les données à stocker sont organisées en blocs logiques ; la mémoire est divisée en pages ; chaque page est divisée en trames, chaque trame pouvant contenir au moins un bloc de données et au moins deux mots de 30 métadonnées de trame ; chaque page comporte au moins un mot de métadonnées de page qui contient, lorsqu'une page est écrite, une valeur d'un compteur de nombre de pages écrites ; 3051574 B15054 - 15-ZV2-0813 la mémoire métadonnées une écriture d'un bloc logique dans s'accompagne d'une programmation d'un premier mot de de trame avec un identifiant de ce bloc logique ; et la page dans laquelle procéder à l'écriture 5 comme étant celle dont le premier mot de métadonnées valeur maximum du compteur de pages écrites parmi pages. est choisie contient la toutes les Un mode de réalisation de ce deuxième aspect prévoit également une mémoire flash, programmée conformément au procédé ci-dessus. Un mode de réalisation de ce deuxième aspect prévoit également un circuit électronique comportant une mémoire flash telle que ci-dessus. Brève description des dessins Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 représente, de façon très schématique et 20 sous forme de blocs, un mode de réalisation d'un circuit électronique du type auquel d'appliquent, à titre d'exemple, les modes de réalisation qui vont être décrits ; la figure 2 illustre un mode de réalisation d'une organisation logique de données à stocker dans une mémoire flash ; 25 la figure 3 illustre un mode de réalisation d'une organisation physique de données dans une mémoire flash ; la figure 4 illustre, de façon très schématique, un mode de réalisation d'une structure de trame de la mémoire de la figure 3 ; 30 la figure 5 est un schéma-blocs illustrant un mode de réalisation d'une écriture d'une donnée dans la mémoire ; la figure 6 est un schéma-blocs illustrant un mode de réalisation d'une préparation d'une page suivante pour écriture quand une page courante est pleine ; 3051574 B15054 - 15-ZV2-0813 6 la figure 7 est un schéma-blocs illustrant un mode de réalisation d'une lecture d'une donnée dans la mémoire ; la figure 8 est un schéma-blocs illustrant un mode de réalisation d'une récupération d'atomicité au niveau d'une page ; 5 et la figure 9 est un schéma-blocs illustrant un mode de réalisation d'une sélection d'une page à effacer selon le deuxième aspect. Description détaillée 10 De mêmes éléments ont été désignés par de mêmes références aux différentes figures. Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de réalisation qui vont être décrits ont été représentés et seront détaillés. En particulier, le 15 fonctionnement électrique d'une mémoire flash lors des étapes d'écriture, de lecture et d'effacement n'a pas été détaillé, les modes de réalisation décrits étant compatibles avec les technologies usuelles des mémoires flash. De plus, les applications utilisant une gestion d'atomicité n'ont pas non plus été détaillées, les modes de réalisation décrits étant, là encore, compatibles avec les applications usuelles. La figure 1 représente, de façon très schématique et sous forme de blocs, un mode de réalisation d'un circuit électronique 1 du type auquel d'appliquent, à titre d'exemple, 25 les modes de réalisation qui vont être décrits. Le circuit 1 comporte : une unité de traitement 11 (PU), par exemple une machine d'états, un microprocesseur, un circuit logique programmable, etc. ; 30 une ou plusieurs zones 12 (RAM) de stockage volatil, par exemple de type mémoire RAM ou registres, pour stocker temporairement des informations (instructions, adresses, données) pendant les traitements ; une ou plusieurs zones de stockage non volatil, dont au 35 moins une mémoire 2 de type flash (FLASH) pour stocker des 3051574 B15054 - 15-ZV2-0813 7 informations de façon durable et en particulier quand le circuit n'est pas alimenté ; un ou plusieurs bus 14 de données, d'adresses et/ou de commandes entre les différents éléments internes au circuit 1 ; 5 et une interface d'entrée-sortie 15 (I/O) de communication, par exemple de type bus série, avec l'extérieur du circuit 1. Le cas échéant, le circuit 1 intègre également un circuit 16 de communication sans contact (CLF - ContactLess Front-10 end), de type communication en champ proche (Near Field Communication - NFC). Par ailleurs, le circuit 1 peut intégrer d'autres fonctions, symbolisées par un bloc 17 (FCT), selon l'application, par exemple, un crypto-processeur, d'autres interfaces, d'autres 15 mémoires, etc. La gestion de l'atomicité des transactions dans un circuit équipé d'une mémoire flash est particulière car la mémoire flash de présente pas la même granularité de traitement selon le type d'opération. En particulier, l'écriture s'effectue par mot 20 (d'un octet ou de quelques octets) tandis que l'effacement s'effectue par page. La taille d'un mot correspond généralement à la taille d'un registre recevant les données en série pour les transférer en parallèle au plan mémoire pour écriture. Une page est définie comme la taille minimale susceptible d'être adressée simultanément pour effacement. Typiquement, une page représente, dans une mémoire flash, 64, 128, 256, 512 ou 1024 octets. Une mémoire flash se programme, à partir d'un état initial, désigné arbitrairement 1, vers des états 0 (états non conducteurs des cellules). Cela signifie que les cellules de la 30 mémoire doivent être initialisées à un état haut (effacement) et que, pour stocker une donnée (écriture), on intervient (programmation à 0) ou pas (état du bit à 1) sur les états des bits par mot de données. Afin de garantir l'atomicité des transactions, le 35 stockage en mémoire flash d'une donnée ne doit être considéré 3051574 B15054 - 15-ZV2-0813 8 comme valide qu'une fois que la transaction est terminée et que les données sont dites stables. En pratique, les procédés de gestion d'atomicité activent un indicateur de traitement d'une donnée lorsque celle-ci est extraite de la mémoire non volatile, 5 puis organisent le stockage de la donnée mise à jour, une fois le traitement terminé, l'indicateur de traitement changeant alors d'état. L'atomicité peut concerner une quantité plus ou moins importante de données selon la nature de la transaction. Le caractère atomique des transactions est particu- 10 lièrement important dans le cas de transactions de type bancaire (paiement par exemple) où il est nécessaire de s'assurer que l'information stockée dans la mémoire flash, par exemple le solde d'un porte-monnaie électronique ou d'une autorisation d'achat, ou l'identifiant validant une transaction, est stocké de façon 15 fiable. Généralement pour garantir l'atomicité d'une transaction, on utilise des espaces de stockage temporaire (Buffer) d'atomicité qui sont mis à jour avec les informations initiales, puis finales, pour transfert dans la mémoire non 20 volatile principale. Toutefois, dans le cas d'une mémoire flash, une difficulté réside dans la procédure d'effacement en raison de sa granularité par page qui est relativement longue par rapport à l'opération d'écriture par mot. En particulier, il existe un 25 besoin d'indiquer qu'une page effacée est stable, c'est-à-dire qu'elle a pu être effacée intégralement. Autrement, on introduit une faiblesse dans la sécurité des données. Par ailleurs, en cas de besoin d'effacement d'une page avec transfert de données dans une nouvelle page, ce transfert peut rendre instable des données stables présentes dans la page à effacer. Cela se produit plus particulièrement avec des pages de grande taille (par exemple de l'ordre d'une centaine de mots voire plus) car elles sont plus susceptibles de contenir des données anciennes considérées comme stables et qu'il faut transférer dans une nouvelle page. 3051574 B15054 - 15-ZV2-0813 9 Dans les applications sans contact, les transactions doivent être effectuées très rapidement en raison du caractère fugace de la communication qui est lié à la durée pendant laquelle le circuit 1 peut communiquer avec un terminal. Or, la gestion de 5 l'atomicité des transactions en utilisant des tampons en mémoire flash prend du temps, en raison des opérations d'effacement qui sont nécessaires pour autoriser une programmation. Selon les modes de réalisation qui vont être décrits, on prévoit d'organiser de façon particulière le stockage des 10 données dans la mémoire. La figure 2 illustre un mode de réalisation d'une organisation logique de données à stocker dans une mémoire flash. En d'autres termes, cette figure illustre la façon dont sont gérées les données par l'unité de traitement 11 et les différentes 15 entités du circuit 1 de la figure 1 pour stockage dans la mémoire flash. On fait référence par la suite à un circuit de gestion de la mémoire chargé d'organiser son adressage, l'écriture, la lecture et l'effacement ainsi que la conversion d'adresses logiques en adresses physiques. Ce circuit ou unité de gestion, 20 est un circuit programmé selon la mise en oeuvre du procédé décrit et est le cas échéant l'unité de traitement. Selon ce mode de réalisation, l'ensemble des données représentant la capacité de stockage de la mémoire flash est vu comme un seul réseau 2V de données en blocs Bl, B2, etc. et chaque 25 bloc Bi contient un même nombre de mots W. Dans l'exemple représenté en figure 2, on suppose que chaque bloc de donnée Bi contient quatre mots Wl, W2, W3 et W4. La taille d'un mot correspond à la granularité d'écriture dans la mémoire flash, soit en pratique de un à quelques octets (par exemple quatre). 30 Toutefois, il s'agit d'un exemple arbitraire et tout autre nombre d'un ou plusieurs octets peut constituer un mot et tout autre nombre d'un ou plusieurs mots peut constituer un bloc. Ainsi, le découpage logique de la mémoire flash n'est pas effectué par page mais par bloc B dont la taille est indépendante de la taille des pages. 3051574 B15054 - 15-ZV2-0813 10 Une donnée A à stocker dans la mémoire 2 comporte un nombre d'octets arbitraire, indépendant de la taille d'un bloc. D'un point de vue logique, c'est-à-dire pour l'unité de traitement 11, une donnée est définie par une longueur L(A), c'est-à-dire un 5 nombre d'octets et sa position dans le réseau 2V de blocs Bi par un offset 0(A), c'est-à-dire un décalage par rapport au début du réseau 2V. La figure 3 illustre un mode de réalisation d'une organisation physique de données dans une mémoire flash. 10 La transition entre l'organisation logique (figure 2) et l'organisation physique du stockage des données est transparente pour l'unité de traitement 11 et les autres circuits accédant à la mémoire. L'unité de gestion de la mémoire 2 convertit des adresses virtuelles fournies par les différentes entités en 15 des adresses physiques. Par ailleurs, pour gérer l'atomicité, l'unité de gestion génère des métadonnées qui sont stockées également dans la mémoire 2. Afin de respecter la contrainte d'effacement, la mémoire est physiquement organisée en pages P, représentant la granularité 20 d'effacement. La mémoire est donc divisée en r pages P de tailles identiques. Chaque page comporte un même nombre de mots, constituant la granularité d'écriture (et de lecture). Les pages sont, de préférence, divisées en deux catégories. Une première catégorie comporte des pages Pl divisées 25 en n trames Fj comportant chacune plusieurs mots de données (ensemble DBj) et un même nombre de mots EMDj de métadonnées de trame (de un à quelques-uns, par exemple deux). Par exemple, toutes les trames comportent un même nombre de mots de données. Chaque page Pl comporte en outre un nombre m (quelques-uns à 30 quelques dizaines) de mots de métadonnées de page PMD1(k) indépendant des trames. Le nombre de mots de données de chaque trame correspond, de préférence, à un multiple entier (au moins 1) du nombre de mots de données de chaque bloc DB de l'organisation virtuelle de la mémoire. Ainsi, une trame Fj contient un bloc de 35 donnée DBj et des métadonnées de trame EMDj. En figure 3, on a 3051574 B15054 - 15-ZV2-0813 11 illustré, pour chaque trame, le bloc DBj suivi des métadonnées FMDj. Toutefois, de préférence et comme on le verra par la suite, une partie des métadonnées est écrite au début de la trame Fj. Une deuxième catégorie de pages, en nombre nettement 5 plus réduit que le nombre de pages Pl de la première catégorie, ne contient que des mots de métadonnées de mémoire MMDh. De préférence, la deuxième catégorie ne comporte qu'une page Pr et la première catégorie comporte donc r-1 pages Pl. En variante, on ne prévoit que des pages de la première 10 catégorie. Selon un mode de réalisation particulier, une page contient 1024 octets. On prévoit, r-1 pages Pl de la première catégorie contenant chacune 25 trames de 10 mots chacune et 6 mots de métadonnées PMD1 de page. Chaque trame Fj contient un bloc DBj, 15 de huit mots W de données, et deux mots de métadonnées de trame FMDj. Selon ce mode de réalisation particulier, chaque trame peut donc contenir deux blocs logiques Bi. Par ailleurs, on prévoit une seule page Pr de mots MMDh de métadonnées de mémoire. Il s'agit d'un exemple particulier et d'autres granu- 20 larités peuvent être prévues pourvu que tous les mots aient la même taille, représentant la granularité d'écriture dans la mémoire. En particulier, on peut prévoir des blocs logiques Bi de taille (nombre de mots) variable qui sont alors susceptibles d'être répartis dans plusieurs blocs DBj dans plusieurs trames. 25 Les métadonnées de trame FMDj contiennent au moins un mot FCONST (de préférence un seul mot FMDj(1)) de valeur fixe, identique quelle que soit la valeur des données contenues dans le bloc DBj et au moins un mot (de préférence un seul mot FMDj(2)) contenant le ou les numéros (identifiant(s) i) du ou des blocs 30 virtuels Bi écrits dans le bloc réel DBj. Le mot FMDj(2) contient également un indicateur FW d'état (fin d'écriture) du bloc DBj et un code de contrôle d'erreur de type CRC, signature ou autre. Les métadonnées de trames servent à l'atomicité de trame, c'est-à-dire indiquent si le bloc DBj contenu dans la trame est stable ou 35 non. 3051574 B15054 - 15-ZV2-0813 12 La figure 4 illustre, de façon très schématique, un mode de réalisation d'une structure 4 de trame Fj en supposant deux mots de métadonnées FMDj. Selon ce mode de réalisation, on écrit en premier le mot 5 de métadonnées EMDj(1) de valeur fixe FCONST, puis les mots de la donnée A et enfin le mot de métadonnées EMDj(2). Le code CRC contenu dans le mot EMDj(2) est, de préférence, un CRC du mot EMDj(1) et du bloc DBj. Grâce à l'utilisation d'une valeur fixe pour le mot FMDj(1), on sera en mesure de s'assurer qu'il n'y a 10 pas eu d'arrachement ou d'attaque au début de l'écriture de la trame, par exemple une tentative de modification du contenu du bloc DBj lors d'une attaque. La valeur est fixe, c'est-à-dire est la même pour une trame donnée, mais peut varier d'une trame à une autre. De préférence, par facilité, la valeur est la même pour 15 toutes les trames de la mémoire. Selon le premier aspect, les métadonnées de page PMD1 contiennent un mot PMD1(1) indicateur que la page a commencé à être écrite et qu'elle n'est plus vierge, de préférence mais optionnellement un mot PMD1(2) indicateur que la page est pleine, 20 un mot PMD1(3) indicateur que la page suivante est effacée (donc vierge), un mot PMD1(4) indicateur du fait que la page est obsolète, c'est-à-dire qu'aucune des trames ne contient un bloc encore utile (en d'autres termes, que tous les blocs de cette page ont déjà été modifiés dans d'autres pages ultérieurement) et un 25 mot PMD1(5) contenant un numéro d'ordre de la page, c'est-à-dire la valeur d'un compteur PWN de nombre de pages écrites. Les métadonnées de page selon ce premier aspect servent à indiquer le basculement d'une page à une autre et à permettre une récupération d'atomicité au démarrage ou réinitialisation du circuit. Les mots 30 ne sont pas nécessairement physiquement dans cet ordre dans la page. Selon le deuxième aspect de la description, les métadonnées de page contiennent en outre, ou à la place du mot PMD1(3) indicateur que la page a été effacée, un mot PMD(6) 35 indicateur du nombre d'effacements qu'a subie la page. 3051574 B15054 - 15-ZV2-0813 13 Le seul lien entre les tailles logiques et l'organisation physique de la mémoire est que tous les mots ont la même taille. On rappelle que, lorsqu'un mot est vierge (effacé), tous ses bits sont dans un premier état (désigné haut ou 1). La 5 programmation d'un mot pour y stocker une valeur consiste à sélectionner les bits des octets du mot qui doivent changer d'état et être écrits (basculer vers l'état bas ou 0). La programmation d'un drapeau ou indicateur consiste à programmer le bit ou les bits de l'octet à l'état correspondant à l'état bas. On rappelle 10 également qu'une fois écrit ou programmé à l'état 0, le contenu du mot ne peut pas être modifié sauf à effacer la page entière et à la reprogrammer. L'écriture des données dans la mémoire s'effectue bloc par bloc au fur et à mesure qu'ils sont reçus et successivement 15 dans chaque page. Ainsi, en cas d'écritures successives d'un même bloc logique (par exemple, la valeur d'un compteur), ce même bloc de données Bi peut se retrouver écrit plusieurs fois dans la mémoire avec différentes valeurs au fur et à mesure des écritures. Cela participe à la résolution du problème d'atomicité dans la 20 mesure où, à partir du moment où une donnée A aura été écrite une fois avec une première valeur, on pourra toujours, lors des écritures ultérieures, revenir à la valeur précédente représentant l'état stable en cas de problème d'écriture de la valeur courante. Par contre, coté mémoire logique 2V, une même donnée A 25 est toujours "stockée" dans le même bloc Bi (ou les mêmes blocs). Ainsi, l'identifiant i (l'adresse) du bloc Bi dans la mémoire logique permet de retrouver le ou les blocs physique DBj de la mémoire 2 contenant la donnée A (contenant les valeurs successives de la donnée A). 30 Pour simplifier, on expose par la suite le fonctionnement en supposant arbitrairement que la donnée A que l'on considère occupe un et un seul bloc Bi et que les blocs DBj ont la taille d'un bloc Bi. Toutefois, tout ce qui est décrit s'applique plus généralement au cas pratique où une donnée A. peut 3051574 B15054 - 15-ZV2-0813 14 occuper plusieurs blocs ou une partie de bloc et à des tailles différentes des blocs Bi et DBj. La figure 5 est un schéma-blocs illustrant un mode de réalisation d'une écriture d'une donnée A dans la mémoire 2. 5 A partir de la longueur L(A) et de l'offset 0(A) de la donnée A dans le réseau virtuel 2V (figure 2), le circuit de gestion de la mémoire détermine (bloc 51, i = f(L(A), 0(A))) l'identifiant i du bloc DBi contenant cette donnée. Puis, on sélectionne (bloc 52, SELECT l(MAX(PWN))) la 10 page Pl ayant le nombre de pages écrites PWN le plus élevé en parcourant (en lisant) les mots correspondants PMD1(5) des métadonnées de page. Puis, on identifie (bloc 53, SELECT j), la première trame Fj disponible séquentiellement dans la page P1. Cette 15 sélection s'effectue, par exemple, en parcourant les trames successivement jusqu'à la première dont le mot EMDj(1) destiné à la valeur fixe FCONST n'est pas programmé. En variante, on lit le deuxième mot EMDj(2) de métadonnées et on sélectionne la première trame dont l'indicateur FW de fin d'écriture FMDj est à l'état 1 20 ou dont l'identifiant de bloc i n'est pas programmé. On suppose dans cet exemple qu'une nouvelle page est ouverte à la fin de l'écriture de la dernière trame d'une page. Par conséquent on trouve forcément une trame disponible à l'étape 53. En variante, si aucune trame n'est libre, cela signifie 25 que la page est pleine. On exécute alors une sous-routine d'ouverture d'une nouvelle page. Cette sous-routine sera exposée plus loin en relation avec la figure 6. Une fois que la trame Fj est sélectionnée, on commence par écrire (bloc 54, FCONST -> EMDj(1)), dans la trame Fj, le 30 premier mot EMDj(1) de métadonnées fixe (il s'agit en fait du premier mot écrit logiquement. Physiquement, les mots peuvent être dans un ordre différent dans la trame). On écrit ensuite (bloc 55, A -> DBj) la donnée A dans le bloc DBj, puis on écrit (bloc 56, (i, FW, CRC) -> EMDj(2)) le deuxième mot EMDj(2) de 35 métadonnées avec l'identifiant i, l'indicateur FW de fin 3051574 B15054 - 15-ZV2-0813 15 d'écriture et le CRC des premiers mots (EMDj(1) et DBj) de la trame. On vérifie alors si la page est pleine, c'est-à-dire s'il existe une trame Fj disponible pour la prochaine écriture 5 (bloc 57, EXIST NEXT j ?). Dans l'affirmative (sortie Y du bloc 57), l'écriture est terminée (bloc 58, END). Dans le cas où une donnée A peut représenter plusieurs blocs DBi, on revient à l'étape 53 pour écrire dans la trame suivante. Dans un cas plus général ou les trames sont de taille variable et où l'espace 10 disponible en fin de page n'est pas suffisant pour stocker la trame qui suit, soit on laisse un espace vide, soit on coupe la trame en deux et on stocke une partie sur la page courante et une partie dans la page suivante. Dans la négative (sortie N du bloc 57), c'est-à-dire 15 s'il n'y a plus de trame disponible, on prépare une page suivante pour la prochaine écriture (bloc 6, NEXT 1). Pour simplifier, on considère le cas où l'on prépare la page suivante (index 1 incrémenté d'une unité) mais on peut plus généralement prévoir de lier plusieurs pages ensemble afin d'accélérer la vitesse 20 d'écriture de plusieurs blocs sans effacement intermédiaire. Dans ce cas, on prévoit de sauter une ou plusieurs pages quand une page est pleine. La figure 6 est un schéma-blocs illustrant un mode de réalisation d'une préparation d'une page suivante pour écriture 25 quand une page courante est pleine. On commence (bloc 61, 1 -> PMD1(2)) par fermer la page courante, c'est-à-dire par programmer son mot de métadonnées PMD1(2) de fin de page ou de page pleine. Puis (bloc 62, SELECT NEXT 1), on sélectionne la prochaine page P1 disponible, c'est-à- 30 dire obsolète. La valeur du nombre de pages écrites, incrémentée de 1, est alors programmée (bloc 63, PWN+1 -> PMD1(5)) dans le mot correspondant PMD1(5) de métadonnées de page et on programme également (bloc 64, 1 -> PMD1(1)) l'indicateur d'ouverture de page. 3051574 B15054 - 15-ZV2-0813 16 Avec un tel processus d'écriture dans la mémoire 2, on est en mesure, en lecture, de retrouver la dernière transaction atomique pour chaque donnée. La figure 7 illustre, sous forme de schéma-blocs, un 5 mode de réalisation d'une lecture d'une donnée A dans la mémoire 2. A partir de la longueur L(A) et de l'offset 0(A) de la donnée A dans le réseau virtuel 2V, le circuit de gestion de la mémoire détermine (bloc 71, i = f(L(A), 0(A))) l'identifiant i du 10 bloc Bi contenant cette donnée. La lecture dans la mémoire s'effectue en parcourant les trames Fj à partir de la dernière trame écrite de la dernière page écrite en recherchant dans quel bloc DBj se trouve le bloc Bi, par son identifiant i. En pratique, on parcourt (bloc 72, SEARCH i in EMDj(2)), en remontant la mémoire 15 2 depuis la page possédant le nombre de pages écrites PWN le plus élevé dans son mot de métadonnées PMD1(5) et, par page, depuis la dernière trame écrite de la page. On s'arrête à la première occurrence de l'identifiant i dans un deuxième mot EMDj(2) de métadonnées de trame. 20 Une fois la trame trouvée, on vérifie alors (bloc 73, FW OK ?) l'indicateur d'état FW qui indique si l'écriture de la trame s'est terminée sans arrachement indiquant, en principe, si les données sont stables ou non. Si l'indicateur d'état n'est pas valide (sortie N du 25 bloc 73), on remonte alors les trames (bloc 72) jusqu'à celle contenant la version précédente du bloc de données DBj. Si l'indicateur d'état est valide (sortie Y du bloc 73), on vérifie (bloc 74, CRC OK ?) le code d'erreur en recalculant un CRC sur les données présentes dans le premier mot de métadonnées 30 EMDj(1) et dans le bloc de données (DB(j)). Si le code calculé est identique au code stocké (sortie Y du bloc 74), le bloc de données DBj est valide et la lecture fournit (bloc 75, RETURN A=DBj) la valeur du bloc DBj comme étant la donnée A, donc comme contenu du bloc virtuel Bi. 3051574 B15054 - 15-ZV2-0813 17 Si le code CRC n'est pas confirmé (sortie N du bloc 74), cela signifie que les données ne sont pas fiables. On remonte alors la mémoire (bloc 72) afin de trouver la précédente écriture de la donnée, ce qui revient à rechercher la dernière transaction 5 atomique. En variante, lorsque l'on identifie une trame dont le CRC est erroné (sortie N du bloc 74), on commence par écrire dans le deuxième mot de métadonnées EMDj(2), un indicateur que la trame est polluée. Cela gagne un peu de temps lors de la prochaine 10 lecture de la donnée A car cela évite de recalculer le CRC avant de remonter à l'occurrence précédente. La figure 8 est un schéma-blocs illustrant un mode de réalisation d'une récupération d'atomicité au niveau d'une page. En pratique, ce processus est effectué au démarrage ou 15 lors d'une réinitialisation du circuit, ce qui revient à vérifier l'atomicité après chaque arrachement ou extinction accidentelle ou volontaire. On commence par sélectionner (bloc 81, SELECT l(MAX(PWN))) la page ayant la valeur maximale du compteur de 20 nombre de pages écrites. Puis, on sélectionne (bloc 82, SELECT j) la dernière trame écrite dans cette page. On lit alors le deuxième mot de métadonnées EMDj(2) et on vérifie (bloc 83, FW OK ?) que l'indicateur d'écriture FW est correct (est programmé). Dans l'affirmative (sortie Y du bloc 83), il n'y pas de problème 25 d'atomicité et la coupure ou réinitialisation s'est effectuée alors que les processus d'écriture dans la mémoire flash étaient terminés. On passe alors au fonctionnement normal, c'est-à-dire que le processus de vérification d'atomicité est terminé (END). En variante, pour s'assurer qu'il n'y a pas eu d'arrachement en 30 fin d'écriture et pour garantir la stabilité du mot FMDj(2), on reprogramme la même valeur dans le mot EMDj(2). Dans la négative (sortie N du bloc 83), cela signifie un arrachement (coupure d'alimentation ou réinitialisation) pendant une écriture dans la mémoire flash. Selon un mode de 35 réalisation préféré, on utilise alors la page Pr pour transférer 3051574 B15054 - 15-ZV2-0813 18 (bloc 84, TRANSFERT DBj (P1) -> DBj'(Pr)) toutes les trames valides de la page P1 vers la page Pr. Puis, on efface la page P1 (bloc 85, ERASE Pl). Les différentes étapes de la copie, vers la page Pr et ensuite de la recopie depuis la page Pr, sont validées par 5 des mots de métadonnées dans la page Pr pour s'assurer, qu'en cas d'arrachement durant la procédure de récupération, on continue bien la procédure entamée et qu'on ne recommence pas au début de la procédure d'arrachement au risque de perdre définitivement les données encore valables dans la page P1. 10 Selon un mode de réalisation, la page Pr est une page dédiée de la mémoire. On effectue alors un transfert inverse (bloc 86, TRANSFERT DBj'(Pr) -> DBj(P1)) des données stockées temporairement dans la page Pr vers la page P1 effacée. Les métadonnées de page sont alors également réécrites. Enfin, on 15 efface la page Pr (bloc 87, ERASE Pr) pour qu'elle soit prête pour une prochaine utilisation. Selon un autre mode de réalisation, la page Pr est n'importe quelle page disponible. Dans ce cas, il n'est pas nécessaire de transférer les données vers la page P1 après 20 effacement. De préférence, le traitement de la figure 8 comporte également une étape de vérification de l'atomicité des métadonnées de page. Pour cela, on vérifie, lors d'un redémarrage et sur la dernière page écrite, un code correcteur d'erreur stocké dans un 25 des mots de métadonnées de page PMD1(k). De préférence, avant l'étape 84, on écrit les mots de métadonnées PMD1(2) de toutes les pages qui ont été écrites après la trame Fj sélectionnée au bloc 82, comme indiquant une page pleine. Ainsi, ces pages ne peuvent pas être utilisées sans être 30 effacées. Selon la variante où l'on utilise que des pages de la première catégorie, on peut se passer de recopier les trames fiables vers une nouvelle page suite à la détection d'une trame erronée. En effet, la trame problématique ne sera de toute façon 35 pas considérée en lecture et on lira la donnée fiable précédente. 3051574 B15054 - 15-ZV2-0813 19 Toutefois, cela réduit la capacité de la mémoire en termes de nombre d'arrachement qu'elle peut supporter dans la mesure où l'on conserve des trames perdues. Le nombre de pages disponibles (effacées) est au minimum 5 deux afin de permettre un effacement d'une page. Lorsqu'il n'y a plus de page disponible (autre que les deux minimum), on sélectionne une des pages écrites, de préférence la page dont le nombre de trames écrites est minimum. On parcourt alors cette page à effacer en vérifiant ses trames et celles d'entre-elles qui 10 contiennent les derniers états fiables de blocs Bi. Tous ces blocs sont transférés (écrits) de la manière décrite en relation avec la figure 4 vers une des pages disponibles. Ainsi, au maximum n blocs sont transférés (en pratique, il y a aux moins certaines trames qui contiennent des données obsolètes de sorte que ce 15 transfert se traduit par des trames disponibles dans cette page). Une fois le transfert terminé, la page d'origine est effacée. Une fois l'effacement effectué, on programme l'indicateur de page effacée (PMD1(4)). En variante, on fixe un nombre minimum de pages 20 supérieur, par exemple trois ou quatre, de façon à disposer de plus de trames disponibles afin de stocker un plus grand nombre de transactions sans requérir un effacement. Selon le deuxième aspect de la présente description, à chaque effacement d'une page de la mémoire flash 2, on incrémente 25 un compteur de nombre d'effacements de la page concernée. La figure 9 est un schéma-blocs illustrant un mode de réalisation d'une sélection d'une page à effacer selon ce deuxième aspect. Pour effectuer l'effacement d'une page Pl (ERASE Pl), 30 on commence, comme indiqué ci-dessus par transférer (bloc 91, TRANSEERT DBj(P1) -> DBj'(Pl')) tous les blocs de données DBj de la page Pl dont le contenu représente la dernière valeur stable d'une donnée vers un bloc DBj'(P1') d'une des pages mémoire disponibles. On stocke (bloc 92, TEMP NPE) le compteur NPE de 35 nombre d'effacements de page dans un mot de métadonnées de la page 3051574 B15054 - 15-ZV2-0813 20 précédente, puis on efface la page Pl (bloc 93, ERASE Pl). Une fois l'effacement effectué, on programme (bloc 94, NPE+1 -> PMD1(6)) le mot de métadonnées PMD1(6) à la valeur du nombre d'effacements incrémenté de un. 5 Selon ce mode de réalisation, la sélection de la page à effacer ne correspond pas nécessairement à la page ayant la valeur minimale du nombre de pages écrites mais à celle ayant la valeur minimale de pages écrites parmi les pages ayant subies un moindre nombre d'effacements. 10 L'application de ce mode de réalisation permet d'optimiser la durée de vie de la mémoire flash en optimisant l'homogénéité du nombre d'effacements parmi le nombre de pages. En effet, s'il n'y avait pas de processus de récupération d'atomicité, la page ayant la valeur maximale du nombre de pages 15 écrite serait parmi celles ayant été effacées un moins grand nombre de fois. Toutefois, dans la mesure où l'application du processus de récupération d'atomicité au niveau d'une page se traduit par un transfert, avec la même valeur de nombre de pages écrites vers une page disponible, cela ne correspond pas 20 forcément, notamment en cas de nombreuses mises en oeuvre de la récupération d'atomicité. On notera que, si ce deuxième aspect peut être combiné au premier, il peut également être mis en oeuvre plus généralement dans tout procédé de gestion d'une mémoire flash. 25 Un autre avantage est qu'en cas de mise en oeuvre du processus de récupération d'atomicité au niveau d'une page tel que décrit en relation avec la figure 9, il y a un risque que l'erreur soit au niveau du nombre de pages écrites, auquel cas cette page risque, sans la mise en oeuvre du compteur de nombre 30 d'effacements, de ne jamais être effacée. Un avantage des modes de réalisation qui ont été décrits est qu'ils améliorent la gestion d'une mémoire flash pour le traitement d'opérations devant respecter un critère d'atomicité. Un autre avantage est qu'ils permettent aisément de 35 remonter à la dernière valeur atomique d'une donnée. 3051574 B15054 - 15-ZV2-0813 21 Divers modes de réalisation ont été décrits. Diverses variantes et modifications apparaîtront à l'homme de l'art. Par ailleurs, la mise en oeuvre pratique des modes de réalisation qui ont été décrits est à la portée de l'homme du métier à partir des 5 indications fonctionnelles données ci-dessus et en utilisant des circuits en eux-mêmes usuels. Notamment, l'organisation de l'adressage de la mémoire et la génération des signaux adaptés à sa commande et à cet adressage fait appel à des techniques en elles-mêmes usuelles. REVENDICATIONS1. Procédé de gestion d'une mémoire flash (2), dans lequel : les données (A) à stocker sont organisées en blocs logiques (Bi) ; la mémoire est divisée en pages (Pl) ; chaque page est divisée en trames (Fj), chaque trame pouvant contenir au moins un bloc (DBj) de données et au moins deux mots de métadonnées de trame (EMDj) ; chaque page comporte au moins un mot de métadonnées de 10 page (PMD) qui contient, lorsqu'une page est écrite, une valeur d'un compteur (PWN) de nombre de pages écrites ; une écriture d'un bloc logique dans la mémoire s'accompagne d'une programmation d'un premier mot de métadonnées de trame (EMDj(2)) avec un identifiant (i) de ce bloc logique ; 15 et la page dans laquelle procéder à l'écriture est choisie comme étant celle dont le premier mot de métadonnées contient la valeur maximum du compteur de pages écrites parmi toutes les pages. 20 2. Procédé selon la revendication 1, dans lequel les trames (Fj) sont écrites séquentiellement dans une page (Pl). 3. Procédé selon la revendication 2, dans lequel le premier mot de métadonnées de trame (EMDj(2)) contient également une valeur représentative d'un code de contrôle d'erreur calculé 25 au moins à partir du bloc de données (DBj) de la trame. 4. Procédé selon la revendication 3, dans lequel lors de l'écriture d'une trame (Fj), un deuxième mot de métadonnées de trame (FMDj (1)) est écrit en premier avec une valeur, indépendante du contenu de la donnée à écrire et qui est toujours la même pour 30 une trame donnée. 5. Procédé selon la revendication 4, dans lequel ledit deuxième mot de métadonnées (EMDj(1)) a une valeur fixe pour toutes les trames (Fj) de la mémoire (2). 3051574 B15054 - 15-ZV2-0813 23 6. Procédé selon l'une quelconque des revendications 1 à 5, dans lequel ledit premier mot de métadonnées de page (PMD1(5)) est écrit avant écriture d'une première trame (Fj) dans la page (Pl). 5 7. Procédé selon l'une quelconque des revendications 1 à 6, dans lequel une lecture d'un bloc de données logique comporte les étapes de : rechercher la dernière trame (Fj) écrite dont l'identifiant de bloc (i) correspond à celui du bloc logique ; vérifier que l'écriture des données dans cette dernière trame respecte un code de contrôle d'erreur (CRC) et, si ce n'est pas le cas, rechercher la précédente trame écrite dont l'identifiant de bloc correspond à celui du bloc de données logique jusqu'à avoir parcouru toutes les pages. 8. Procédé selon l'une quelconque des revendications 1 à 7, dans lequel un circuit de gestion de la mémoire effectue, à chaque démarrage, une vérification d'atomicité de la dernière trame écrite (Fj). 9. Procédé selon la revendication 8, dans lequel en cas 20 de défaut d'atomicité, toutes les trames valides de la page courante (P1) sont transférées dans une page disponible (Pr) et la page courante est effacée. 10. Procédé selon la revendication 9, dans lequel ladite page disponible est une page dédiée (Pr). 25 11. Mémoire flash (2), programmée conformément au procédé selon l'une quelconque des revendications 1 à 10. 12. Circuit électronique (1) comportant une mémoire flash (2) conforme à la revendication 11.