FR 3110983 A1 20211203 FR 2005719 A 20200529 Mémoire et son procédé d’écriture La présente description concerne un procédé d’écriture dans une mémoire programmable une seule fois (216) d’un circuit intégré (200), le procédé comprenant : - tenter, par un circuit de commande de mémoire (306) du circuit intégré (200), d’écrire des données dans au moins un premier registre de la mémoire programmable une seule fois (216) ; - vérifier, par le circuit de commande de mémoire (306), si les données ont été correctement écrites dans ledit au moins un premier registre ; et - dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, tenter, par le circuit de commande de mémoire (306), d’écrire les données dans au moins un deuxième registre de la mémoire programmable une seule fois (216). Figure pour l'abrégé : Fig. 3 Mémoire et son procédé d’écriture La présente description concerne de façon générale des dispositifs électroniques et, plus particulièrement, des dispositifs électroniques comprenant des mémoires et des procédés pour écrire dans celles-ci. Dans de nombreuses applications, il peut être souhaitable de prévoir des mémoires qui peuvent être programmées une seule fois afin de configurer ou de personnaliser le fonctionnement d’un dispositif électronique tout au long de sa vie. Certains types de mémoire pour de telles applications peuvent permettre de réécrire des données plusieurs fois dans les mêmes cellules mémoires. Des exemples comprennent des mémoires programmables plusieurs fois (MTP), comme par exemple les mémoires à lecture seule programmables et effaçables électriquement (EEPROM) ou les mémoires flash, et les mémoires programmables quelques fois (FTP). Alors que de telles technologies réduisent l’impact de possibles erreurs ou fautes commises pendant la configuration des dispositifs correspondants, elles ont tendance à être coûteuses en raison de leur mise en œuvre physique et de leurs fonctionnalités pour le test électrique. Un autre type de mémoire est la mémoire appelée "mémoire programmable une seule fois" (OTP), qui présente l’avantage d’avoir un coût inférieur. Toutefois, comme son nom le suggère, une mémoire OTP ne peut être programmée qu’une seule fois, alors que pour certaines applications il serait souhaitable de disposer d’une solution plus flexible. Il existe un besoin d’améliorer la programmation de dispositifs électroniques comprenant des mémoires programmables une seule fois. Un mode de réalisation pallie tout ou partie des inconvénients des dispositifs électroniques connus comprenant des mémoires programmables une seule fois. Un mode de réalisation prévoit un procédé d’écriture dans une mémoire programmable une seule fois d’un circuit intégré, le procédé comprenant : - tenter, par un circuit de commande de mémoire du circuit intégré, d’écrire des données dans au moins un premier registre de la mémoire programmable une seule fois ; - vérifier, par le circuit de commande de mémoire, si les données ont été correctement écrites dans ledit au moins un premier registre ; et - dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, tenter, par le circuit de commande de mémoire, d’écrire les données dans au moins un deuxième registre de la mémoire programmable une seule fois. Selon un mode de réalisation, le procédé comprend en outre, après avoir tenté d’écrire les données dans ledit au moins un deuxième registre, une vérification, par le circuit de commande de mémoire, du fait que les données ont été correctement écrites dans ledit au moins un deuxième registre. Selon un mode de réalisation, les données comprennent un code de vérification, le procédé comprenant en outre un calcul du code de vérification par le circuit de commande de mémoire avant de tenter d’écrire les données dans ledit au moins un premier registre, et la vérification du fait que les données ont été correctement écrites dans ledit au moins un premier registre comprend la vérification, par le circuit de commande de mémoire, d’une valeur du code de vérification écrit dans ledit au moins un premier registre. Selon un mode de réalisation, la vérification du fait que les données ont été correctement écrites dans ledit au moins un premier registre comprend une mesure, pour au moins certaines des cellules mémoires dudit au moins un premier registre, d’une valeur électrique, et une comparaison de chaque valeur électrique mesurée à au moins un seuil. Un mode de réalisation prévoit un procédé de lecture d’une mémoire programmable une seule fois d’un circuit intégré, le procédé comprenant : - vérifier, par un circuit de commande de mémoire, si des données ont été correctement écrites dans au moins un premier registre ; et - dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, lire, par le circuit de commande de mémoire, des données dans au moins un deuxième registre de la mémoire programmable une seule fois. Un mode de réalisation prévoit un circuit intégré comprenant : - une mémoire programmable une seule fois ; et - un circuit de commande de mémoire configuré pour : a. tenter d’écrire des données dans au moins un premier registre de la mémoire programmable une seule fois ; b. vérifier si les données ont été correctement écrites dans ledit au moins un premier registre ; et c. dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, tenter d’écrire les données dans au moins un deuxième registre de la mémoire programmable une seule fois. Un mode de réalisation prévoit un circuit intégré comprenant : - une mémoire programmable une seule fois ; et - un circuit de commande de mémoire configuré pour : a. vérifier si des données ont été correctement écrites dans au moins un premier registre ; et b. dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, lire des données dans au moins un deuxième registre de la mémoire programmable une seule fois. Selon un mode de réalisation, la mémoire programmable une seule fois comprend : - un premier groupe de cellules mémoires protégées en écriture ; et - un deuxième groupe de cellules mémoires autorisées en écriture, comprenant ledit au moins un premier registre et ledit au moins un deuxième registre. Selon un mode de réalisation, le premier groupe de cellules mémoires protégées en écriture et le deuxième groupe de cellules mémoires autorisées en écriture font partie d’une seule matrice mémoire. Selon un mode de réalisation, la puce comprend en outre une interface de communication appropriée pour communiquer avec un système de programmation. Un mode de réalisation prévoit un système de personnalisation de puce, comprenant : - la puce ; et - un système de programmation. Selon un mode de réalisation, le système de programmation comprend : - une alimentation configurée pour fournir une alimentation à la puce ; - un système de commande ; et - une interface de communication appropriée pour communiquer avec la puce. 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 schématiquement, sous forme de blocs, un exemple de système électronique du type auquel s’appliquent les modes de réalisation décrits ; la figure 2 représente schématiquement, sous forme de blocs, un exemple de circuit électronique ; la figure 3 représente schématiquement, sous forme de blocs, un mode de réalisation d’un système électronique ; la figure 4 représente schématiquement, sous forme de blocs, un mode de réalisation d’une mémoire programmable une seule fois ; la figure 5 est un organigramme d’un procédé de programmation de la mémoire programmable une seule fois de la puce de la figure 3 ; la figure 6 est un organigramme représentant plus en détail des étapes du procédé de la figure 5 ; la figure 7 est un organigramme représentant plus en détail l’une des étapes du procédé de la figure 6 ; la figure 8 est un organigramme représentant plus en détail l’une des étapes de l’organigramme de la figure 7 ; et la figure 9 est un organigramme représentant des étapes de démarrage du circuit électronique de la figure 2. 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 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 décrits ont été représentés et sont 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 couplés 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 schématiquement, sous forme de blocs, un exemple de système électronique 100 du type auquel sont par exemple appliqués les modes de réalisation décrits. Dans cet exemple, le système électronique 100 comprend un contrôleur 102 (CONTROLLER). Le contrôleur 102 est, par exemple, un microcontrôleur ou un microprocesseur adapté à contrôler un système de chauffage, de ventilation et de climatisation (HVAC) d’un véhicule à moteur, comme une voiture. Le système électronique 100 comprend en outre n éléments 104-1, 104-2,…, 104-n, n étant par exemple égal ou supérieur à 1, et égal à 4 dans un exemple. Dans l’exemple d’un système HVAC de voiture, les éléments 104-1, 104-2,…, 104-n représentent par exemple chacun un module approprié pour commander un volet (non représenté en figure 1) du système HVAC. Dans cet exemple, chaque module 104-1, 104-2,…, 104-n comprend un circuit intégré 106-1 (IC 1), 106-2 (IC 2), 106-n (IC n). Chacun des circuits intégrés 106-1, 106-2, 106-n est par exemple configuré pour commander un moteur (MOTOR) 108-1, 108-2, 108-n. Les moteurs 108-1, 108-2, 108-n sont par exemple configurés pour ouvrir et fermer le volet auquel ils sont associés. Dans l’exemple de la figure 1, les éléments 104-1, 104-2, 104-n sont tous couplés au contrôleur 102 par l’intermédiaire d’un bus 110. Dans le cas où le système électronique 100 est intégré dans un véhicule à moteur, le bus 110 est typiquement un réseau de région de commande (CAN de l’anglais Control Area Network), une interface de périphériques série (SPI - de l’anglais Serial Peripheral Interface) ou un réseau d’interconnexion locale (LIN - de l’anglais Local Interconnect Network). Le bus 110 permet au contrôleur 102 de communiquer avec le circuit intégré 106-1, 106-2, 106-n de chaque élément 104-1, 104-2, 104-n et/ou de recevoir un retour provenant de chaque circuit intégré. Les circuits intégrés 106-1, 106-2, 106-n fournissent par exemple des fonctions différentes les unes des autres. Lorsque le système électronique 100 est incorporé dans un véhicule à moteur, chaque circuit intégré 106-1, 106-2, 106-n peut être personnalisé, par exemple, afin de lui permettre d’être adressé individuellement en utilisant le bus 110 et/ou de façon à satisfaire les contraintes du volet qu’il est supposé commander. Une telle personnalisation est en général effectuée soit pendant une étape d’assemblage (approche mécatronique) des moteurs 108-1, 108-2, 108-n, soit à la fin d’une chaîne de production (approche standard). Dans ce dernier cas, les circuits intégrés 106-1, 106-2 et 106-n sont par exemple programmés en utilisant un module de commande électronique principal (ECU, non représenté) du véhicule à moteur. La figure 2 représente schématiquement, sous forme de blocs, un exemple de circuit électronique ou de puce 200. Par exemple, un circuit correspondant au circuit 200 est utilisé pour mettre en œuvre chacun des circuits intégrés 106-1, 106-2, 106-n de la figure 1, bien que le circuit 200 puisse avoir d’autres applications. Dans cet exemple, le circuit électronique 200 comprend : un module de commande 202 (UC), par exemple une machine à états, un microprocesseur, un circuit logique programmable, etc. ; une ou plusieurs régions de stockage volatil et/ou non volatil 204 (MEM) pour mémoriser des données ; un ou plusieurs bus de données, d’adresses et/ou de commande 206 entre les différents éléments du circuit 200 ; et une interface d’entrée-sortie 208 (I/O) pour communiquer avec des dispositifs (non illustrés) qui sont externes au circuit électronique 200. Le circuit électronique 200 peut inclure divers autres éléments ou circuits selon l’application, symbolisés en figure 2 par un bloc 210 (FCT). Dans cet exemple, la mémoire 204 du circuit 200 comprend deux régions 212 (MSM SW) et 214 (PSM SW). Chacune des régions 212 et 214 est par exemple adaptée à mémoriser des instructions de logiciel pour mettre en œuvre diverses fonctions. Bien que seulement des régions 212 et 214 soient représentées en figure 2, la mémoire 204 peut comprendre d’autres régions. Le circuit électronique 200 comprend en outre une mémoire programmable une seule fois 216 (OTP&HW). La figure 3 représente schématiquement, sous forme de blocs, un mode de réalisation d’un système électronique 300. Le système électronique 300 comprend le circuit électronique 200 (CHIP). Le circuit 200 correspond par exemple à l’un des circuits intégrés 106-1, 106-2, 106-n du système électronique 100 de la figure 1. Le circuit 200 comprend : une machine à états 304 (MSM) ; un circuit de commande de mémoire 306 (PSM), par exemple une machine à états ; la mémoire programmable une seule fois 216 (OTP&HW) ; et une interface matérielle 310 (HW INTERFACE), qui fait par exemple partie de l’interface d’entrée/sortie 208 (figure 2). La machine à états 304 est, par exemple, une machine à états principale du circuit 200. Comme cela est représenté en figure 3, la machine à états 304 est couplée à la mémoire programmable une seule fois 216 et à l’interface matérielle 310. La machine à états principale 304 applique par exemple des valeurs d’ajustement, qui peuvent être mémorisées à l’intérieur de la mémoire programmable une seule fois 216, et exécute des algorithmes de commande du circuit électronique 200, par exemple afin d’actionner un moteur associé d’une manière souhaitée en réponse à des commandes entrantes. La machine à états 304 exécute par exemple le logiciel qui est mémorisé dans la région 212 de la mémoire 204 (figure 2). La machine à états 306 est, par exemple, une machine à états qui est configurée pour ou dédiée à exécuter des opérations afin de programmer et vérifier des cellules mémoires de la mémoire programmable une seule fois 216. Comme cela est représenté en figure 3, la machine à états 306 est par exemple couplée à la mémoire programmable une seule fois 216 et à l’interface matérielle 310. La machine à états 306 commande par exemple des composants matériels pour programmer et vérifier des cellules programmées de la mémoire programmable une seule fois 216. La deuxième machine à états 306 exécute par exemple le logiciel qui est mémorisé dans la région 214 de la mémoire 204 (figure 2). En variante, les machines à états 304 et 306 peuvent être mises en œuvre à l’aide seulement de composants matériels. Dans un tel cas, les régions 212 et 214 de la mémoire 204 peuvent être omises. La mémoire programmable une seule fois 216 est, par exemple, utilisée pour la personnalisation de fonctions qui sont assurées par le circuit 200. Dans un exemple, la mémoire programmable une seule fois 216 est utilisée pour sélectionner des fonctionnalités spécifiques que le circuit 200 doit réaliser, comme par exemple un type de volet du système HVAC de véhicule (non représenté) qui doit être commandé par le circuit 200. Le système électronique 300 de la figure 3 comprend par exemple un système de programmation 312 (PROGRAMMING SYSTEM), qui est couplé au circuit 200 pendant une phase de programmation de la mémoire programmable une seule fois 216. Par exemple, l’interface matérielle 310 du circuit 200 est couplée à une interface matérielle 314 (HW INTERFACE) du système de programmation 312 par l’intermédiaire d’un bus de communication bidirectionnel 316. Le bus de communication 316 est, par exemple, un bus LIN (de l’anglais Local Interconnect Network - réseau d’interconnexion locale). Le circuit 200 est en outre couplé à une alimentation 318 (POWER SUPPLY) du système de programmation 312, qui est par exemple utilisée pour alimenter le circuit 200 pendant une phase de programmation. Par exemple, l’alimentation 318 du système de programmation 312 est couplée au circuit 200 par l’intermédiaire d’une liaison d’alimentation 320. Dans un mode de réalisation, la liaison d’alimentation 320 fournit une tension en courant continu (DC) d’environ 18 V provenant de l’alimentation 318 aux composants du circuit 200. Le système de programmation 312 comprend en outre un système de commande 322 (CONTROL SYSTEM). Le système de commande 322 est, par exemple, un ordinateur ou une station de travail. Le système de commande 322 pilote par exemple l’interface matérielle 314, qui est utilisée pour la communication entre le système de programmation 312 et le circuit 200. Un avantage du système électronique 300 repose sur le fait que le circuit 200 comprend une mémoire programmable une seule fois 216 qui est configurée pour être programmée, pendant une première phase de programmation, seulement partiellement, en laissant au moins certaines cellules mémoires qui peuvent être programmées à un moment ultérieur. L’utilisation d’une mémoire programmable une seule fois 216 permet de réduire le coût du circuit 200 par rapport, par exemple, à des puces similaires incorporant de la mémoire programmable plusieurs fois (MTP), comme par exemple de la mémoire à lecture seule programmable et effaçable électriquement (EEPROM) ou de la mémoire flash, de la mémoire programmable quelques fois (FTP), etc., au lieu de la mémoire programmable une seule fois 216. Cela permet d’obtenir des économies d’échelle, par exemple dans l’industrie automobile, puisque le fait d’utiliser une grande mémoire programmable une seule fois induit des coûts de production inférieurs à ceux de l’utilisation par exemple d’une petite mémoire MTP. La figure 4 représente schématiquement, sous forme de blocs, un mode de réalisation de la mémoire programmable une seule fois 216 du circuit 200 de la figure 3. Par exemple, la mémoire programmable une seule fois 216 a été soumise à une phase de programmation partielle, pendant laquelle certaines des cellules mémoires ont été programmées et d’autres pas. La mémoire programmable une seule fois 216 comprend, comme cela est représenté en figure 4, une matrice mémoire 402 (OTP), qui est une matrice de cellules mémoires. Selon un mode de réalisation, la matrice 402 de la mémoire programmable une seule fois 216 comprend un groupe 404 de cellules mémoires protégées en écriture et un groupe 406 de cellules mémoires autorisées en écriture. Selon ce mode de réalisation, les cellules mémoires autorisées en écriture du groupe 406 sont appropriées à une personnalisation par un utilisateur du circuit 200. En pratique, comme cela est représenté en figure 4, le groupe 404 de cellules mémoires protégées en écriture et le groupe 406 de cellules mémoires autorisées en écriture peuvent par exemple faire partie d’une seule matrice mémoire. Dans certains modes de réalisation, le groupe 404 de cellules mémoires protégées en écriture est utilisé pour mémoriser des valeurs d’ajustement pour ajuster le fonctionnement du circuit intégré 200, ou d’autres données qui sont par exemple programmées à la suite de la fabrication, et ne peuvent pas être personnalisées plus tard. Dans certains modes de réalisation, comme on va le décrire plus en détail dans la description suivante, le groupe 406 de cellules mémoires autorisées en écriture est utilisé pour mémoriser des données personnalisées. Dans l’exemple où chaque élément 104-1, 104-2 et 104-n (figure 1) comprend une mémoire qui est la même que la mémoire programmable une seule fois 216 de la figure 4, les données mémorisées dans le groupe 406 de cellules autorisées en écriture de chaque élément 104-1, 104-2 et 104-n sont par exemple différentes des données mémorisées par les autres éléments. Par exemple, dans certains modes de réalisation, le groupe 406 de cellules mémoires autorisées en écriture mémorise une adresse de l’élément 104-1, 104-2 et 104-n correspondant sur le bus 110, et/ou des données qui sont spécifiques des caractéristiques du moteur 108-1, 108-2, 108-n (figure 1) à commander par l’élément 104-1, 104-2 et 104-n correspondant. Plus généralement, le groupe 406 de cellules mémoires autorisées en écriture peut mémoriser toute donnée qui peut être personnalisée, par exemple conformément aux besoins d’un fabricant de l’élément 104-1, 104-2, 104-n. La mémoire programmable une seule fois 216 peut en outre comprendre, comme cela est représenté en figure 4, un module matériel 408 (HW). Le module matériel 408 est par exemple couplé à la matrice de cellules mémoires 402. Le module matériel 408 est par exemple configuré pour exécuter des opérations qui sont dédiées à la programmation et la vérification des cellules mémoires de la matrice 402. Par exemple, le module matériel 408 est mis en œuvre par un circuit numérique dédié, comme un ASIC (circuit intégré spécifique d’application), bien que dans des variantes de réalisation les fonctions du module 408 puissent être au moins partiellement mises en œuvre par du logiciel exécuté par un processeur approprié. La mémoire programmable une seule fois 216 comportant le groupe 406 de cellules mémoires autorisées en écriture répond à des demandes d’utilisateurs de produits individualisés, configurables par exemple par un fournisseur d’équipements automobiles ou par un fabricant d’automobiles, tout en étant facilement extensibles et disponibles à faible coût. La figure 5 est un organigramme d’un procédé 500 de programmation de la mémoire programmable une seule fois 216 du circuit 200 de la figure 3. Le procédé de la figure 5 est par exemple mis en œuvre en partie par le système de commande 322 du système de programmation 312 de la figure 3, et en partie par le module matériel 408 de la figure 4. Le procédé de la figure 5 est par exemple un procédé de programmation du groupe 406 de cellules mémoires autorisées en écriture de la mémoire 216. Par exemple, dans le cas du système de la figure 1, le procédé 500 est par exemple utilisé pour programmer la mémoire OTP de chacun des circuits intégrés 106-1, 106-2, 106-n, tour à tour, avant de coupler ces circuits au bus 110. Dans une étape 502 du procédé 500, le circuit 200 (figure 3) est alimenté électriquement en utilisant l’alimentation 318 du système de programmation 312. En pratique, l’alimentation est fournie au circuit 200 par l’intermédiaire de la liaison d’alimentation 320. Dans une étape 504 du procédé 500, à la suite de l’étape 502, le système de programmation 312 établit une communication avec le circuit 200. En pratique, la communication est établie par l’intermédiaire du bus de communication 316 (figure 3). Dans une étape 506 du procédé 500, à la suite de l’étape 504, le circuit 200 et le système de programmation 312 entrent dans un mode de programmation. Le fait d’entrer dans le mode de programmation, comme on va le décrire plus en détail en faisant référence aux figures 6 à 8, autorise par exemple le système de programmation 312 à écrire des données dans le groupe 406 de cellules mémoires autorisées en écriture de la mémoire programmable une seule fois 216 (figure 3). Dans une étape 508 du procédé 500, à la suite de l’étape 506, le système de programmation 312 effectue par exemple une procédure de programmation de la mémoire programmable une seule fois 216. La procédure de programmation vise par exemple à personnaliser le circuit 200 en écrivant des données dans le groupe 406 de cellules mémoires autorisées en écriture de la mémoire programmable une seule fois 216. Dans une étape 510 du procédé 500, la programmation de la mémoire programmable une seule fois 216 qui a été effectuée pendant l’étape 508 est par exemple vérifiée. Par exemple, les données qui ont été précédemment écrites pendant l’étape 508 sont relues et comparées aux données d’origine de façon à vérifier qu’aucune erreur n’a été commise pendant l’étape de programmation 508. On va maintenant décrire les étapes du procédé 500 de la figure 5 plus en détail en faisant référence aux figures 6 à 8. La figure 6 est un organigramme représentant, plus en détail, des étapes du procédé 500 de la figure 5. Dans un but de simplification, la figure 6 représente le procédé 500 appliqué à un cas où seulement un élément d’informations, par exemple une adresse du circuit 200 pour communiquer sur le bus 316 (figure 3), est personnalisé dans la mémoire programmable une seule fois 216. Une telle adresse est appelée "adresse LIN" dans la description suivante, ce qui correspond à un exemple dans lequel le bus de communication 316 est un bus LIN, bien que d’autres types de bus soient possibles. Une première étape en figure 6 est l’étape 502 de la figure 5, déjà décrite précédemment. Le circuit 200 est typiquement alimenté par une alimentation DC 18 V, qui est par exemple compatible avec la technologie BCD (bipolaire-CMOS-DMOS), qui est une technologie combinant une technologie MOS complémentaire bipolaire et une technologie MOS à double diffusion. Lorsqu’il est alimenté, le circuit 200 démarre. Le système de programmation 312 attend ensuite pendant une durée fixe, par exemple 100 ms, avant de démarrer l’étape 504, afin par exemple de permettre l’exécution d’une phase d’initialisation. Pendant la phase initialisation, la machine à états 304 du circuit 200 (figure 3) par exemple démarre, puis lit la mémoire programmable une seule fois 216. Par exemple, la machine à états 304 lit l’adresse LIN, appelée OTP_DEV_ADD, du circuit 200. L’adresse LIN OTP_DEV_ADD du circuit 200 est mémorisée, par exemple, dans le groupe 406 de cellules autorisées en écriture de la mémoire programmable une seule fois 216. En supposant que la mémoire programmable une seule fois 216 est personnalisée pour la première fois, la valeur de l’adresse LIN OTP_DEV_ADD est par exemple égale à zéro. La machine à états principale 304 copie ensuite par exemple la valeur de l’adresse LIN OTP_DEV_ADD dans une variable appelée LIN_DEV_ADD. La variable LIN_DEV_ADD représente une valeur d’adresse LIN utilisée par un gestionnaire de protocole LIN du circuit 200 afin d’identifier son adresse sur l’interface LIN 316. Le gestionnaire de protocole LIN fait, par exemple, partie de l’interface matérielle 310 du circuit 200. Le circuit 200 est ensuite par exemple commuté sur un mode de veille et attend qu’une communication LIN survienne. Dans l’étape 504 du procédé 500, après l’expiration de la durée d’attente, le système de programmation 312 par exemple initialise, dans une étape 602, une communication LIN, qui est une communication utilisant le bus LIN 316. Par exemple, le système de programmation essaye de communiquer à une adresse LIN LIN_COM_ADD, dont la valeur est égale à la valeur de l’adresse LIN_DEV_ADD d’une puce avec laquelle le système de programmation 312 tente de communiquer. Dans cet exemple, le système de programmation 312 essaie de communiquer avec le circuit 200, dont l’adresse LIN_DEV_ADD est égale à zéro. Le système de programmation 312 met ainsi la valeur de LIN_COM_ADD à zéro. L’étape 602 implique aussi par exemple l’envoi, par le système de programmation 312, d’une demande de communication, qui est reçue par le gestionnaire de protocole LIN du circuit 200. Après avoir vérifié que la valeur d’adresse LIN_DEV_ADD est égale à zéro, le circuit 200 accepte par exemple la demande de communication et le gestionnaire de protocole LIN répond ensuite par exemple à la communication LIN. Le système de programmation 312 vérifie ensuite par exemple, dans une étape 604, que le circuit 200 a correctement répondu à la demande de communication. Dans un tel cas (sortie O), dans une étape 606 la communication est considérée comme étant établie et la puce confirme, de cette manière, que son adresse LIN OTP_DEV_ADD n’est pas personnalisée. Autrement, si dans l’étape 604 le circuit 200 ne répond pas correctement (sortie N), le processus est interrompu dans d’une étape 608. L’étape 506 implique par exemple une étape 610, dans laquelle le système de programmation 312 envoie une commande au circuit 200 afin d’entrer dans le mode de programmation. Par exemple, la commande d’entrer dans le mode de programmation est envoyée tout en maintenant l’adresse LIN_COM_ADD égale à zéro afin d’atteindre la mémoire programmable une seule fois 216 du circuit 200. Du côté du circuit 200, la commande d’entrer dans le mode de programmation est par exemple reçue par le gestionnaire de protocole LIN. En pratique, la commande d’entrer dans le mode de programmation peut, par exemple, être envoyée en écrivant un mot clé dans un registre LIN du circuit 200. L’écriture du mot clé dans le registre LIN peut par exemple être répétée deux fois pour des raisons de sécurité. Lorsque la commande d’entrer dans le mode de programmation a été acceptée par le circuit 200, on entre dans le mode de programmation et le gestionnaire de protocole LIN accuse réception pour indiquer que la commande a été correctement reçue et exécutée. Dans une étape 612, le système de programmation attend ensuite par exemple que le circuit 200 envoie un accusé de réception. Si, dans l’étape 612, le circuit 200 envoie un accusé de réception (sortie O), dans une étape 614 une commande, qui par exemple comprend des données à écrire, est alors par exemple envoyée, par le système de programmation 312, au circuit 200. Autrement, si dans l’étape 612 le circuit 200 n’accuse pas réception de la commande (sortie N), le processus est par exemple interrompu dans une étape 616. La commande vise par exemple à écrire une valeur NEW_DEV_ADD dans le registre LIN du circuit 200. Dans certains modes de réalisation, la commande est reçue par le circuit 200, qui vérifie ensuite que l’adresse LIN_DEV_ADD est égale à zéro et que le mode de programmation est actif. Dans un tel cas, la commande est acceptée par le circuit 200, la valeur de l’adresse NEW_DEV_ADD est par exemple écrite dans le registre LIN et le gestionnaire de protocole LIN envoie par exemple un accusé de réception au système de programmation 312. Sinon, par exemple si le mode de programmation n’est pas actif, le gestionnaire de protocole LIN répond par exemple par un code d’erreur. Le système de programmation 312 vérifie ensuite par exemple, dans une étape 618, que le circuit 200 a accusé réception de la commande. Si oui (sortie O), le circuit 200 est considéré comme prêt pour exécuter la procédure de programmation 508. Autrement (sortie N), le processus est par exemple interrompu dans une étape 620. Dans l’étape 508 du procédé 500, le système de programmation 312 envoie par exemple, dans une étape 622, une commande au circuit 200 afin de démarrer la procédure de programmation. Par exemple, la commande de démarrer la procédure de programmation est reçue par le gestionnaire de protocole LIN du circuit 200. En pratique, la commande est par exemple envoyée en inversant un bit du registre LIN, comme un bit qui peut être écrit seulement dans le mode de programmation. Le circuit 200 vérifie ensuite par exemple que l’adresse LIN_DEV_ADD est égale à zéro, que le mode de programmation est actif et que la valeur de l’adresse NEW_DEV_ADD est différente de zéro. Dans un tel cas, la commande de démarrer la procédure de programmation est par exemple acceptée et le circuit 200 envoie par exemple un accusé de réception au système de programmation 312. Sinon, par exemple si le mode de programmation n’est pas actif ou si NEW_DEV_ADD est égal à zéro, le gestionnaire de protocole LIN répond au système de programmation 312 par un code d’erreur. Le système de programmation 312 vérifie ensuite par exemple, dans une étape 624, que le circuit 200 a accusé réception de la commande de démarrage de la procédure de programmation. Si oui, (sortie O), le circuit 200 est considéré comme prêt à effectuer la programmation. Sinon (sortie N), le processus est par exemple interrompu dans une étape 626. En supposant que le circuit 200 est prêt à démarrer la procédure de programmation, la programmation de la mémoire programmable une seule fois 216 est ensuite par exemple effectuée dans une étape 628 en utilisant la machine à états 306 de la figure 3. On va décrire plus en détail un exemple de l’étape de programmation 628 en faisant référence aux figures 7 et 8. Le système de programmation 312 attend par exemple ensuite pendant une durée fixe, par exemple 100 ms, avant de démarrer l’étape 510. Une telle durée permet par exemple d’effectuer la programmation de la mémoire programmable une seule fois 216 du circuit 200 pendant la phase de programmation 508. Une fois que la durée d’attente a expiré, le système de programmation 312 envoie par exemple, dans une étape 630, une commande au circuit 200 afin de vérifier que la nouvelle adresse NEW_DEV_ADD a été correctement programmée dans la mémoire programmable une seule fois 216. Par exemple, la commande est reçue par le gestionnaire de protocole LIN et le circuit 200 vérifie que la valeur de l’adresse LIN_DEV_ADD est égale à la valeur de l’adresse NEW_DEV_ADD. Si c’est le cas, la commande est par exemple acceptée et le gestionnaire de protocole LIN envoie par exemple un accusé de réception au système de programmation 312. Le système de programmation 312 vérifie ensuite par exemple, dans une étape 632, que le circuit 200 a accusé réception de la commande pour vérifier le résultat de la procédure de programmation. Si c’est le cas (sortie O), dans une étape 634 le circuit 200 est considéré comme ayant été programmé correctement. Si la procédure de programmation se termine normalement, c’est-à-dire si l’adresse NEW_DEV_ADD est considérée comme ayant été écrite correctement dans la mémoire 216, dans une étape 636, le procédé 500 est considéré comme ayant réussi. Sinon, si dans l’étape 632 on détermine que le circuit 200 n’a pas accusé réception de la commande (sortie N), le processus est par exemple interrompu dans une étape 638. La figure 7 est un organigramme illustrant, plus en détail, l’une des étapes du procédé 500 de la figure 6. Plus précisément, la figure 7 représente l’étape 628 du procédé 500, dans laquelle la programmation de la mémoire programmable une seule fois 216 est effectuée. Au début de l’étape 628, dans une étape 702 de la figure 7, la machine à états 306 (figure 3) du circuit 200 est démarrée. Un compteur k est ensuite mis à la valeur 1 dans une étape 704. Le compteur k est utilisé pour un balayage à travers des registres de la mémoire programmable une seule fois 216. Une procédure est ensuite exécutée dans une étape 706 de manière à lire et vérifier un contenu du registre de rang k de la mémoire programmable une seule fois 216. L’exécution de la procédure de lecture et de vérification de l’étape 706 va être décrite plus en détail ci-après en faisant référence à la figure 8. Avec k égal à 1 à ce stade, le contenu du premier registre de la mémoire 216 est ainsi lu et vérifié. La mémoire programmable une seule fois 216 a par exemple un format de registres comprenant : une première région OTP_DATA1, qui est utilisée pour mémoriser des données, comme l’adresse OTP_DEV_ADD dans le présent exemple, qui vise à modifier cette adresse ; et une deuxième région OTP_DATA2, qui est utilisée pour mémoriser un code de vérification, par exemple un code de vérification de redondance cyclique (CRC), des données. En effet, dans le présent exemple, la région OTP_DATA2 mémorise le CRC de l’adresse OTP_DEV_ADD. Dans le cas où l’exécution de la procédure de lecture et de vérification dans l’étape 706 est réussie, la valeur de la première région OTP_DATA1 du premier registre est ensuite testée dans une étape 708. En supposant que la valeur de la première région OTP_DATA1 du premier registre et la valeur de la deuxième région OTP_DATA2 du premier registre sont toutes deux égales à zéro à ce stade (sortie O), on considère donc que le premier registre est vierge. Sinon, si dans l’étape 708 on trouve que la première région OTP_DATA1 et/ou la deuxième région OTP_DATA2 ne sont pas égales à zéro (sortie N), le compteur k est incrémenté dans une étape 710. On vérifie ensuite, dans une étape 712, si la valeur du compteur k est égale à trois ou plus. Avec k égal à deux à ce stade de l’organigramme, k n’est pas encore égal à trois, et la mémoire 216 répète les étapes 706 et 708. Cela donne l’opportunité de programmer le deuxième registre si le premier registre initialement n’était pas vierge. Si de nouveau, dans l’étape 708, la première région OTP_DATA1 et/ou la deuxième région OTP_DATA2 du deuxième registre ne sont pas égales à zéro (sortie N), le compteur k est alors incrémenté de nouveau dans l’étape 710. On vérifie ensuite de nouveau dans l’étape 712 si la valeur du compteur k est égale à trois ou plus. Avec k égal à trois à ce stade de l’organigramme, dans une étape 714 l’adresse LIN_DEV_ADD est mise à zéro et la programmation se termine. Toutefois, en supposant que, dans l’étape 708, la première région OTP_DATA1 et la deuxième région OTP_DATA2 du premier registre sont toutes deux égales à zéro (sortie O), pendant une autre étape 716 : le code CRC de la valeur de l’adresse NEW_DEV_ADD est calculé ; la valeur de l’adresse NEW_DEV_ADD est concaténée avec son code CRC ; et le résultat de la concaténation est mémorisé dans un registre appelé LIN_OTPWRITE. On vérifie ensuite par exemple, dans une étape 718, que la tension qui est fournie au circuit 200 est à un certain niveau, égal à 18 V dans cet exemple. Dans un tel cas (sortie O), le registre OTP de rang k (le premier registre OTP, à ce stade) et ensuite brûlé dans une étape 720 avec la valeur de registre LIN_OTPWRITE. Sinon (sortie N), l’adresse LIN_DEV_ADD est mise à zéro et la programmation se termine dans une étape 714. En supposant que le premier registre OTP contient maintenant la valeur LIN_OTPWRITE après avoir réalisé l’étape 720, une procédure de lecture et de vérification est de nouveau effectuée, dans une étape 722, sur le contenu du premier registre OTP. La procédure qui est réalisée pendant l’étape 722 est par exemple identique à celle qui est réalisée pendant l’étape 706. On vérifie ensuite, dans une étape 724, que l’exécution de la procédure de lecture et de vérification dans l’étape 722 a réussi et que la valeur de la première région OTP_DATA1 du premier registre est différente de zéro. Dans un tel cas (sortie O), l’adresse LIN_DEV_ADD est mise égale à la première région OTP_DATA1 du premier registre et la programmation se termine dans une étape 726. Les données qui ont été mémorisées dans le premier registre sont ainsi considérées comme valides. Sinon, si dans l’étape 724 on trouve que la procédure de lecture et de vérification de l’étape 722 n’a pas réussi (sortie N), les données qui ont été mémorisées dans le premier registre sont considérées comme altérées. Le compteur k est ensuite incrémenté dans une étape 710 de façon à donner l’opportunité de programmer le deuxième registre avec une valeur correcte. Bien que l’organigramme de la figure 7 représente un procédé qui permet de réaliser successivement deux tentatives de programmation des mêmes données, il sera clair pour la personne du métier que ce procédé pourrait être adapté pour permettre un nombre quelconque de tentatives supérieur à deux. La figure 8 est un organigramme illustrant, plus en détail, l’étape 706 de la figure 7. Dans un but de simplicité, on supposera que k est égal à un à ce stade. La procédure de lecture et de vérification 706 commence en exécutant, dans une étape 802, des vérifications de lecture physique sur le registre OTP de rang k (le premier registre OTP, dans cet exemple). En pratique, les vérifications de lecture physique peuvent consister à vérifier la lecture correcte des valeurs électriques, par exemple des valeurs de résistance, d’au moins certaines des cellules mémoires programmables une seule fois en utilisant des seuils plus stricts que ceux appliqués pendant les opérations de lecture normales de l’OTP. Par exemple, les plages de résistance acceptables pour chaque état programmé sont par exemple plus étroites que la plage de résistance qui va être lue en tant que chaque état pendant une opération de lecture normale. Cette vérification est par exemple réalisée en utilisant la machine à états 306. On vérifie ensuite dans une étape 804 si les vérifications de lecture physique sont réussies. Si oui (sortie O), le premier registre OTP est lu dans une étape 806 de façon à obtenir le contenu de sa première région OTP_DATA1 et le contenu de sa deuxième région OTP_DATA2. Sinon (sortie N), les lectures physiques et les vérifications se terminent dans une étape 808 et les données mémorisées dans le premier registre OTP sont considérées comme altérées. En supposant que les vérifications des lectures physiques ont été réussies et que la première région OTP_DATA1 et la deuxième région OTP_DATA2 du premier registre ont été extraites, on vérifie ensuite dans une étape 810 que ces deux régions sont toutes les deux égales à zéro. Dans un tel cas (sortie O), la procédure de lecture et de vérification se termine avec succès au niveau d’une étape 812 et les données qui sont mémorisées dans la première région OTP_DATA1 du premier registre sont considérées comme valides. Sinon (sortie N), le code CRC des données qui sont mémorisées dans la première région OTP_DATA1 est calculé dans une étape 814. Le code CRC calculé est ensuite comparé, dans une étape 816, aux données qui sont mémorisées dans la deuxième région OTP_DATA2. Si le code CRC concorde avec les données mémorisées dans la deuxième région OTP_DATA2 (sortie O), la procédure se termine avec succès à l’étape 812. Sinon (sortie N), les données mémorisées dans le premier registre OTP sont considérées comme altérées au niveau d’une étape 808 et la procédure se termine. En d’autres termes, l’étape 706 comprend une vérification matérielle, par une comparaison d’une valeur électrique des cellules OTP à des seuils, et une vérification logique des données qui ont été écrites précédemment dans les cellules OTP. Bien que l’organigramme décrit précédemment en relation avec la figure 8 illustre, à titre d’exemple, l’étape 706 de la figure 7, la personne du métier sera capable d’adapter l’organigramme de la figure 8 afin de réaliser l’étape 722 de la figure 7. Un avantage de la mémoire programmable une seule fois 216 et du procédé 500 repose sur le fait qu’ils permettent qu’une région d’une mémoire programmable une seule fois soit programmée à un stade ultérieur par rapport à une autre région qui a déjà été programmée. Cela permet, par exemple, d’utiliser une mémoire programmable une seule fois à relativement faible coût au lieu d’une mémoire programmable quelques fois 216. La figure 9 est un organigramme 900 illustrant des étapes de démarrage du circuit 200 de la figure 2. Ces opérations sont par exemple réalisées à chaque fois que le circuit 200 est mis sous tension. L’étape de démarrage commence, dans une étape 902, par la fourniture d’une alimentation à la puce électronique 200. Cela provoque le démarrage, dans une étape 904, de la machine à états principale 304 de la puce 200. Dans cet exemple, la procédure de lecture et de vérification 706 précédemment décrite en référence à la figure 8 est ensuite par exemple appliquée au registre OTP de rang k dans une étape 906, avec k commençant de nouveau à 1. En exécutant la procédure de lecture et de vérification 706, on vérifie, dans une étape 908, si les données mémorisées dans le registre de rang k sont valides. Dans un tel cas (sortie O), les données mémorisées dans le registre de rang k sont utilisées pour d’autres étapes 910. Sinon, si les données mémorisées dans le registre de rang k sont considérées, au vu de la vérification matérielle et/ou de la vérification logique, comme étant altérées (sortie N), la procédure de lecture et de vérification 706 est appliquée au registre OTP de rang k+1 dans une étape 912. En exécutant la procédure de lecture et de vérification 706, on vérifie, dans une étape 914, si les données mémorisées dans le registre de rang k+1 sont valides. Dans un tel cas (sortie O), les données mémorisées dans le registre de rang k+1 sont utilisées pour d’autres étapes 916. Sinon, si les données mémorisées dans le registre de rang k+1 sont considérées comme altérées (sortie N), une erreur 918 survient par exemple. L’exemple de la figure 9 est basé sur un exemple dans lequel deux tentatives d’écriture ont été autorisées pendant la phase de programmation OTP. Toutefois, si plus que deux tentatives étaient autorisées, le nombre de registres à vérifier pourrait être supérieur. Divers modes de réalisation et variantes ont été décrits. La personne du métier comprendra que certaines caractéristiques de ces divers modes de réalisation et variantes pourraient être combinées, et d’autres variantes apparaitront à la personne du métier. En particulier, la mémoire programmable une seule fois 216 peut comprendre plus qu’un seul groupe 404 de cellules mémoires protégées en écriture et plus qu’un seul groupe 406 de cellules mémoires autorisées en écriture. En outre, on a décrit des exemples dans lesquels une première tentative peut être faite pour programmer un registre d’un OTP, et si cette tentative échoue, une deuxième tentative peut être faite pour programmer un autre registre. Ces registres peuvent être de taille quelconque. En outre, il serait aussi possible d’appliquer ce procédé à des blocs de registres, plutôt qu’à des registres uniques. En d’autres termes, une première tentative peut être faite pour programmer un bloc de r registres d’un OTP, et si cette tentative échoue, une deuxième tentative peut être faite pour programmer un autre bloc de r registres de l’OTP, avec r égal à 2 ou plus. Enfin, la mise en œuvre pratique des modes de réalisation et variantes décrits est à la portée de la personne du métier à partir des indications fonctionnelles données ci-dessus. En particulier, les machines à états 304 et 306 peuvent, en pratique, être mises en œuvre par du matériel seulement, par du logiciel seulement, ou par un mélange de matériel et de logiciel. Procédé d’écriture dans une mémoire programmable une seule fois (216) d’un circuit intégré (200), le procédé comprenant : - tenter, par un circuit de commande de mémoire (306) du circuit intégré (200), d’écrire des données dans au moins un premier registre de la mémoire programmable une seule fois (216) ; - vérifier, par le circuit de commande de mémoire (306), si les données ont été correctement écrites dans ledit au moins un premier registre ; et - dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, tenter, par le circuit de commande de mémoire (306), d’écrire les données dans au moins un deuxième registre de la mémoire programmable une seule fois (216). Procédé selon la revendication 1, comprenant en outre, après avoir tenté d’écrire les données dans ledit au moins un deuxième registre, une vérification, par le circuit de commande de mémoire (306), du fait que les données ont été correctement écrites dans ledit au moins un deuxième registre. Procédé selon la revendication 1 ou 2, dans lequel les données comprennent un code de vérification, le procédé comprenant en outre un calcul du code de vérification par le circuit de commande de mémoire (306) avant de tenter d’écrire les données dans ledit au moins un premier registre, et dans lequel la vérification du fait que les données ont été correctement écrites dans ledit au moins un premier registre comprend la vérification, par le circuit de commande de mémoire, d’une valeur du code de vérification écrit dans ledit au moins un premier registre. Procédé selon l’une quelconque des revendications 1 à 3, dans lequel la vérification du fait que les données ont été correctement écrites dans ledit au moins un premier registre comprend une mesure, pour au moins certaines des cellules mémoires dudit au moins un premier registre, d’une valeur électrique, et une comparaison de chaque valeur électrique mesurée à au moins un seuil. Procédé de lecture d’une mémoire programmable une seule fois (216) d’un circuit intégré (200), le procédé comprenant : - vérifier, par un circuit de commande de mémoire (306), si des données ont été correctement écrites dans au moins un premier registre ; et - dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, lire, par le circuit de commande de mémoire (306), des données dans au moins un deuxième registre de la mémoire programmable une seule fois (216). Circuit intégré (200) comprenant : - une mémoire programmable une seule fois (216) ; et - un circuit de commande de mémoire (306) configuré pour : a. tenter d’écrire des données dans au moins un premier registre de la mémoire programmable une seule fois (216) ; b. vérifier si les données ont été correctement écrites dans ledit au moins un premier registre ; et c. dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, tenter d’écrire les données dans au moins un deuxième registre de la mémoire programmable une seule fois (216). Circuit intégré (200) comprenant : - une mémoire programmable une seule fois (216) ; et - un circuit de commande de mémoire (306) configuré pour : a. vérifier si des données ont été correctement écrites dans au moins un premier registre ; et b. dans le cas où les données n’ont pas été correctement écrites dans ledit au moins un premier registre, lire des données dans au moins un deuxième registre de la mémoire programmable une seule fois (216). Puce de circuit intégré selon la revendication 6 ou 7, dans laquelle la mémoire programmable une seule fois (216) comprend : - un premier groupe (404) de cellules mémoires protégées en écriture ; et - un deuxième groupe (406) de cellules mémoires autorisées en écriture, comprenant ledit au moins un premier registre et ledit au moins un deuxième registre. Puce selon la revendication 8, dans laquelle le premier groupe (404) de cellules mémoires protégées en écriture et le deuxième groupe (406) de cellules mémoires autorisées en écriture font partie d’une seule matrice mémoire (402). Puce selon la revendication 8 ou 9, comprenant en outre une interface de communication (310) appropriée pour communiquer avec un système de programmation (312). Système de personnalisation de puce (300), comprenant : - la puce (200) selon l’une quelconque des revendications 8 à 10 ; et - un système de programmation (312). Système selon la revendication 11, dans lequel le système de programmation (312) comprend : - une alimentation (318) configurée pour fournir une alimentation à la puce (200) ; - un système de commande (322) ; et - une interface de communication (314) appropriée pour communiquer avec la puce (200).