Brevet FR3104285A1 — publié le 20210611

Contrôle d’intégrité d’une mémoire La présente description concerne un procédé de contrôle d’intégrité d’une mémoire, comprenant les étapes (406, 408, 412, 414) suivantes : stocker des données représentatives d’une opération à exécuter dans la mémoire ; exécuter l’opération ; et effacer les données une fois l’exécution achevée. Figure pour l'abrégé : Fig. 4 Contrôle d’intégrité d’une mémoire La présente description concerne de façon générale les circuits électroniques et, plus particulièrement, les mémoires. Une mémoire est généralement utilisée pour stocker des données, par exemple des instructions et des constantes permettant l’exécution d’un programme par un processeur. Des opérations de modification du contenu de la mémoire sont alors effectuées à chaque mise à jour de l’une de ces données. Lorsqu’une réinitialisation de la mémoire survient pendant de telles opérations, cela interrompt généralement la modification du contenu de la mémoire et les données qui y sont stockées sont alors susceptibles d’être altérées. On dit généralement que l’intégrité de la mémoire est compromise. Il existe un besoin de contrôler l’intégrité d’une mémoire. Un mode de réalisation pallie tout ou partie des inconvénients des procédés de contrôle d’intégrité de mémoire connus. Un mode de réalisation prévoit un procédé de contrôle d’intégrité d’une mémoire, comprenant les étapes suivantes : stocker des données représentatives d’une opération à exécuter dans la mémoire ; exécuter l’opération ; et effacer les données une fois l’exécution achevée. Selon un mode de réalisation, le procédé comprend en outre une étape consistant à lire les données : avant l’exécution d’une autre opération dans la mémoire ; et/ou après une réinitialisation de la mémoire. Selon un mode de réalisation, le procédé comprend en outre une étape consistant à détecter, en fonction des données, si une interruption s’est produite pendant l’exécution de l’opération. Selon un mode de réalisation, le procédé comprend en outre une étape consistant à répéter l’opération en cas de détection d’une interruption. Selon un mode de réalisation, le procédé comprend en outre une étape, préalable à la répétition de l’opération, consistant à effacer entièrement une page de mémoire destinée ensuite à être modifiée par l’opération. Selon un mode de réalisation, les données comportent un code d’opération qui est fonction d’une nature d’opération à exécuter dans la mémoire. Selon un mode de réalisation, on affecte au code d’opération une valeur choisie parmi une pluralité d’ensembles de valeurs comprenant : un premier ensemble de valeurs, si aucune opération n’est en cours d’exécution dans la mémoire ; un deuxième ensemble de valeurs, si une opération d’écriture est en cours d’exécution dans la mémoire ; un troisième ensemble de valeurs, si une opération d’effacement est en cours d’exécution dans la mémoire ; et un quatrième ensemble de valeurs, en cas d’opération de configuration du microcontrôleur, les premier et quatrième ensembles de valeurs étant constitués chacun, de préférence, d’une seule valeur. Selon un mode de réalisation, le deuxième ensemble de valeurs comprend : une première valeur, si une opération d’écriture d’un mot est en cours d’exécution dans la mémoire ; et une deuxième valeur, si une opération d’écriture de plusieurs mots, de préférence huit mots, est en cours d’exécution dans la mémoire. Selon un mode de réalisation, le troisième ensemble de valeurs comprend : une troisième valeur, si une opération d’effacement d’une page de mémoire est en cours d’exécution dans la mémoire ; une quatrième valeur, si une opération d’effacement d’une banque de mémoire est en cours d’exécution dans la mémoire ; et une cinquième valeur, si une opération d’effacement de plusieurs banques de mémoire, de préférence deux banques de mémoire, est en cours d’exécution dans la mémoire. Selon un mode de réalisation, les données comportent en outre : une adresse pointant vers une zone mémoire où est exécutée l’opération ; un identifiant de banque de mémoire où est exécutée l’opération ; et un identifiant de puce mémoire où est exécutée l’opération. Selon un mode de réalisation, la mémoire fait partie d’un microcontrôleur comportant : un processeur ; et au moins deux puces mémoire, de préférence exactement deux puces mémoire, chaque puce mémoire comprenant au moins deux banques de mémoire, de préférence exactement deux banques de mémoire. Selon un mode de réalisation, les données sont stockées dans un registre de l’une des puces mémoire. Selon un mode de réalisation, tant que l’exécution d’une opération n’est pas achevée, un système non programmé est configuré pour imposer, sur des plots de connexion de la mémoire, des signaux de commande correspondant à cette opération. Selon un mode de réalisation, la mémoire est une mémoire flash. Un mode de réalisation prévoit une machine d’états configurée pour mettre en œuvre le procédé tel que décrit. Un mode de réalisation prévoit un système comprenant au moins une mémoire configurée pour mettre en œuvre le procédé tel que décrit. Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation et modes de mise en œuvre particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 représente, de façon schématique et sous forme de blocs, un exemple de microcontrôleur du type auquel s’appliquent, à titre d’exemple, les modes de mise en œuvre décrits ; la figure 2 représente, de façon schématique, un exemple de bloc mémoire du type auquel s’appliquent, à titre d’exemple, les modes de mise en œuvre décrits ; la figure 3 illustre, de façon schématique, un exemple d’opération de modification de contenu d’une mémoire ; la figure 4 illustre, de façon schématique, un mode de mise en œuvre d’un procédé de contrôle d’intégrité d’une mémoire flash ; la figure 5 représente, de façon schématique, un mode de réalisation d’un registre d’état du type auquel s’appliquent, à titre d’exemple, les modes de mise en œuvre décrits ; la figure 6 représente, de façon schématique, un mode de réalisation d’un circuit configuré pour transmettre un signal de contrôle d’intégrité d’une mémoire flash ; la figure 7 représente, de façon schématique et sous forme de blocs, un mode de réalisation d’une machine d’états ; et la figure 8 représente, de façon très schématique et sous forme de blocs, un exemple de système comprenant une mémoire flash. De mêmes éléments ont été désignés par de mêmes références dans les différentes figures. En particulier, les éléments structurels et/ou fonctionnels communs aux différents modes de réalisation et modes de mise en œuvre peuvent présenter les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques. Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de réalisation et modes de mise en œuvre décrits ont été représentés et sont détaillés. En particulier, la nature et le contenu des données susceptibles d’être écrites, lues et effacées dans la mémoire ne sont pas détaillés. Sauf précision contraire, lorsque l'on fait référence à deux éléments connectés entre eux, cela signifie directement connectés sans éléments intermédiaires autres que des conducteurs, et lorsque l'on fait référence à deux éléments reliés (en anglais "coupled") entre eux, cela signifie que ces deux éléments peuvent être connectés ou être reliés par l'intermédiaire d'un ou plusieurs autres éléments. Dans la description qui suit, lorsque l'on fait référence à des qualificatifs de position absolue, tels que les termes "avant", "arrière", "haut", "bas", "gauche", "droite", etc., ou relative, tels que les termes "dessus", "dessous", "supérieur", "inférieur", etc., ou à des qualificatifs d'orientation, tels que les termes "horizontal", "vertical", etc., il est fait référence, sauf précision contraire, à l'orientation des figures. Sauf précision contraire, les expressions "environ", "approximativement", "sensiblement", et "de l'ordre de" signifient à 10 % près, de préférence à 5 % près. La figure 1 représente, de façon schématique et sous forme de blocs, un exemple de microcontrôleur 100 du type auquel s’appliquent, à titre d’exemple, les modes de mise en œuvre décrits. En figure 1, le microcontrôleur 100 comporte une unité de traitement 102 (CPU). L’unité de traitement 102 est, par exemple, un processeur destiné à exécuter des instructions de code d’un programme informatique. Le microcontrôleur 100 comporte, en outre, une puce mémoire flash 104 (SYS MEM), également appelée mémoire système 104 dans la suite de la description. De façon générale, la mémoire système 104 sert principalement à stocker des données liées au fonctionnement intrinsèque du microcontrôleur 100. Ces données permettent typiquement au microcontrôleur 100 de fonctionner indépendamment de l’application retenue. À titre d’exemple, la mémoire système 104 contient notamment des données associées à un « chien de garde » (watchdog) permettant de contrôler la durée d’exécution, par le processeur 102, des instructions de code du programme informatique. Le microcontrôleur 100 comporte une autre puce mémoire flash 106 (USR MEM), également appelée mémoire utilisateur 106 dans la suite de la description. De façon générale, la mémoire utilisateur 106 sert principalement à stocker des données spécifiques à l’application retenue. À titre d’exemple, la mémoire 106 contient les instructions de code du programme informatique exécuté par le processeur 102 ainsi que des constantes liées à cette exécution. La mémoire système 104 possède un contenu qui est généralement paramétré en usine, par exemple par le fabriquant du microcontrôleur 100. La mémoire utilisateur 106 possède en revanche un contenu qui est souvent configuré ultérieurement, de façon spécifique pour répondre à chaque application dans laquelle le microcontrôleur 100 est utilisé. La puce mémoire flash 106 peut comporter une pluralité de blocs mémoire 116, ou banques de mémoire 116. Dans l’exemple illustré en figure 1, la mémoire utilisateur 106 du microcontrôleur 100 comporte deux blocs mémoire 116a (U0) et 116b (U1). De façon analogue, la puce mémoire flash 104 peut comporter une pluralité de blocs mémoire 118, ou banques de mémoire 118. Dans l’exemple illustré en figure 1, la mémoire système 104 du microcontrôleur 100 comporte deux blocs mémoire 118a (S0) et 118b (S1). En pratique, chaque bloc mémoire 116, 118 correspond physiquement à une sous-entité ou région matérielle distincte à l’intérieur de la puce mémoire flash 106, 104 dont il fait partie. Dans l’exemple de la figure 1, le microcontrôleur 100 comporte par ailleurs : un ou plusieurs bus 108 de données, d’adresses et/ou de commandes entre les différents éléments internes au microcontrôleur 100 ; une interface d’entrée/sortie 110 (I/O) de communication avec l’extérieur du microcontrôleur 100 ; et une ou plusieurs autres mémoires de stockage volatil et/ou non volatil, symbolisées en figure 1 par un bloc 112 (MEM), par exemple une mémoire vive (Random Access Memory - RAM) permettant de stocker des variables dynamiques liées à l’exécution du programme par le processeur 102. En fonction de l’application visée, le microcontrôleur 100 peut aussi inclure divers autres circuits. Ces circuits sont, en figure 1, symbolisés par un unique bloc 114 (FCT). À titre d’exemple, l’unité de traitement 102, la mémoire système 104, la mémoire utilisateur 106, l’interface d’entrée/sortie 110, les autres mémoires 112 et les autres circuits 114 sont réalisés sur un même substrat et forment une architecture de type « système sur puce » (System on Chip - SoC). La figure 2 représente, de façon schématique, un exemple de bloc mémoire 116a du type auquel s’appliquent, à titre d’exemple, les modes de mise en œuvre décrits. Le bloc mémoire 116a de la puce mémoire flash 106 comporte, comme illustré en figure 2, une matrice de points mémoire 202. Ces points mémoire 202, ou cellules mémoire 202, sont organisés en lignes et en colonnes de la matrice de cellules mémoire 202. Dans un souci de clarté, seules quelques cellules mémoire 202 ont été représentées en figure 2 étant entendu que, en pratique, le bloc mémoire 116a peut comporter un nombre quelconque de cellules mémoire 202, par exemple plusieurs milliers ou plusieurs millions de cellules mémoire 202. Chaque cellule mémoire 202 du bloc mémoire 116a stocke un bit dont la valeur correspond à un état logique parmi deux états logiques possibles, notés par exemple « 0 » et « 1 ». À l’intérieur du bloc mémoire 116a, plusieurs cellules mémoire 202 peuvent être regroupées. En particulier, plusieurs cellules mémoire 202, par exemple 137 cellules mémoire 202 adjacentes, peuvent être regroupées pour former un mot de 137 bits. Chaque mot de 137 bits est, par exemple, constitué de 128 bits de données et de 9 bits formant un code correcteur d’erreur (Error Correction Code - ECC). À l’intérieur du bloc mémoire 116a de la mémoire utilisateur 106, les lignes de la matrice de cellules mémoire 202 comportent par exemple chacune 8 mots. En outre, toujours à l’intérieur du bloc mémoire 116a, plusieurs lignes peuvent être regroupées. En particulier, plusieurs lignes du bloc mémoire 116a, par exemple 512 lignes consécutives, peuvent être regroupées pour former une page de mémoire du bloc mémoire 116a. Le bloc mémoire 116a de la puce mémoire flash 106 du microcontrôleur 100 possède, par exemple, une capacité totale de 1 MB (un mégabyte). Le bloc mémoire 116b de la puce mémoire flash 106 du microcontrôleur 100 possède, de préférence, une structure similaire à celle du bloc mémoire 116a. En d’autres termes, la puce mémoire 106 est divisée en deux banques de mémoire 116a et 116b. Chaque banque de mémoire 116a, 116b est subdivisée en plusieurs pages de mémoire. Chaque page de mémoire est elle-même subdivisée en 512 lignes, comprenant chacune 8 mots de 137 bits chacun. La puce mémoire flash 104 possède, de préférence, une structure similaire à celle de la puce mémoire flash 106 telle que décrite ci-dessus. En figure 2, on a arbitrairement symbolisé par une case hachurée une cellule mémoire 202 servant à stocker une information, par exemple un fragment de programme exécuté par le processeur 102 du microcontrôleur 100, et par une case non hachurée une cellule mémoire 202 ne servant pas à stocker d’information. Les cellules mémoire 202 qui servent à stocker une information contiennent chacune un bit dont la valeur est égale à l’un ou l’autre des états binaires 0 et 1, cette valeur pouvant varier d’une cellule mémoire 202 à l’autre. Les bits des cellules mémoire 202 qui ne servent pas à stocker une information sont généralement tous égaux à une même valeur, par exemple 1. Comme cela est représenté en figure 2, les informations sont par exemple stockées à l’intérieur du bloc mémoire 116a dans des cellules mémoire 202 adjacentes. Dans l’orientation de la figure 2, les cellules mémoire 202 situées dans la partie supérieure du bloc mémoire 116a servent à stocker des informations, tandis que les cellules mémoire 202 situées dans la partie inférieure du bloc mémoire 116a ne stockent pas d’informations. En d’autres termes, le bloc mémoire 116a comporte, dans sa partie inférieure, une zone libre non affectée au stockage d’informations. La figure 3 illustre, de façon schématique, un exemple d’opération de modification de contenu d’une mémoire. On suppose que l’on veut modifier des octets de données 302 d’un même mot 304 stocké, par exemple, dans le bloc mémoire 116a de la puce mémoire 106. On suppose, en outre, que le mot 304 comporte 16 octets de données 302 (302-0, 302-1, 302-2, 302-3, 302-4 … 302-14 et 302-15), les bits de chaque octet 302 étant, dans une étape (STEP 0) initiale, tous égaux à 1. Cela correspond, par exemple, à une situation dans laquelle le mot 304 n’a pas encore été modifié, ou à une situation dans laquelle le mot 304 a préalablement subi au moins une opération d’effacement. En figure 3, on représente par un carré contenant un « 1 » un octet de données 302 dont tous les bits sont à 1, et par un carré contenant un « 0 » un octet de données 302 dont tous les bits sont à 0. On considère que : les octets 302 situés du côté de l’octet 302-0 (à droite, dans l’orientation de la figure 3), constituent des octets de poids faible du mot 304 ; et les octets 302 situés du côté de l’octet 302-15 (à gauche, dans l’orientation de la figure 3), constituent des octets de poids fort du mot 304. À des fins de simplification, on suppose que l’on veut effectuer une opération d’écriture consistant arbitrairement à mettre à 0 tous les octets de données 302 du mot 304. Une commande correspondant à cette opération d’écriture est symbolisée, en figure 3, par une flèche 306 (WRITE). Cette commande d’écriture 306 est, par exemple, transmise à la puce mémoire 106 par le processeur 102. Dans l’exemple illustré en figure 3, on suppose que l’opération d’écriture s’effectue par étapes successives en changeant, de préférence octet par octet, depuis les octets de poids faible vers les octets de poids fort, la valeur de chaque octet 302 du mot 304. Par l’expression « mettre à 0 » un octet, on entend mettre à 0 tous les bits de cet octet. L’opération d’écriture comprend, comme illustré en figure 3 : une première étape (STEP 1) consistant à mettre à 0 l’octet 302-0 du mot 304 ; une deuxième étape (STEP 2), postérieure à la première étape, consistant à mettre à 0 l’octet 302-1 ; une troisième étape (STEP 3), postérieure à la deuxième étape, consistant à mettre à 0 l’octet 302-2 ; une quatrième étape (STEP 4), postérieure à la troisième étape, consistant à mettre à 0 l’octet 302-3 ; des étapes (non représentées), consistant à mettre à 0 l’octet 302-4, puis à mettre successivement à 0 tous les octets 302 du mot 304 compris entre l’octet 302-4 et l’octet 302-14 ; une quinzième étape (STEP 15), postérieure à la quatrième étape et aux étapes non représentées, consistant à mettre à 0 l’octet 302-14 ; et une seizième étape (STEP 16), postérieure à la quinzième étape, consistant à mettre à 0 l’octet 302-15. Une interruption, provoquée par exemple par une réinitialisation (reset) de la puce mémoire 106 et/ou du processeur 102 (figure 1), est susceptible de survenir pendant l’opération d’écriture. On suppose, à titre d’exemple, qu’une interruption se produit entre la deuxième étape STEP 2 et la troisième étape STEP 3 de l’opération d’écriture exposée en relation avec la figure 3. On suppose, en outre, que la valeur du mot 304 est, au moment de l’interruption, égale à celle qu’il avait à l’issue de la deuxième étape STEP 2. En d’autres termes, on suppose que, au moment de l’interruption, les octets 302-0 et 302-1 du mot 304 sont égaux à 0 et tous les bits des autres octets 302 du mot 304 sont égaux à 1. Le mot 304 conserve ainsi, après l’interruption, la valeur qu’il avait à l’issue de la deuxième étape STEP 2 (octets 302-0 et 302-1 égaux à 0, et tous les bits des autres octets 302 égaux à 1). De manière générale, si une interruption survient pendant une étape n (où n est un entier naturel tel que 1 ≤ n ≤ 16) de l’opération d’écriture du mot 304, alors le contenu du mot 304 est égal, après l’interruption, au contenu du mot 304 à la fin de l’étape n-1. Dans ce cas, le contenu du mot 304 n’est pas conforme à la valeur escomptée à l’issue de l’opération d’écriture (tous les octets 302 du mot 304 égaux à 0), l’interruption ayant introduit une modification involontaire de la valeur du mot 304 à écrire. On dit alors que le mot 304 est altéré ou corrompu. Cela signifie, plus généralement, que l’intégrité des données de la puce mémoire 106 est compromise, autrement dit que l’intégrité de la mémoire 106 est compromise. On pourrait penser prévoir, pour chaque mot, l’utilisation d’un code correcteur d’erreur (Error Correction Code - ECC) permettant, par exemple, de détecter deux erreurs et d’en corriger une. Toutefois, lors d’une opération d’écriture ou d’effacement, la puce mémoire 106 est soumise à une tension électrique pendant une durée suffisant à mettre dans l’état souhaité tous les bits concernés par l’opération. Si une réinitialisation intervient pendant l’application de cette tension électrique, l’opération est interrompue et les bits concernés par l’opération peuvent alors être égaux à 1 ou à 0, ou encore être dans un état instable. Dans ce cas, l’utilisation d’un code correcteur d’erreur ne permet pas de garantir l’intégrité de la puce mémoire 106. On pourrait en outre penser mettre en œuvre, dans la puce mémoire 106, un contrôle d’intégrité de type contrôle de redondance cyclique (Cyclic Redundancy Check - CRC). Toutefois, cela aurait pour inconvénient de complexifier le fonctionnement de la puce mémoire 106 et de réduire sensiblement la capacité utile de la puce mémoire 106, autrement dit l’espace alloué au stockage de données. La figure 4 illustre, de façon schématique, un mode de mise en œuvre d’un procédé 400 de contrôle d’intégrité d’une mémoire flash, par exemple de la puce mémoire flash 106. On considère arbitrairement que la puce mémoire flash 106 se trouve initialement dans un état (bloc 402, IDLE) correspondant à un état de repos. Dit autrement, dans l’état de repos 402, aucune opération mémoire, ou accès mémoire, n’est en cours dans la puce mémoire flash 106. Par la suite, l’état de repos 402 est également appelé état initial. On suppose ensuite que, lors d’une autre étape (bloc 404, OP CMD), une commande d’exécution d’une opération mémoire est transmise, par exemple par le processeur 102 du microcontrôleur 100 (figure 1), à la puce mémoire flash 106. La commande d’opération mémoire correspond, par exemple, à une commande d’opération d’écriture de données dans la mémoire 106, ou à une commande d’opération d’effacement de données dans la mémoire 106. Pendant encore une autre étape (bloc 406, SET FLASH_OPSR), des données représentatives de l’opération à exécuter dans la mémoire 106 sont alors stockées dans un registre, noté FLASH_OPSR. Le registre FLASH_OPSR est, de préférence, un registre d’état faisant partie de la puce mémoire flash 104, autrement dit de la mémoire système 104. Le registre FLASH_OPSR est détaillé ci-après en relation avec la figure 5. Au cours d’encore une autre étape (bloc 408, START OP), on débute ensuite l’exécution de l’opération dans la mémoire 106. Si aucune interruption, en particulier aucune réinitialisation, ne se produit (flèche 410, NO RESET) pendant l’exécution de l’opération dans la mémoire 106, l’exécution s’achève normalement pendant encore une autre étape (bloc 412, END OP). On efface ou on réinitialise alors, au cours d’encore une autre étape (bloc 414, ERASE FLASH_OPSR), le contenu du registre d’état FLASH_OPSR. On repasse enfin dans l’état initial 402, dans l’attente de la transmission d’une autre commande d’opération à exécuter dans la mémoire 106. Selon un mode de mise en œuvre, bien que cela ne soit pas représenté en figure 4, une étape de lecture des données stockées dans le registre d’état FLASH_OPSR est prévue avant l’exécution d’une autre opération dans la mémoire. Cela permet de s’assurer, avant chaque nouvelle opération dans la mémoire, que le registre d’état FLASH_OPSR a bien été effacé (étape 414) à l’issue de l’exécution de l’opération précédente, autrement dit que l’opération précédente s’est achevée correctement (étape 412). Dans le cas contraire, on peut par exemple prévoir d’interdire l’exécution de toute nouvelle opération et de générer une erreur. Si une interruption, par exemple une réinitialisation, se produit (flèche 416, RESET) pendant l’exécution de l’opération dans la mémoire 106, autrement dit entre l’étape 408 de début de l’exécution de l’opération et l’étape 412 de fin de l’exécution de l’opération, cette exécution est alors interrompue (bloc 418, OP INTERRUPTED). On entre alors dans encore une autre étape (bloc 420, RESTART) de redémarrage de la mémoire 106 suite à sa réinitialisation. Pendant encore une autre étape (bloc 422, READ FLASH_OPSR), on vient ensuite lire le contenu du registre d’état FLASH_OPSR dans lequel sont restées mémorisées les données représentatives de l’opération en cours d’exécution dans la mémoire 106 au moment de l’interruption 418. En fonction du contenu du registre d’état FLASH_OPSR, autrement dit selon l’opération à répéter, on peut alors passer à encore une autre étape (bloc 424, REPEAT OP) consistant à répéter l’opération précédente : soit de manière directe (flèche 426), autrement dit sans étape intermédiaire ; soit en effectuant au préalable encore une autre étape (bloc 428, PAGE ERASE) intermédiaire optionnelle, par exemple une étape 428 d’effacement d’une page de mémoire de la mémoire 106. On revient alors à l’étape 408 consistant à débuter l’exécution, dans la mémoire 106, de l’opération précédemment interrompue par la réinitialisation 416. Comme exposé ci-dessus, les données stockées dans le registre d’état FLASH_OPSR, autrement dit le contenu du registre d’état FLASH_OPSR, sont, de préférence, lues après chaque interruption d’exécution d’une opération dans la mémoire 106. Le contenu du registre d’état FLASH_OPSR est, en particulier, lu après chaque réinitialisation de la mémoire 106. En particulier, bien que cela ne soit pas représenté en figure 4, une réinitialisation peut également survenir après l’exécution d’une opération dans la mémoire 106, par exemple lorsque la mémoire 106 est revenue dans l’état initial 402 après l’étape 414 d’effacement du registre d’état FLASH_OPSR. On effectue alors un redémarrage de la mémoire 106 similaire à celui de l’étape 420, puis on vient lire le contenu du registre d’état FLASH_OPSR. Le registre d’état FLASH_OPSR ayant été précédemment effacé lors de l’étape 414, on en déduit que la réinitialisation n’a pas interrompu l’exécution d’une opération dans la mémoire. On revient alors dans l’état initial 402, dans l’attente d’une nouvelle opération à exécuter dans la mémoire 106. En d’autres termes, il est possible de détecter, en fonction de la valeur des données contenues dans le registre d’état FLASH_OPSR, si une interruption s’est produite ou non pendant l’exécution d’une opération dans la mémoire 106. Selon un mode de mise en œuvre préféré, tant que l’exécution d’une opération n’est pas achevée, autrement dit dès que l’on quitte l’étape 408 et tant que l’on n’atteint pas l’étape 412, un système non programmé (c’est-à-dire un système ne comportant pas de logiciel) est configuré pour imposer, sur des plots de connexion de la mémoire, des signaux de commande correspondant à cette opération. La figure 5 représente, de façon schématique, un mode de réalisation d’un registre d’état 500 (FLASH_OPSR) du type auquel s’appliquent, à titre d’exemple, les modes de mise en œuvre décrits. Selon un mode de mise en œuvre préféré, le registre d’état FLASH_OPSR contient des données comportant, comme illustré en figure 5 : une adresse 502 (ADDR_OP) pointant vers une zone de la mémoire où est exécutée l’opération ; un identifiant 504 (BK_OP) de banque de mémoire où est exécutée l’opération ; un identifiant 506 (SYSF_OP) de puce mémoire où est exécutée l’opération ; un champ 508 (-) réservé, autrement dit une plage réservée 508 ; et un code 510 (CODE_OP) d’opération. Selon un mode de mise en œuvre, le registre d’état FLASH_OPSR est commun au puces mémoire flash 104 et 106 du microcontrôleur 100 (figure 1). Le registre d’état FLASH_OPSR est, de préférence, un registre de 32 bits, parmi lesquels : 21 bits (numérotés de 0 à 20, en figure 5) sont affectés à l’adresse 502 ; un bit (numéroté 21, en figure 5) est affecté à l’identifiant 504 de banque mémoire ; un autre bit (numéroté 22, en figure 5) est affecté à l’identifiant 506 de puce mémoire ; 6 bits (numérotés de 23 à 28, en figure 5) sont affectés à la plage réservée 508 ; et 3 bits (numérotés de 29 à 31, en figure 5) sont affectés au code 510 d’opération. Selon un mode de mise en œuvre, on affecte au code 510 d’opération une valeur choisie parmi une pluralité d’ensembles de valeurs comprenant : un premier ensemble de valeurs, si aucune opération n’est en cours d’exécution dans la mémoire ; un deuxième ensemble de valeurs, si une opération d’écriture est en cours d’exécution dans la mémoire ; un troisième ensemble de valeurs, si une opération d’effacement est en cours d’exécution dans la mémoire ; et un quatrième ensemble de valeurs, en cas d’opération de configuration du microcontrôleur 100 (figure 1), par exemple une opération consistant à effacer une page de mémoire puis à exécuter plusieurs commandes d’écriture dans la puce mémoire flash concernée. Le code 510 d’opération correspond, de préférence, à une valeur hexadécimale codée sur 3 bits du registre d’état FLASH_OPSR. Le code 510 d’opération peut, le cas échéant, prendre 8 valeurs allant de 0x0 à 0x7. Selon un mode de mise en œuvre préféré, le code 510 d’opération contient une valeur hexadécimale égale à : 0x0, si aucune opération n’est en cours d’exécution dans la mémoire ; 0x1, si une opération d’écriture d’un mot est en cours d’exécution dans la mémoire ; 0x2, si une opération d’écriture de plusieurs mots, de préférence huit mots, est en cours d’exécution dans la mémoire ; 0x3, si une opération d’effacement d’une page de mémoire est en cours d’exécution dans la mémoire ; 0x4, si une opération d’effacement d’une banque de mémoire est en cours d’exécution dans la mémoire ; 0x5, si une opération d’effacement de plusieurs banques de mémoire, de préférence deux banques de mémoire, est en cours d’exécution dans la mémoire ; et 0x6, en cas d’opération de configuration du microcontrôleur 100. Dans ce cas, la valeur hexadécimale 0x7 est, par exemple, une valeur réservée. Comme exposé ci-dessus en relation avec la figure 4, le contenu du registre d’état FLASH_OPSR est lu après chaque réinitialisation de la mémoire 106. Le code 510 d’opération est, en particulier, lu après chaque réinitialisation de la mémoire 106. Cela permet notamment de détecter si une opération était en cours dans la mémoire 106 au moment où la réinitialisation s’est produite et, le cas échéant, de savoir de quel type d’opération il s’agissait. En se basant sur la valeur du code 510 d’opération, l’opération en cours d’exécution dans la mémoire 106 au moment de la réinitialisation peut être répétée avec, au préalable, une étape optionnelle d’effacement. Plus précisément, après une réinitialisation : si le code 510 d’opération est égal à 0x0, on ne modifie pas le contenu de la mémoire ; si le code 510 d’opération est égal à 0x1, on efface d’abord la page de mémoire contenant le mot en cours d’écriture au moment de la réinitialisation, puis on écrit à nouveau ce mot ; si le code 510 d’opération est égal à 0x2, on efface d’abord la page de mémoire contenant les huit mots en cours d’écriture au moment de la réinitialisation, puis on écrit à nouveau ces huit mots ; si le code 510 d’opération est égal à 0x3, on efface à nouveau la page de mémoire qui était en cours d’effacement au moment de la réinitialisation ; si le code 510 d’opération est égal à 0x4, on efface à nouveau la banque de mémoire qui était en cours d’effacement au moment de la réinitialisation ; si le code d’opération 510 est égal à 0x5, on efface les deux banques de mémoire qui étaient en cours d’effacement au moment de la réinitialisation ; et si le code d’opération 510 est égal à 0x6, on effectue à nouveau l’opération de configuration du microcontrôleur 100 interrompue par la réinitialisation. La figure 6 représente, de façon schématique, un mode de réalisation d’un circuit 600 configuré pour transmettre un signal de contrôle d’intégrité d’une mémoire flash. Selon ce mode de réalisation, le circuit 600 comporte un ensemble de bascules 602 et des bascules 604 et 606. Chaque bascule 602, 604, 606 reçoit : sur une entrée (CLR Z) de réinitialisation, un signal de réinitialisation noté nHReset ; et sur une entrée (>) de synchronisation, un signal de synchronisation ou d’horloge noté HClk. Le circuit 600 comporte en outre d’autres bascules 608, 610, 612, 614 et 616. La bascule 608 reçoit, sur une entrée (CLR Z) de réinitialisation, un signal de réinitialisation noté nPor. De façon analogue, chaque bascule 610, 612, 614, 616 reçoit, sur une entrée (PRE Z) de réinitialisation, le signal de réinitialisation nPor. Le circuit 600 comporte par ailleurs des unités 618, 620 et 622 (CG) de commande d’horloge (clock gating). L’unité 618 de commande d’horloge reçoit, sur une entrée, le signal d’horloge HClk et, sur une autre entrée (E), un signal noté OpsrRegClkEn provenant d’une machine d’états 624 (NexOpsrState). En sortie, l’unité 618 de commande d’horloge fournit, à une entrée (>) de synchronisation de la bascule 608, un signal noté HClk_OpsrRegClk. Le signal HClk_OpsrRegClk correspond à une impulsion du signal d’horloge HClk. De façon analogue, l’unité 620 de commande d’horloge reçoit, sur une entrée, le signal d’horloge HClk et, sur une autre entrée (E), un signal noté OpsrMaskClkEn1 provenant de la machine d’états 624. En sortie, l’unité 620 de commande d’horloge fournit, à une entrée (>) de synchronisation de la bascule 610, un signal noté HClk_OpsrMaskClk1. Le signal HClk_OpsrMaskClk1 correspond à une autre impulsion du signal d’horloge HClk. Chaque bascule 614, 616 reçoit, sur une entrée (>) de synchronisation, le signal d’horloge HClk. En entrée, la bascule 614 reçoit en outre, de la part de la machine d’états 624, un signal noté OpsrMaskClkEn2. La bascule 614 fournit, en sortie, un signal noté OpsrMaskClkEn2_s. La bascule 616 reçoit, en entrée, le signal OpsrMaskClkEn2_s et fournit, en sortie, un signal noté OpsrMaskClkEn2_ss. L’unité 622 de commande d’horloge reçoit, sur une entrée (E), le signal OpsrMaskClkEn2_ss et fournit, en sortie, un signal noté HClk_OpsrMaskClk2. Le signal HClk_OpsrMaskClk2 correspond à encore une autre impulsion du signal d’horloge HClk. La bascule 610 reçoit, en entrée, un signal représentatif de l’état en cours de la machine d’états 624. La bascule 610 est métastable, car elle reçoit des données qui proviennent d’éléments susceptibles d’être réinitialisés par le signal nHReset. En sortie, la bascule 610 fournit, à une entrée de la bascule 612, un signal noté OpsrMask1. La bascule 612 reçoit, sur une entrée (>) de synchronisation, le signal HClk_OpsrMaskClk2. En sortie, la bascule 612 fournit un signal noté OpsrMask. Le signal OpsrMask est transmis à l’entrée d’une porte logique inverseuse 626 et à une entrée d’un bloc 628 de démasquage. La sortie de la porte logique inverseuse 626 est connectée à une entrée (B) d’une porte logique ET 630. Une fois le signal OpsrMask à l’état haut, la machine d’états 624 est placée dans un état inactif, ou état de repos. En entrée, la bascule 608 reçoit, de la part de l’ensemble de bascules 602, des signaux correspondant au code 510 d’opération, à l’adresse 502 et à l’identifiant 504 de banque de mémoire (figure 5). Ces signaux sont, en figure 6, symbolisés par une flèche 631 (Operation Code/Addr/Bk). En sortie, la bascule 608 fournit, à une autre entrée (A) de la porte logique ET 630, des signaux notés ADDR_OP[20:0]/BK_OP/SYSF_OP/CODE_OP[2:0] représentatifs du contenu du registre d’état 500 (figure 5). La porte logique ET 630 fournit, en sortie, un signal noté FOPSR. Bien que cela ne soit pas représenté en figure 6, le signal FOPSR est ensuite transmis au processeur 102 (figure 1) du microcontrôleur 100. En entrée, la machine d’états 624 reçoit, de la part de la bascule 606, un mot noté CurOpsrState[3:0]. Le mot CurOpsrState[3:0] correspond à un état en cours du registre 500 d’état. La machine d’états 624 reçoit en outre une information (flèche 632, Valid Operation) indiquant qu’une exécution d’une opération valide a été demandée. Le signal OpsrMask1, transmis en sortie de la bascule 610, est : mis à l’état haut si le signal nPor est à l’état bas ; mis à l’état haut si le signal nPor est à l’état haut, le signal HClk_OpsrMaskClk1 est à l’état haut et le mot CurOpsrState[3:0] est égal à une valeur notée OPSR_REMASK1 ; et mis à l’état bas si le signal nPor est à l’état haut, le signal HClk_OpsrMaskClk1 est à l’état haut et le mot CurOpsrState[3:0] est égal à une autre valeur notée OPSR_UNMASK1. Dans le circuit 600, une autre machine d’états 634 (FNexStateW) reçoit, de la part de la bascule 604, un mot de 6 bits, noté FCurStateW[5:0]. La machine d’états 634 est, par exemple, une machine d’états permettant de gérer de façon globale les opérations à exécuter dans les puces mémoire flash 104 et 106 du microprocesseur 100. En pratique, on peut prévoir une machine d’états 634 pour les opérations de lecture et une autre machine d’états 634 pour les opérations d’écriture et d’effacement. Le mot FCurStateW[5:0] contient des données représentatives d’une opération, à exécuter dans la puce mémoire flash 104 ou 106, d’écriture, d’effacement, ou de changement de configuration du microprocesseur 100. Le circuit 600 est en particulier configuré pour successivement : recevoir, depuis la machine d’états 634, le mot FCurStateW[5:0] représentatif de l’opération à exécuter ; copier le mot FCurStateW[5:0] dans un domaine soumis au signal de réinitialisation nPor ; renvoyer, dans un autre domaine soumis au signal de réinitialisation nHReset, des données indiquant que la copie du mot FCurStateW[5:0] a été effectuée correctement ; et permettre à la machine d’états 634 d’exécuter l’opération dans la puce mémoire flash 104 ou 106. De manière plus générale, le circuit 600 est configuré pour transmettre, ou copier, des données depuis le domaine soumis au signal de réinitialisation nHReset vers l’autre domaine soumis au signal de réinitialisation nPor. Le circuit 600 a notamment pour fonction d’assurer que cette transmission, ou cette copie, soit effectuée correctement, autrement dit et évitant des problèmes de métastabilité et/ou de copie erronée dans le registre d’état FLASH_OPSR. La figure 7 représente, de façon schématique et sous forme de blocs, un mode de réalisation d’une machine d’états 700 (OPSR FSM) configurée notamment pour générer les signaux OpsrRegClkEn, OpsrMaskClkEn1 et OpsrMaskClkEn2 du circuit 600 de la figure 6. Selon ce mode de réalisation, la machine 700 correspond, de préférence, à la combinaison de la machine d’états 624 et de la bascule 606 du circuit 600 de la figure 6. On suppose que la machine d’état 700 se trouve initialement dans un état 702 (OPSR_IDLE "0000"). L’état 702 correspond, par exemple, à l’état dans lequel est placée la machine d’états 700 suite à la réception du signal de réinitialisation nHReset. Dans l’état 702, tous les bits du mot CurOpsrState[3:0] sont égaux à 0. En d’autres termes, le mot CurOpsrState[3:0] est égal à [0000]. Depuis l’état 702, la machine d’états 700 peut évoluer (flèche 704, Operation valid & OpsrMask=1) vers un autre état 706 (OPSR_UNMASK1 "0011"). La machine d’états 700 passe de l’état 702 à l’état 706 lorsqu’une demande d’opération valide est effectuée et lorsque le signal OpsrMask est à l’état haut. Dans l’état 706 : le mot CurOpsrState[3:0] est égal à [0011] ; le signal OpsrRegClkEn est mis à l’état haut (OpsrRegClkEn=1) ; le signal OpsrMaskClkEn1 est mis à l’état haut (OpsrMaskClkEn1=1) ; et le signal OpsrMaskClkEn2 est mis à l’état bas (OpsrMaskClkEn2=0). Depuis l’état 706, la machine d’états 700 peut évoluer (flèche 708) vers encore un autre état 710 (OPSR_UNMASK2 "0101"). Dans l’état 710 : le mot CurOpsrState[3:0] est égal à [0101] ; le signal OpsrRegClkEn est mis à l’état bas (OpsrRegClkEn=0) ; le signal OpsrMaskClkEn1 est mis à l’état bas (OpsrMaskClkEn1=0) ; et le signal OpsrMaskClkEn2 est mis à l’état haut (OpsrMaskClkEn2=1). Depuis l’état 710, la machine d’états 700 peut évoluer (flèche 712) vers encore un autre état 714 (OPSR_WAIT_REMASK "1001"). Dans l’état 714, le mot CurOpsrState[3:0] est égal à [1001]. Depuis l’état 714, la machine d’états 700 peut évoluer (flèche 716, FCurStateW=NOACC) vers encore un autre état 718 (OPSR_REMASK1 "0110"). Dans l’état 718 : le mot CurOpsrState[3:0] est égal à [0110] ; le signal OpsrRegClkEn est mis à l’état bas (OpsrRegClkEn=0) ; le signal OpsrMaskClkEn1 est mis à l’état haut (OpsrMaskClkEn1=1) ; et le signal OpsrMaskClkEn2 est mis à l’état bas (OpsrMaskClkEn2=0). Selon un mode de mise en œuvre, la machine d’états 700 peut évoluer directement (flèche 720, Operation valid & OpsrMask=0) depuis l’état 702 vers l’état 718. La machine d’états 700 passe de l’état 702 à l’état 718 lorsqu’une demande d’opération valide est effectuée et lorsque le signal OpsrMask est à l’état bas. Depuis l’état 718, la machine d’états 700 peut évoluer (flèche 722) vers encore un autre état 724 (OPSR_REMASK2 "1010"). Dans l’état 724 : le mot CurOpsrState[3:0] est égal à [1010] ; le signal OpsrRegClkEn est mis à l’état bas (OpsrRegClkEn=0) ; le signal OpsrMaskClkEn1 est mis à l’état bas (OpsrMaskClkEn1=0) ; et le signal OpsrMaskClkEn2 est mis à l’état haut (OpsrMaskClkEn2=1). Depuis l’état 724, la machine d’états 700 peut évoluer (flèche 726) vers encore un autre état 728 (OPSR_WAIT_IDLE "1100"). Dans l’état 728, le mot CurOpsrState[3:0] est égal à [1100]. Depuis l’état 728, la machine d’états peut revenir (flèche 730, OpsrMask=1) dans l’état 702. Cette transition depuis l’état 728 vers l’état 702 s’effectue lorsque le signal OpsrMask est mis à l’état haut. La machine d’états 700 est, en particulier, configurée pour : permettre de resynchroniser les éléments du domaine soumis au signal de réinitialisation nHReset et les éléments de l’autre domaine soumis au signal de réinitialisation nPor; et s’assurer que le registre d’état FLASH_OPSR contienne des données cohérentes, c’est-à-dire soit une suite de 0 (si la valeur du masque OpsrMask est égale à 1), soit l’adresse, l’identifiant de banque de mémoire, l’identifiant de puce mémoire et le code d’une opération valide à exécuter (si la valeur du masque OpsrMask est égale à 0). Si le registre d’état FLASH_OPSR n’est pas vide, autrement dit s’il ne contient pas une suite de 0, l’opération peut être exécutée. Dans ce cas, c’est-à-dire lorsque l’opération n’est pas masquée, la machine d’états 700 passe alors de l’état 702 à l’état 718 par la flèche 720. Si le registre d’état FLASH_OPSR est vide, autrement dit s’il contient une suite de 0, et qu’une opération est lancée, la machine d’états 700 passe alors de l’état 702 à l’état 706 par la flèche 704. Une requête suivie d’un acquittement sont alors échangés par l’intermédiaire des états 710 et 714. Cette requête et cet acquittement ne sont pas utiles dans le cas où la machine d’états 700 passe directement de l’état 702 à l’état 718 par la flèche 720 comme exposé ci-dessus. Selon ce mode de réalisation, seules sept valeurs ([0000], [0011], [0101], [1001], [0110], [1010] et [1100]), parmi les seize valeurs théoriquement possibles pour le mot CurOpsrState[3:0], correspondent à des états possibles de la machine d’états 700. Ces sept valeurs sont avantageusement choisies de sorte que chaque passage de l’une à l’autre de ces valeurs s’effectue par une modification de deux bits du mot CurOpsrState[3:0]. Cela permet notamment de se prémunir en cas de dérive due, par exemple, à une inversion inopinée de l’un des bits du mot CurOpsrState[3:0]. La valeur prise par le mot CurOpsrState[3:0] ne correspond alors à aucun état possible de la machine d’états 700, ce qui permet de détecter la dérive. Les sept valeurs pouvant être prises par le mot CurOpsrState[3:0] sont en outre adaptées à détecter une impulsion du signal de réinitialisation nHReset. Dans ce cas, la machine d’états 700 peut être ramenée, depuis un état quelconque, vers l’état 702. On suppose, à titre d’exemple, que la machine d’états 700 se trouve dans l’état 714, le mot CurOpsrState[3:0] étant alors égal à [1001]. Lors de la réinitialisation, le mot CurOpsrState[3:0] prend par exemple la valeur [1000], puis la valeur [0000] correspondant à l’état 702. Si une impulsion du signal d’horloge HClk se produit pendant que le mot CurOpsrState[3:0] vaut [1000] (du fait que les signaux HClk et nHReset sont asynchrones), cette valeur ne sera pas interprétée comme correspondant à un état possible de la machine d’états 700, mais comme correspondant à un état d’attente (idle state). La figure 8 représente, de façon très schématique et sous forme de blocs, un exemple de système 800 comprenant une mémoire flash. Dans l’exemple du système 800, la mémoire flash fait partie, par exemple, du microcontrôleur 100 (µC) comme exposé précédemment en relation avec la figure 1. Le système 800 est, par exemple, un système embarqué, par exemple un drone. Le drone 800 comporte une source d’énergie (bloc 802, BAT), par exemple une batterie. La batterie 802 alimente notamment un ou plusieurs moteurs symbolisés, en figure 8, par un bloc 804 (MOT). La batterie 802 alimente également le microcontrôleur 100, par exemple par l’intermédiaire d’un convertisseur d’énergie (non représenté en figure 8). Le microcontrôleur 100 est, en particulier, utilisé comme contrôleur de vol du drone 800, c'est-à-dire que le microcontrôleur 100 est configuré pour piloter les moteurs 804 du drone 800. Le drone 800 peut aussi inclure divers autres éléments. Ces éléments sont, en figure 8, symbolisés par un bloc 806 (FCT). Les procédés de contrôle d’intégrité exposés ci-dessus en relation avec les figures 4 à 7 permettent notamment de faire en sorte que le contenu de la mémoire flash du microcontrôleur 100, autrement dit le contenu des puces mémoire flash 104 et 106 (non visibles en figure 8), ne soit pas altéré suite à des réinitialisations intervenant lors d’opérations d’écriture ou d’effacement dans cette mémoire. Cela permet par exemple d’éviter d’introduire des erreurs dans des instructions de code du micrologiciel du drone 800, donc de ne pas dégrader le fonctionnement du drone 800. On obtient ainsi un drone 800 plus fiable que si les procédés de contrôle d’intégrité n’étaient pas mis en œuvre. Divers modes de réalisation, modes de mise en œuvre et variantes ont été décrits. La personne du métier comprendra que certaines caractéristiques de ces divers modes de réalisation, modes de mise en œuvre et variantes pourraient être combinées, et d’autres variantes apparaîtront à la personne du métier. En particulier, les modes de mise en œuvre décrits peuvent être transposés à un nombre quelconque de puces mémoire comprenant chacune un nombre quelconque de banques de mémoire. La taille du registre d’état 500 (figure 5) et les informations qu’il contient peuvent notamment être aisément adaptées pour couvrir ces diverses configurations. En outre, ce qui est exposé plus particulièrement en relation avec un exemple d’application à une puce mémoire flash s’applique plus généralement à tout type de mémoire. Enfin, la mise en œuvre pratique des modes de réalisation, modes de mise en œuvre et variantes décrits est à la portée de la personne du métier à partir des indications fonctionnelles données ci-dessus. En particulier, la gestion des états des différents signaux est à la portée de la personne du métier à partir des indications ci-dessus. Procédé de contrôle d’intégrité d’une mémoire (104, 106), comprenant les étapes (406, 408, 412, 414) suivantes : stocker des données représentatives d’une opération à exécuter dans la mémoire ; exécuter l’opération ; et effacer les données une fois l’exécution achevée. Procédé selon la revendication 1, comprenant en outre une étape (422) consistant à lire les données : avant l’exécution d’une autre opération dans la mémoire (104, 106) ; et/ou après une réinitialisation (416) de la mémoire. Procédé selon la revendication 1 ou 2, comprenant en outre une étape consistant à détecter, en fonction des données, si une interruption (416) s’est produite pendant l’exécution (408, 412) de l’opération. Procédé selon la revendication 3, comprenant en outre une étape (424) consistant à répéter l’opération en cas de détection d’une interruption (416). Procédé selon la revendication 4, comprenant en outre une étape (428), préalable à la répétition (424) de l’opération, consistant à effacer entièrement une page de mémoire destinée ensuite à être modifiée par l’opération. Procédé selon l'une quelconque des revendications 1 à 5, dans lequel les données comportent un code d’opération (510) qui est fonction d’une nature d’opération à exécuter dans la mémoire (104, 106). Procédé selon la revendication 6, dans lequel on affecte au code d’opération (510) une valeur choisie parmi une pluralité d’ensembles de valeurs comprenant : un premier ensemble de valeurs, si aucune opération n’est en cours d’exécution dans la mémoire (104, 106) ; un deuxième ensemble de valeurs, si une opération d’écriture est en cours d’exécution dans la mémoire ; un troisième ensemble de valeurs, si une opération d’effacement est en cours d’exécution dans la mémoire ; et un quatrième ensemble de valeurs, en cas d’opération de configuration du microcontrôleur (100), les premier et quatrième ensembles de valeurs étant constitués chacun, de préférence, d’une seule valeur. Procédé selon la revendication 7, dans lequel le deuxième ensemble de valeurs comprend : une première valeur, si une opération d’écriture d’un mot est en cours d’exécution dans la mémoire (104, 106) ; et une deuxième valeur, si une opération d’écriture de plusieurs mots, de préférence huit mots, est en cours d’exécution dans la mémoire. Procédé selon la revendication 7 ou 8, dans lequel le troisième ensemble de valeurs comprend : une troisième valeur, si une opération d’effacement d’une page de mémoire est en cours d’exécution dans la mémoire (104, 106) ; une quatrième valeur, si une opération d’effacement d’une banque de mémoire (118a, 118b, 116a, 116b) est en cours d’exécution dans la mémoire ; et une cinquième valeur, si une opération d’effacement de plusieurs banques de mémoire, de préférence deux banques de mémoire, est en cours d’exécution dans la mémoire. Procédé selon l'une quelconque des revendications 1 à 9, dans lequel les données comportent en outre : une adresse (502) pointant vers une zone mémoire où est exécutée l’opération ; un identifiant (504) de banque de mémoire où est exécutée l’opération ; et un identifiant (506) de puce mémoire où est exécutée l’opération. Procédé selon l'une quelconque des revendications 1 à 10, dans lequel la mémoire (104, 106) fait partie d’un microcontrôleur (100) comportant : un processeur (102) ; et au moins deux puces mémoire (104, 106), de préférence exactement deux puces mémoire, chaque puce mémoire comprenant au moins deux banques de mémoire (118a, 118b, 116a, 116b), de préférence exactement deux banques de mémoire. Procédé selon la revendication 11, dans lequel les données sont stockées dans un registre (500) de l’une des puces mémoire (104, 106). Procédé selon l'une quelconque des revendications 1 à 12, dans lequel, tant que l’exécution d’une opération n’est pas achevée, un système non programmé est configuré pour imposer, sur des plots de connexion de la mémoire, des signaux de commande correspondant à cette opération. Procédé selon l'une quelconque des revendications 1 à 13, dans lequel la mémoire (104, 106) est une mémoire flash. Machine d’états (624, 700) configurée pour mettre en œuvre le procédé selon l'une quelconque des revendications 1 à 14. Système (800) comprenant au moins une mémoire (104, 106) configurée pour mettre en œuvre le procédé selon l'une quelconque des revendications 1 à 14.