FR 3012655 A1 20150501 FR 1360440 A 20131025 COMPTEUR EN MÉMOIRE 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 particulièrement la réalisation d'un compteur dont la valeur est stockée dans une mémoire flash. Exposé de l'art antérieur Dans de nombreuses applications, on a besoin de stocker de façon non volatile le résultat d'un compteur afin qu'il soit conservé indépendamment de l'alimentation du circuit. C'est le cas notamment dans les cartes à microcircuits qui intègrent un microprocesseur et au moins une mémoire non volatile, et plus généralement dans tout circuit électronique requérant des éléments de comptage en mémoire non volatile. Jusqu'à présent, on utilise des mémoires de type EEPROM pour stocker la valeur d'un compteur. Résumé Suite au développement des mémoires de type flash, il serait souhaitable de pouvoir utiliser ces mémoires pour stocker 20 les valeurs de compteurs. Cependant, une contrainte est que les mémoires de type flash ne sont effaçables que par page entière de la mémoire. B12947 - 13-ZV2-0366 2 Ainsi, un mode de réalisation vise un procédé de mise à jour d'un compteur en mémoire flash, comportant : une première phase dans laquelle un ensemble de valeurs susceptibles d'être prises par le compteur sont 5 programmées dans au moins une page de la mémoire flash ; et une deuxième phase dans laquelle, à chaque incrément/décrément du compteur, la valeur courante est programmée à l'état zéro dans la mémoire flash. Selon un mode de réalisation, la première phase 10 comporte : une étape d'effacement de la page de la mémoire ; et une étape d'écriture des valeurs successives du compteur en une seule fois dans la page. Selon un mode de réalisation, une lecture de la valeur 15 du compteur consiste à examiner séquentiellement le contenu de la page et à considérer la première valeur non nulle. Selon un mode de réalisation, une page comporte 64, 128 ou 256 octets. Selon un mode de réalisation, on prévoit également une 20 mémoire flash, programmée conformément au procédé ci-dessus. Selon un mode de réalisation, on prévoit également un circuit électronique comportant une telle mémoire flash. Brève description des dessins Ces caractéristiques et avantages, ainsi que d'autres, 25 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 est un schéma-bloc d'un exemple de circuit électronique du type auquel s'applique les modes de réalisation 30 qui vont être décrits ; la figure 2 illustre, de façon très schématique et sous forme de blocs, un exemple de système exploitant un routeur NFC ; la figure 3 est une représentation schématique d'un 35 exemple de mémoire flash ; et B12947 - 13-ZV2-0366 3 la figure 4 illustre un mode de mise en oeuvre du procédé de programmation d'un compteur dans une mémoire flash. Description détaillée De mêmes éléments ont été désignés par de mêmes 5 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 fonctionnement électrique d'une mémoire flash lors des étapes d'écriture, de lecture et 10 d'effacement n'ont pas été détaillées, les modes de réalisation décrits étant compatibles avec les technologies usuelles des mémoires flash. De plus, les applications utilisant la mise à jour d'un compteur à stocker dans une mémoire flash n'ont pas non plus été détaillées, les modes de réalisation décrits étant, 15 là encore, compatibles avec les applications usuelles. Utiliser une mémoire flash pour stocker un compteur pose plusieurs problèmes par rapport à l'utilisation habituelle d'une mémoire EEPROM. Traditionnellement, lorsqu'un compteur est stocké dans 20 un mémoire EEPROM, la programmation et l'effacement s'effectuent par octet ou par mot dans la mémoire, ce qui offre une granularité suffisante. Une mémoire flash se programme, à partir d'un état initial vers des états 0 (états non conducteurs des cellules). 25 Cela signifie que les cellules de la mémoire doivent être initialisées à un état haut et que, pour stocker une donnée, on choisit soit de ne pas intervenir sur l'état du bit, soit de programmer ce bit à 0. Par ailleurs, un effacement (remise dans l'état 30 initial) s'effectue forcément par page mémoire. Une page est définie comme la taille minimale susceptible d'être adressée simultanément pour effacement. En pratique, cela correspond à la taille d'un registre recevant les données en série pour les transférer en parallèle au plan mémoire pour stockage. B12947 - 13-ZV2-0366 4 Typiquement, une page représente actuellement, dans une mémoire flash, 32, 64, 128, 256 ou 512 octets. Or, un compteur requiert de changer l'état d'un seul bit (ou de quelques bits selon le pas d'incrément/décrément). L'opération d'effacement d'une page est relativement longue (typiquement de l'ordre de quelques millisecondes) par rapport à une opération de programmation d'un octet (typiquement de l'ordre de la dizaine de microsecondes). Un processus consistant à effacer la page pour 10 programmer le nouvel état du compteur à chaque incrément prendrait trop de temps. En particulier, dans de nombreuses applications, le temps disponible pour écrire en mémoire non volatile est limité. C'est en particulier le cas dans des applications exploitant une technologie de communication en 15 champ proche et sans contact (NFC - Near Field Communication) car la durée de la transaction entre deux éléments communiquant n'est que temporaire et risque à tout moment d'être interrompue. Or, l'utilisation d'un compteur en mémoire non volatile est, dans ces applications, souvent liée à des questions de sécurité 20 en termes d'accès à certaines informations. La fiabilité du compteur est alors critique. On peut être amené à mettre en oeuvre des procédures dites d'atomicité pour améliorer cette fiabilité. Toutefois, ces procédures accroissent encore le besoin de mise à jour d'informations en mémoire non volatile. 25 La figure 1 représente, schématiquement, sous forme de blocs, un exemple de circuit électronique 1 du type auquel s'appliquent les modes de réalisation qui vont être décrits. Un tel circuit comporte une unité de traitement 12 (PU) susceptible de communiquer, par l'intermédiaire d'un ou plusieurs bus 13 de 30 données, d'adresses et de commandes, avec différents éléments parmi lesquels, par exemple, une interface d'entrée/sortie 14 (I/O) de communication avec l'extérieur du circuit 1, une ou plusieurs mémoires 15 (MEM) volatiles ou non volatiles, une ou plusieurs fonctions (symbolisées par un bloc 16, FCT) liées à 35 l'application, et au moins une mémoire flash 3 (FLASH). D'autres B12947 - 13-ZV2-0366 éléments sont susceptibles d'être raccordés aux bus 13 et/ou d'être inclus dans le circuit. Le cas échéant, la mémoire flash est externe au circuit 1. La figure 2 est une représentation schématique d'un 5 exemple de dispositif 2 incluant un ou plusieurs circuits électroniques 1' formant un routeur de communication en champ proche (NFC) susceptible de communiquer par différents bus 13 avec le reste du dispositif 2. Le routeur NFC sert d'interface entre les différents éléments du dispositif 2 et une antenne 22 de communication en champ proche avec un dispositif voisin non représenté. Dans l'exemple de la figure 2, le circuit NFC inclut au moins une mémoire flash 3. Les applications visées par la présente description exploitent, au moins un compteur dont la valeur est stockée dans 15 cette mémoire flash. La figure 3 illustre, de façon très schématique un exemple d'architecture d'une mémoire flash 3, une telle mémoire est généralement organisée en blocs 32 (BLOCK) comportant chacun plusieurs pages 34 (PAGE), chacune d'un nombre donné d'octets, 20 par exemple de 512, 1024 ou 2048 octets. L'écriture de données DATA dans la mémoire 3 ou l'effacement s'effectue par l'intermédiaire d'un registre d'entrée 36 (REG). Les données sont typiquement envoyées dans une communication série, ou par octet, dans le registre 36 d'écriture qui est ensuite déchargé 25 en parallèle vers un bloc de la mémoire. En lecture, l'adressage d'une zone conduit également à la lecture d'une page à travers un registre de sortie 38 qui fournit les données lues à l'extérieur. La représentation de la figure 3 est schématique et 30 les différents circuits de commande et d'adressage n'ont pas été illustrés. L'utilisation normale d'une mémoire flash pour stocker des données de taille inférieure à la page prendrait trop de temps. En effet, à chaque nouvelle valeur devant être stockée B12947 - 13-ZV2-0366 6 dans le compteur, il serait nécessaire d'effacer toute la page pour pouvoir reprogrammer une nouvelle valeur. On prévoit, dans une phase d'initialisation du compteur, d'effacer une page entière de la mémoire, puis de programmer toutes les valeurs attendues du compteur susceptibles d'être stockées dans cette page. Une fois cette initialisation de la page terminée, à chaque incrément ou décrément du compteur, on programme à zéro la valeur correspondante dans la page. En lecture, la valeur courante du compteur est donnée par la première valeur adressée (typiquement dans l'ordre séquentiel) qui n'est pas à zéro. La figure 4 illustre, de façon très schématique, un mode de mise en oeuvre d'un procédé de mise à jour d'un compteur dans une mémoire flash. Dans une phase d'initialisation (INIT) du compteur, on commence par effacer (bloc 41, ERASE PAGE) la page correspondante de la mémoire, c'est-à-dire à placer tous les bits de la page dans un état 1 (octet à la valeur FF). Puis, dans une deuxième étape de cette phase d'initialisation, on 20 écrit toutes les valeurs successives du compteur en une seule fois dans la page de la mémoire. Par exemple, on génère en mémoire vive ou, dans des registres, les différentes valeurs par incréments ou décréments successifs de toutes les valeurs du compteur. Cette étape est illustrée en figure 4 par un bloc 42 25 (COUNT=00) d'initialisation de la valeur du compteur à 0 (octet à 00), puis par une boucle (blocs 42 à 46) dans laquelle la valeur courante est stockée (bloc 43, COUNT -> REG) dans un registre ayant, de préférence, la taille d'une page de la mémoire flash, un test (bloc 44, COUNT=FF ?) pour déterminer si 30 la valeur maximale du compteur est atteinte. Tant que toutes les valeurs n'ont pas été calculées (sortie N du test 44), le compteur est incrémenté (bloc 45, COUNT = COUNT + 1). Une fois que toutes les valeurs sont présentes dans le registre (sortie Y du test 44), le contenu de ce dernier est programmé dans la page 35 de la mémoire flash. B12947 - 13-ZV2-0366 7 Un exemple de contenu de page est illustré en partie centrale en figure 4. Ces deux opérations prennent du temps mais ne sont à effectuées qu'une fois pour un compteur représenté par la 5 capacité d'une page. Lors du fonctionnement du compteur (OPERATION), c'est- à-dire de son utilisation par le circuit 1 et, plus particulièrement, lors d'un incrément de celui-ci (bloc 47, COUNT+1), on programme (bloc 48, PROG BYTE 00) les bits de 10 l'octet correspondant à la valeur 0 (octet à la valeur 00). Cette programmation s'effectue rapidement dans une mémoire flash à la différence de l'effacement car elle se fait par octet. Dans l'exemple de la figure 4, on suppose que la valeur courante est 00011010. Comme l'illustre la partie centrale de la figure 4, 15 cet octet (ainsi que tout les octets précédents par lesquels sont passées les valeurs du compteur se trouvent alors à 0. La phase d'initialisation peut être mise en oeuvre à chaque besoin de réinitialisation du compteur. Par exemple, en utilisant un compteur d'un octet (8 20 bits), une page de 256 octets de mémoire flash contient toutes les valeurs possibles du compteur. Dans le cas où le compteur est sur un nombre plus grand que contenu dans un octet, il suffit d'utiliser plusieurs pages et de concaténer les valeurs lues. 25 Un avantage des modes de réalisation qui ont été décrits est qu'ils rendent possibles l'utilisation d'une mémoire flash pour stocker la valeur d'un compteur. Un autre avantage est que la mise à jour du compteur est rapide en particulier par rapport au temps nécessaire à 30 l'effacement d'une page dans la mémoire flash. Divers modes de réalisation ont été décrits. Diverses variantes et modifications apparaîtront à l'homme de l'art. En particulier, 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 à REVENDICATIONS1. PrOcédé de mise à jour d'un compteur en mémoire flash (3), comportant : une première phase (41, 42, 43, 44, 45, 46) dans laquelle un ensemble de valeurs susceptibles d'être prises par 5 le compteur sont programmées dans aû moins une page de la mémoire flash ; et une deuxième phase (47, 48) dans laquelle, à chaque incrément/décrément du compteur, la valeur courante est programmée à l'état zéro dans la mémoire flash. 2. Procédé selon la revendication 1, dans lequel la première phase comporte : une étape (41) d'effacement de la page de la mémoire ; une étape (46), d'écriture des valeurs successives du 15 compteur en une seule fois dans la page. 3. Procédé selon la revendication 1 ou 2, dans lequel une lecture de la valeur du compteur consiste à examiner séquentiellement le contenu de la page et à considérer la première valeur non nulle. 4. Procédé selon l'une quelconque des revendications 1 à 3, dans. lequel une page comporte 64, 128 ou 256 octets.