Brevet FR2872603A1 — publié le 20060106

La présente description concerne des systèmes intégrés, et, plus particulièrement, des procédés et dispositifs pour exécuter le code d'amorçage de systèmes intégrés. Un système intégré est généralement fabriqué dans un but spécifié. Un tel système comprend de façon caractéristique une unité centrale (UC), une mémoire, et un logiciel comprenant un "code d'amorçage". Le code d'amorçage initialise les registres de mémoire et d'unité centrale, et commande le fonctionnement initial de l'unité centrale. En général, le code d'amorçage peut être écrit dans une mémoire morte (ROM) lorsque le système est fabriqué, et fourni au client avec le système. Malheureusement, si l'on souhaite effectuer un petit changement dans le code d'amorçage, la mémoire morte doit être remplacée, parce que la mémoire morte ne peut pas être modifiée. De plus, certains clients peuvent souhaiter utiliser leur propre code d'amorçage pour initialiser le système, afin de résoudre des problèmes de sécurité. Récemment, le code d'amorçage a été plus fréquemment mémorisé dans une mémoire rémanente (non-volatile memory ou NVM), telle qu'une mémoire morte programmable effaçable électriquement (EEPROM) et/ou une mémoire flash, au lieu d'une mémoire morte. Bien que cette utilisation d'une mémoire rémanente puisse permettre à des clients de personnaliser le code d'amorçage, elle présente plusieurs problèmes inhérents. Par exemple, une erreur durant une reprogrammation de mémoire flash, lors de laquelle on souhaite écraser le code d'amorçage original avec le code d'amorçage personnalisé, peut faire que le système intégré devienne impossible à amorcer. La figure 1 montre un dispositif classique pour exécuter le code d'amorçage d'un système intégré, qui est indiqué globalement par le numéro de référence 100. Le dispositif 100 comprend une unité centrale 110, un décodeur d'adresse 120 connecté à l'unité centrale, et une mémoire flash 130 connectée au décodeur. Si un fabricant mémorise le code d'amorçage et les fonctions de la bibliothèque de base dans une mémoire flash telle que la mémoire 130, le système est initialement amorcé par le code d'amorçage fourni par le fabricant. Après l'amorçage initial, un client peut effacer tout ou partie du code d'amorçage et réécrire ou reprogrammer un nouveau code d'amorçage, par exemple en utilisant des fonctions de bibliothèque de base fournies par le fabricant. Ensuite, le système devrait normalement être capable d'effectuer un amorçage avec le nouveau code d'amorçage. Malheureusement, durant le processus d'effacement de l'ancien code d'amorçage, la mémoire flash est susceptible d'être endommagée. Lorsque ceci se produit, le système peut ne pas fonctionner correctement, ou peut ne pas du tout effectuer d'amorçage, du fait de la destruction du code d'amorçage. Un exemple de système de mémoire comprend un décodeur de mode, une première mémoire en communication de signaux avec le décodeur de mode, une deuxième mémoire en communication de signaux ave le décodeur de mode, et un générateur de mode en communication de signaux avec le décodeur de mode pour générer un signal indicatif de la sélection de l'une des première et deuxième mémoires comme mémoire d'amorçage. Selon une caractéristique particulière, la première mémoire est une mémoire non effaçable. Selon une caractéristique particulière, la deuxième mémoire est une mémoire effaçable et programmable. Selon une caractéristique particulière, au moins l'une des première et deuxième mémoires comprend un décodeur d'adresse interne. Selon une caractéristique particulière, le générateur de mode génère un signal indicatif de l'interdiction 35 d'accès à la première mémoire. Selon une caractéristique particulière, le générateur de mode comprend une pluralité d'unités de mémoire rémanente pour mémoriser des modes dont au moins l'un est indicatif de la sélection d'au moins l'une des première et 5 deuxième mémoires. Selon une caractéristique particulière, le générateur de mode comprend de plus au moins un mode de verrouillage. Selon une caractéristique particulière, le mode de verrouillage au nombre d'au moins un comprend un mode de verrouillage imposant que le système de mémoire effectue ensuite l'amorçage uniquement à l'aide de la mémoire actuellement sélectionnée. En variante, le mode de verrouillage au nombre d'au moins un comprend un mode de verrouillage pour empêcher le système de mémoire de changer un mode indicatif de l'interdiction d'accès à la première mémoire. Selon une caractéristique particulière, le générateur de mode réagit à une pluralité de modes de fonctionnement, l'un des modes de fonctionnement empêchant les modes de verrouillage d'être déverrouillés. Selon une caractéristique particulière, le générateur de mode comprend de plus des circuits de décodage de lignes de mots réagissant à un signal indicatif d'un mode de verrouillage, à un signal indicatif d'une instruction de programme et à un signal indicatif d'une instruction d'effacement pour empêcher le changement d'un mode autre qu'un mode de verrouillage. Selon une caractéristique particulière, la première mémoire est une mémoire morte à masque et la deuxième 30 mémoire est une mémoire flash. Selon une caractéristique particulière, la première mémoire comprend des fonctions de code d'amorçage et de bibliothèque. Selon une caractéristique particulière, au moins 35 l'une de la pluralité d'unités de mémoire rémanente sert à mémoriser un mode indicatif d'une interdiction d'accès à la première mémoire. Selon une caractéristique particulière, le mode indicatif de la sélection d'au moins l'une des première et deuxième mémoires sélectionne initialement la première mémoire, et le mode indicatif de l'interdiction d'accès à la première mémoire permet initialement l'accès à la première mémoire. Dans un mode particulier de réalisation, le décodeur 10 de mode comprend: une entrée d'instruction/de données pour recevoir un signal d'instruction/de données; et une partie de décodage d'instruction/de données pour sélectionner l'une des première et deuxième mémoires en 15 réponse au signal d'instruction/de données reçu. Selon une caractéristique particulière, le décodeur de mode comprend de plus une entrée d'adresse d'amorçage pour recevoir un signal d'adresse d'amorçage indicatif de l'emplacement ou non d'une adresse de mémoire requise à l'intérieur d'une plage d'adresses d'amorçage, et la partie de décodage d'instruction/de données réagit au signal d'adresse d'amorçage. Selon une caractéristique particulière, le décodeur de mode comprend de plus au moins l'une d'une sortie pour un signal indicatif de la sélection de la première mémoire et d'une sortie pour un signal indicatif de la sélection de la deuxième mémoire. En variante, le décodeur de mode comprend de plus: une entrée d'adresse pour recevoir au moins un bit 30 d'une adresse de mémoire requise; une sortie pour délivrer un signal indicatif de la sélection de la première mémoire; et une sortie pour délivrer un signal indicatif de la sélection de la deuxième mémoire, et le décodeur de mode réagit au bit reçu au nombre d'au moins un de l'adresse de mémoire requise. En variante, le décodeur de mode comprend de plus une entrée de mémoire d'amorçage pour recevoir un signal indicatif d'un mode de mémoire d'amorçage, et la partie de décodage d'instruction/de données réagit au mode de mémoire 5 d'amorçage. En variante, le décodeur de mode comprend de plus une entrée de mode caché pour recevoir un signal indicatif d'une mémoire qui est cachée, et la partie de décodage d'instruction/de données réagit au mode caché. L'invention propose également un microdispositif de commande à une seule puce, comprenant un système de mémoire tel que brièvement décrit cidessus. L'invention propose également un système intégré, comprenant un système de mémoire tel que brièvement décrit 15 ci-dessus. Dans un mode particulier de réalisation, le système intégré comprend de plus au moins un processeur en communication de signaux avec le décodeur pour accéder à des adresses de mémoire uniquement en fonction du générateur de mode. Selon une caractéristique particulière du système intégré, le générateur de mode réagit à un signal de remise à zéro destiné à stabiliser le générateur de mode avant que le processeur ne lise un mode du générateur de mode. Un procédé correspondant pour exécuter un code d'amorçage mémorisé dans le système de mémoire comprend l'amorçage initial du système à partir de la première mémoire, la programmation de la deuxième mémoire pour un amorçage ultérieur, la programmation du générateur de mode pour amorcer ensuite le système à partir de la deuxième mémoire, et, ensuite, l'amorçage du système à partir de la deuxième mémoire. Dans un mode particulier de réalisation, le procédé comprend de plus les étapes consistant à : stabiliser le générateur de mode; lire un mode du générateur de mode; et accéder à des adresses de mémoire uniquement en fonction du générateur de mode. En variante, le procédé comprend de plus la programmation du générateur de mode pour verrouiller le système en amorçage à partir de la deuxième mémoire. En variante, le procédé comprend de plus la programmation du générateur de mode pour interdire ensuite l'accès à la première mémoire. En variante, le procédé comprend de plus la programmation du générateur de mode pour verrouiller le système en interdiction de changements vers un mode indicatif de l'autorisation ou de l'interdiction d'accès à la première mémoire. Selon une caractéristique particulière, le système est protégé contre toute porte dérobée de logiciel qui pourrait par ailleurs être incorporée dans la première mémoire. En variante, le procédé comprend de plus les étapes consistant à : programmer le générateur de mode pour amorcer ensuite le système à partir de la première mémoire; reprogrammer la deuxième mémoire pour un amorçage ultérieur; programmer le générateur de mode pour amorcer ensuite 25 le système à partir de la deuxième mémoire reprogrammée; et amorcer ensuite le système à partir de la deuxième mémoire reprogrammée. En variante, le procédé comprend de plus les étapes 30 consistant à : reprogrammer le générateur de mode pour réamorcer ensuite le système à partir de la première mémoire; et réamorcer ensuite le système à partir de la première mémoire. Ces éléments et caractéristiques de la présente invention, ainsi que d'autres, apparaîtront de façon évidente à partir de la description qui suit d'exemples de formes de réalisation, celle-ci devant être lue en relation avec les dessins joints. La présente description enseigne un procédé et un dispositif pour exécuter le code d'amorçage de systèmes 5 intégrés selon les exemples de figures qui suivent, dans lesquels: la figure 1 est une représentation schématique montrant un dispositif classique pour exécuter le code d'amorçage d'un système intégré ; la figure 2 est une représentation schématique montrant un dispositif pour exécuter le code d'amorçage d'un système intégré selon un exemple de forme de réalisation de la présente invention; la figure 3 est un schéma logique montrant un exemple 15 de forme de réalisation du décodeur de mode de la figure 2; la figure 4 est un graphique de cartes de mémoire montrant la configuration de mémoire des mémoires morte (ROM) et flash de la figure 2 dans des conditions 20 particulières; la figure 5 est une représentation schématique montrant un dispositif pour exécuter le code d'amorçage d'un système intégré selon un autre exemple de forme de réalisation de la présente invention; la figure 6 est un organigramme montrant un procédé pour exécuter le code d'amorçage d'un système intégré selon un exemple de forme de réalisation de la présente invention; la figure 7 est un schéma logique montrant un autre 30 exemple de forme de réalisation du décodeur de mode de la figure 2; et la figure 8 est une représentation schématique montrant un dispositif pour exécuter le code d'amorçage d'un système intégré selon un autre exemple de forme de réalisation de la présente invention. Des formes de réalisation de la présente invention sont initialement amorcées à l'aide du code d'amorçage mémorisé dans une première mémoire, telle qu'une mémoire morte (ROM), lorsque le système est fourni à un client. Après l'amorçage initial, le client peut écrire le code spécifique du client dans une deuxième mémoire, telle qu'une mémoire flash. Ensuite, le système peut être amorcé à l'aide du code d'amorçage du client mémorisé dans la deuxième mémoire. Même si une détérioration de la deuxième mémoire détruit ou efface le code d'amorçage, le système peut être amorcé à l'aide du code d'amorçage qui est toujours mémorisé dans la première mémoire. Des exemples de formes de réalisation proposent différentes options pour commander le mode d'amorçage entre une mémoire morte et une mémoire flash, par exemple. Comme représenté en figure 2, un exemple de dispositif pour exécuter le code d'amorçage d'un système intégré est indiqué globalement par le numéro de référence 200. Le dispositif 200 comprend une unité centrale (UC) 210 pour recevoir un signal de remise à zéro interne et délivrer un signal d'adresse et un signal indiquant si l'adresse devrait être traitée comme une adresse d'instruction ou une adresse de données, un décodeur de mode 220 connecté à l'unité centrale pour délivrer un signal d'adresse ayant subi une translation et un signal de sélection de mémoire morte ou un signal de sélection de mémoire flash, une mémoire morte (ROM) 230 connectée au décodeur pour recevoir l'adresse ayant subi une translation et le signal de sélection de mémoire morte, et une mémoire flash 240 connectée au décodeur pour recevoir l'adresse ayant subi une translation et le signal de sélection de mémoire flash, et un générateur de mode 250 connecté au décodeur pour recevoir l'adresse ayant subi une translation. Le générateur de mode comprend une première unité de mémoire rémanente (NVM) 251 pour mémoriser une valeur indiquant si la mémoire morte ou la mémoire flash est sélectionnée comme mémoire d'amorçage, et une deuxième unité de mémoire rémanente 252 pour mémoriser une valeur indiquant si la mémoire morte est accessible ou cachée. Dans une autre forme de réalisation, le générateur de mode 250 peut être incorporé dans le décodeur de mode 220. En référence à la figure 3, un exemple de partie de décodeur de mode du décodeur de mode de la figure 2 est indiqué globalement par le numéro de référence 220. Ici, la partie de décodeur de mode comprend une première porte ET 221 pour recevoir un signal BootAdd (adresse d'amorçage), qui indique si une adresse s'insère dans une plage d'adresses d'amorçage, et un signal d'instruction/données qui indique si le contenu de l'adresse doit être traité comme une instruction ou comme des données. La sortie de la porte ET 221 est reçue par une autre porte ET 222. La porte ET 222 reçoit également un signal de mode BootMem (mémoire d'amorçage) qui indique si le code d'amorçage devant être utilisé est situé dans la mémoire morte ou dans la mémoire flash. Une porte OU 223 reçoit la sortie de la porte ET 222, reçoit un signal indicatif d'au moins un bit de l'adresse d'entrée, et délivre sa sortie sur une porte ET 224. L'autre entrée de la porte ET 224 produit un signal de mode RomHidden (mémoire morte cachée), qui indique si l'accès à la mémoire morte est empêché, qui est ensuite soumis à une porte NON 225. La sortie de la porte ET 224 est un signal ROM SEL pour sélectionner la mémoire morte comme destination de l'adresse de sortie. Le signal indicatif d'au moins un bit de l'adresse d'entrée est également reçu sur une porte ET 227. La sortie de la porte ET 222 est reçue par une porte NON 226, qui transmet celle-ci à l'autre entrée de la porte ET 227. La sortie de la porte ET 227 est un signal FM_SEL pour sélectionner la mémoire flash comme destination de l'adresse de sortie. Par conséquent, pour récupérer des instructions 35 d'amorçage, le signal de sélection de mémoire morte est validé pour l'amorçage lorsque le générateur de mode indique que la mémoire morte n'est pas cachée et que la mémoire morte est la mémoire d'amorçage, tandis que le signal de mémoire flash est validé pour l'amorçage lorsque le générateur de mode indique que la mémoire morte est cachée ou que la mémoire flash est la mémoire d'amorçage. De plus, une translation d'adresse de addrl à addr2 fait qu'une seule parmi la mémoire morte ou la mémoire flash correspond aux emplacements du pointeur d'adresse d'amorçage et des pointeurs d'exception vectorielle. La mémoire d'amorçage, qu'il s'agisse de la mémoire morte ou de la mémoire flash, comprend le pointeur d'adresse d'amorçage et les pointeurs d'exception vectorielle. Pour récupérer des instructions qui ne sont pas des instructions d'amorçage et pour accéder à des données, la mémoire flash est validée, tandis que la mémoire morte n'est validée que si elle n'est pas cachée. En référence à présent à la figure 4, des cartes de mémoire pour le dispositif 200 de la figure 2 sont indiquées globalement par le numéro de référence 400. Une carte de mémoire morte 410 comprend un pointeur d'adresse d'amorçage de mémoire morte 412, tandis qu'une carte de mémoire flash 420 comprend un pointeur d'adresse d'amorçage non initialisé 422. Par conséquent, durant un amorçage initial à l'aide du code du fabricant, le système est amorcé à l'aide du code d'amorçage mémorisé dans la carte de mémoire morte 410. Une autre carte de mémoire morte 450 comprend une adresse d'amorçage de mémoire morte 452, tandis qu'une carte de mémoire flash 460 comprend une adresse d'amorçage initialisée 462. Par conséquent, durant l'amorçage à l'aide d'un code spécifique de l'utilisateur, le système est amorcé à l'aide du code d'amorçage mémorisé dans la carte de mémoire flash 460. Comme représenté en figure 5, un autre exemple de 35 dispositif pour exécuter le code d'amorçage d'un système incorporé est indiqué globalement par le numéro de référence 300. Le dispositif 300 comprend une unité centrale 310, un décodeur de mode 320 connecté à l'unité centrale, une mémoire morte 330 connectée au décodeur, une mémoire flash 340 connectée au décodeur, et un générateur de mode 350 connecté au décodeur. Le générateur de mode comprend une première unité de mémoire rémanente 351, une deuxième unité de mémoire rémanente 352, une troisième unité de mémoire rémanente 353 et une quatrième unité de mémoire rémanente 354. En référence à la figure 6, un procédé pour exécuter le code d'amorçage d'un système intégré selon un exemple de forme de réalisation de la présente invention est indiqué globalement par le numéro de référence 600. Le procédé 600 comprend une étape de remise à zéro externe 610, telle qu'une mise sous tension, qui transmet la commande à une étape de lecture de signal de mode 612. La lecture 612 transmet la commande à une étape d'établissement de décodeur 614, qui transmet à son tour la commande à une étape de remise à zéro interne 616, telle qu'un démarrage d'unité centrale. L'étape 616 transmet la commande à une étape de sortie 618 pour délivrer en sortie une d'adresse d'amorçage à un décodeur, et transmet la commande à une étape de décision 620. L'étape de décision 620 détermine quelle mémoire le résultat du décodage sélectionne, et, si la mémoire morte est sélectionnée, elle transmet la commande à une étape de récupération 622, dans laquelle l'unité centrale récupère une instruction venant de la mémoire morte. L'étape 622 transmet la commande à une étape 624, qui envoie l'adresse à la mémoire morte, et transmet la commande à une étape 626. L'étape 626 procède à l'amorçage à l'aide du code du fabricant, et transmet la commande à une étape d'écriture 628. L'étape d'écriture 628 écrit le code spécifié de l'utilisateur dans la mémoire flash, et transmet la commande à un bloc de décision 630. Le bloc de décision 630 vérifie un signal de réétablissement de mode pour réétablir un mode tel que les modes RomHidden, UserLock (verrouillage de l'utilisateur) et/ou RomHiddenLock (verrouillage de la mémoire morte cachée), par exemple. Si, au contraire, l'étape de décision 620 détermine que la mémoire flash est sélectionnée, elle transmet la commande à une étape de récupération 632 dans laquelle l'unité centrale récupère une instruction à partir de la mémoire flash. L'étape 632 transmet la commande à une étape 634, qui envoie l'adresse à la mémoire flash, et transmet la commande à une étape 636. L'étape 636 procède à l'amorçage à l'aide du code spécifié de l'utilisateur, et transmet la commande à un bloc de décision 638. Le bloc de décision 638 vérifie un signal de réétablissement de mode pour réétablir un mode tel que les modes RomHidden, UserLock et/ou RomHiddenLock, par exemple. En référence à présent à la figure 7, une autre forme de réalisation de partie de décodage de mode du décodeur de mode de la figure 2 selon les cartes de mémoire de la figure 4 est indiquée globalement par le numéro de référence 700. Ici, la partie de décodeur de mode comprend une porte NON 710 pour recevoir le 20e bit le plus significatif de l'adresse délivrée par l'unité centrale, qui correspond au bit d'adresse qui diffère entre la mémoire flash et la mémoire morte, une porte NON 712 pour recevoir le 21e bit le plus significatif ou les bits les plus significatifs plus élevés de l'adresse délivrée par l'unité centrale, et une porte ET 714 pour recevoir les sorties des portes NON 710 et 712 et délivrer en sortie un signal indiquant que l'adresse est une adresse de mémoire d'amorçage, et une porte ET 716 pour recevoir la sortie de la porte ET 714 et le signal d'instruction/données venant de l'unité centrale, qui est à un niveau haut pour une instruction et à un niveau bas pour des données, et une porte ET 718 pour recevoir la sortie de la porte ET 716 et le signal de mode BootMem à partir du générateur de mode, et une porte ET 720 pour recevoir la sortie de la porte ET 718. Une porte NON 722 sert à recevoir le signal de mode RomHidden à partir du générateur de mode et à délivrer le signal RomHidden inversé comme deuxième entrée à la porte ET 720. La sortie de la porte ET 720 délivre le signal de sélection de mémoire ROM SEL pour valider la mémoire morte. Un inverseur 724 reçoit le signal ROM_SEL et délivre en sortie le signal inversé sous la forme du signal de sélection de mémoire flash FM SEL pour valider la mémoire flash. Une porte ET 726 reçoit la sortie de la porte NON 724 et la sortie de la porte NON 710, tandis qu'une porte NON 728 reçoit la sortie de la porte ET 726 et délivre un bit d'adresse ayant subi une translation correspondant au 20e bit le plus significatif de la mémoire devant être utilisée comme mémoire d'amorçage, qui, dans ce cas, est de 1 pour les adresses de mémoire morte commençant à 0x80000, ou de 0 pour les adresses de mémoire flash commençant à 0x00000. Par conséquent, pour récupérer des instructions d'amorçage, le signal de sélection de mémoire morte est validé pour l'amorçage lorsque le générateur de mode indique que la mémoire morte n'est pas cachée et que la mémoire morte est la mémoire d'amorçage, tandis que le signal de mémoire flash est validé pour l'amorçage lorsque le générateur de mode indique que la mémoire est cachée ou que la mémoire flash est la mémoire d'amorçage. De plus, une translation d'adresse du 20e bit de l'adresse délivrée par l'unité centrale addrl au 20e bit de l'adresse de mémoire d'amorçage addr2 fait qu'une seule parmi la mémoire morte ou la mémoire flash correspond aux emplacements du pointeur d'adresse d'amorçage et des pointeurs d'exception vectorielle. La mémoire d'amorçage, qu'il s'agisse de la mémoire morte ou de la mémoire flash, comprend le pointeur d'adresse d'amorçage et les pointeurs d'exception vectorielle. Pour récupérer des instructions qui ne sont pas des instructions d'amorçage et pour accéder à des données, la mémoire flash est validée, tandis que la mémoire morte n'est validée que si elle n'est pas cachée. Comme représenté en figure 8, un autre exemple de dispositif pour exécuter le code d'amorçage d'un système intégré est indiqué globalement par le numéro de référence 800. Le dispositif 800 comprend une unité centrale 810, un décodeur de mode 820 connecté à l'unité centrale, une mémoire morte 830 connectée au décodeur, une mémoire flash 840 connectée au décodeur et un générateur de mode 850 connecté au décodeur. Le générateur de mode comprend une première unité de mémoire rémanente 851, une deuxième unité de mémoire rémanente 852, une troisième unité de mémoire rémanente 853 et une quatrième unité de mémoire rémanente 854. Lors du fonctionnement, la première mémoire, ou mémoire morte, 230, de la figure 2, mémorise le code d'amorçage pour initialiser les registres et les mémoires, et mémorise des fonctions de bibliothèque de base pour effacer et programmer la deuxième mémoire, ou mémoire flash, 240. Le code d'amorçage dans la première mémoire 230 est écrit par le fabricant lorsque le système 200 est fabriqué. Ici, la première mémoire, qui est une mémoire morte à masque, ne peut pas être effacée ou reprogrammée. La deuxième mémoire 240 est une mémoire rémanente effaçable et programmable, en général une mémoire flash, et est initialement vide. Le générateur de mode 250 comprend les deux mémoires rémanentes 251 et 252 pour mémoriser des modes qui déterminent quelle mémoire parmi la mémoire morte 230 et la mémoire flash 240 est sélectionnée. Dans la présente forme de réalisation, la plage d'adresses de la mémoire flash est comprise entre 0x00000 et Ox4FFFF, la plage d'adresses de la mémoire morte est comprise entre 0x80000 et Ox83FFF, et une adresse d'amorçage constituant l'adresse d'index du code d'amorçage est de O. L'adresse d'amorçage qu'indique l'unité centrale 210 35 est fixée lorsque le système est fabriqué. Dans ce cas, l'unité centrale pourrait essayer de lire le code d'amorçage dans la mémoire flash, mais la mémoire flash est initialement vide, et doit être initialisée à l'aide du code d'amorçage de la mémoire morte avant son utilisation. Un exemple d'organigramme de fonctionnement, une fois que le système est fourni au client, se déroule comme suit: 1. Une remise à zéro externe (EXT RST) se produit par une mise sous tension ou à l'aide d'une broche de remise à zéro. 2. Les signaux de mode (BootMem, RomHidden) sont lus à partir des deux mémoires rémanentes 251 et 252 du générateur de mode. 3. Les signaux de mode sont entrés sur le décodeur 220. Initialement, BootMem est à un niveau logique haut et RomHidden est à un niveau logique bas. Ici, le signal BootMem représente la plage d'adresses de mémoire qui comprend l'adresse d'amorçage. Dans cet exemple, BootMem est déjà à un niveau logique haut lorsque le système est fabriqué, parce que l'adresse d'amorçage appartient à la plage de la mémoire flash. Le signal RomHidden à un niveau logique haut empêche l'unité centrale 210 d'accéder à lamémoire morte. Le code du fabricant ne sera pas mis en uvre dans le système après l'écriture du code spécifique du client dans la mémoire flash, pour des raisons de sécurité. 4. L'unité centrale 210 démarre en réponse à une remise à zéro interne (INT RST). 5. L'unité centrale envoie l'adresse d'amorçage au décodeur 220. 6. Le décodeur détermine à quelle mémoire l'adresse d'amorçage est envoyée. L'adresse d'amorçage est envoyée à la mémoire morte 230 lors du premier amorçage même si l'adresse d'amorçage appartient à la plage d'adresses de la mémoire flash. 7. L'unité centrale récupère une instruction mémorisée dans l'adresse de mémoire morte correspondant à l'adresse d'amorçage. 8. L'unité centrale envoie une adresse (addrl) correspondant à l'instruction au décodeur. 9. Le décodeur envoie l'adresse (addr2) correspondant à 5 l'adresse (addrl) à la mémoire morte. 10. L'unité centrale démarre l'opération d'amorçage en fonction du sousprogramme que l'adresse (addr2) désigne. 11. L'opération d'amorçage est achevée. Il s'agit d'une opération d'amorçage par le code du fabricant. Les registres et les mémoires, comprenant la mémoire morte et la mémoire flash, sont initialisés, et une communication entre l'unité centrale et une entrée/sortie externe est réalisable. 12. L'unité centrale écrit le code spécifique du client, mémorisé dans l'entrée/sortie externe, dans la mémoire flash 240. 13. Ensuite, le client peut modifier la valeur des deux mémoires rémanentes 251 et 252. Lorsque BootMem est changé à un état logique bas, le système est amorcé par le code du client mémorisé dans la mémoire flash à la place du code dans la mémoire morte. Lorsque RomHidden est changé à un état logique haut, l'unité centrale ne peut pas accéder à la mémoire morte. Ceci empêche le code du fabricant d'être mis en oeuvre dans le système. En réponse à la remise à zéro externe, BootMem et RomHidden sont établis avant que l'unité centrale 210 ne démarre. Initialement, BootMem est à un état logique haut et RomHidden est à un état logique bas. L'unité centrale 210 délivre en sortie une adresse (addrl) et des types de l'adresse (par exemple, adresse d'amorçage, instruction ou données) au décodeur. Lorsque le type de l'adresse addrl est une adresse d'amorçage (BootAdd) et une instruction (INST), le décodeur active ROM_SEL et désactive FM_SEL. Le décodeur envoie l'adresse addrl de l'unité centrale à l'adresse addr2 de la mémoire morte 230. Le système est amorcé à l'aide du code d'amorçage mémorisé dans la mémoire morte, qui conserve le code du fabricant. Après l'amorçage initial et l'écriture dans la mémoire flash 240, le client peut changer BootMem à un état logique bas. Par conséquent, le décodeur désactive ROM SEL et active FM SEL. Le décodeur envoie l'adresse addrl de l'unité centrale à l'adresse addr2 de la mémoire flash 240. Le système est amorcé à l'aide du code d'amorçage mémorisé dans la mémoire flash, qui conserve le code du client. Le client peut changer RomHidden à un état logique haut. Le décodeur désactive ROM SEL jusqu'à ce que RomHidden passe à un état logique bas. Le système ne peut pas accéder à la mémoire morte. Ceci empêche le code du fabricant d'être impliqué dans le système, et peut protéger le système contre une porte dérobée, par exemple, qu'un fabricant peut implanter intentionnellement pour entretenir facilement le programme du système ou à d'autres fins. L'exemple de générateur de mode 350 de la figure 5 est similaire au générateur de mode 250 de la figure 2, mais il comprend de plus deux mémoires 353 et 354 pour mémoriser des modes de verrouillage. Les deux mémoires 353 et 354 ne sont que des mémoires rémanentes programmables, en général des mémoires mortes programmables (PROM). Une fois programmées (par exemple, à un état logique haut), les mémoires ne peuvent pas être effacées (par exemple, à un état logique bas). Le signal UserLock permet au système de s'amorcer uniquement avec la mémoire flash 340. Ceci empêche le système d'être amorcé à l'aide de la mémoire morte 330 par des changements erronés apportés à BootMem. Ici, le client peut toujours accéder à la mémoire morte 330 et copier la bibliothèque et des programmes dans la mémoire flash. Le décodeur de mode 320 de la figure 3 utilise les 35 modes UserLock et RomHiddenLock du générateur de mode 350 pour empêcher l'accès d'écriture dans les mémoires rémanentes qui conservent les modes BootMem et RomHidden, respectivement. Le signal RomHiddenLock empêche de façon permanente l'unité centrale 310 d'accéder à la mémoire morte. Ceci empêche le système d'accéder à la mémoire morte 330 par des changements erronés apportés à RomHidden. Ici, le client ne peut pas utiliser la bibliothèque et les programmes fournis par le fabricant qui ne sont mémorisés que dans la mémoire morte. Le système 800 de la figure 8 fonctionne de façon similaire au système 300 de la figure 5, mais utilise le générateur de mode 850 pour interpréter les modes UserLock et RomHiddenLock afin d'empêcher l'accès d'écriture aux mémoires rémanentes qui conservent les modes BootMem et RomHidden, respectivement. Bien que des formes de réalisation illustratives aient été décrites ici en se référant aux dessins joints, on doit comprendre que la présente invention n'est pas limitée à ces formes de réalisation précises, et que différents changements et modifications peuvent y être apportés par une personne ayant une connaissance ordinaire de la technique pertinente sans s'écarter du cadre ou de l'esprit de la présente invention. REVENDICATIONS 1. Système de mémoire, caractérisé en ce qu'il comprend: un décodeur de mode (220; 320; 820) ; une première mémoire (230; 330; 830) en communication de signaux avec le décodeur de mode (220; 320; 820) ; une deuxième mémoire (240; 340; 840) en communication de signaux avec le décodeur de mode (220; 320; 820) ; et un générateur de mode (250; 350; 850) en communication de signaux avec le décodeur de mode (220; 320; 820) pour générer un signal indicatif de la sélection de l'une des première (230; 330; 830) et deuxième (240; 340; 840) mémoires comme mémoire d'amorçage. 2. Système de mémoire selon la revendication 1, 15 caractérisé en ce que la première mémoire (230; 330; 830) est une mémoire non effaçable. 3. Système de mémoire selon la revendication 1, caractérisé en ce que la deuxième mémoire (240; 340; 840) est une mémoire effaçable et programmable. 4. Système de mémoire selon la revendication 1, caractérisé en ce qu'au moins l'une des première (230; 330; 830) et deuxième (240; 340; 840) mémoires comprend un décodeur d'adresse interne. 5. Système de mémoire selon la revendication 1, caractérisé en ce que le générateur de mode (250; 350; 850) génère un signal indicatif de l'interdiction d'accès à la première mémoire (230; 330; 830). 6. Système de mémoire selon la revendication 1, caractérisé en ce que le générateur de mode (250; 350; 850) comprend une pluralité d'unités de mémoire rémanente {251, 252; 351, 352, 353, 354; 851, 852, 853, 854) pour mémoriser des modes dont au moins l'un est indicatif de la sélection d'au moins l'une des première (230; 330; 830) et deuxième (240; 340; 840) mémoires. 7. Système de mémoire selon la revendication 6, caractérisé en ce que le générateur de mode (250; 350; 850) comprend de plus au moins un mode de verrouillage. 8. Système de mémoire selon la revendication 7, caractérisé en ce que le mode de verrouillage au nombre d'au moins un comprend un mode de verrouillage imposant que le système de mémoire effectue ensuite l'amorçage uniquement à l'aide de la mémoire actuellement sélectionnée. 9. Système de mémoire selon la revendication 7, caractérisé en ce que le mode de verrouillage au nombre d'au moins un comprend un mode de verrouillage pour empêcher le système de mémoire de changer un mode indicatif de l'interdiction d'accès à la première mémoire (230; 330; 830). 10. Système de mémoire selon la revendication 6, caractérisé en ce que le générateur de mode (250; 350; 850) réagit à une pluralité de modes de fonctionnement, l'un des modes de fonctionnement empêchant les modes de verrouillage d'être déverrouillés. 11. Système de mémoire selon la revendication 10, caractérisé en ce que le générateur de mode (250; 350; 850) comprend de plus des circuits de décodage de lignes de mots réagissant à un signal indicatif d'un mode de verrouillage, à un signal indicatif d'une instruction de programme et à un signal indicatif d'une instruction d'effacement pour empêcher le changement d'un mode autre qu'un mode de verrouillage. 12. Système de mémoire selon la revendication 1, caractérisé en ce que la première mémoire (230; 330; 830) est une mémoire morte (ROM) à masque et en ce que la deuxième mémoire (240; 340; 840) est une mémoire flash. 13. Système de mémoire selon la revendication 1, caractérisé en ce que la première mémoire (230; 330; 830) comprend des fonctions de code d'amorçage et de bibliothèque. 14. Système de mémoire selon la revendication 6, caractérisé en ce qu'au moins l'une de la pluralité d'unités de mémoire rémanente (251, 252; 351, 352, 353, 354; 851, 852, 853, 854) sert à mémoriser un mode indicatif d'une interdiction d'accès à la première mémoire (230; 330; 830). 15. Système de mémoire selon la revendication 14, caractérisé en ce que le mode indicatif de la sélection d'au moins l'une des première (230; 330; 830) et deuxième (240; 340; 840) mémoires sélectionne initialement la première mémoire (230; 330; 830), et en ce que le mode 10 indicatif de l'interdiction d'accès à la première mémoire (230; 330; 830) permet initialement l'accès à la première mémoire (230; 330; 830). 16. Système de mémoire selon la revendication 1, caractérisé en ce que le décodeur de mode (220; 320; 820) 15 comprend: une entrée d'instruction/de données pour recevoir un signal d'instruction/de données; et une partie de décodage d'instruction/de données pour sélectionner l'une des première (230; 330; 830) et deuxième (240; 340; 840) mémoires en réponse au signal d'instruction/de données reçu. 17. Système de mémoire selon la revendication 16, caractérisé en ce que le décodeur de mode (220; 320; 820) comprend de plus une entrée d'adresse d'amorçage pour recevoir un signal d'adresse d'amorçage indicatif de l'emplacement ou non d'une adresse de mémoire requise à l'intérieur d'une plage d'adresses d'amorçage, et en ce que la partie de décodage d'instruction/de données réagit au signal d'adresse d'amorçage. 18. Système de mémoire selon la revendication 17, caractérisé en ce que le décodeur de mode (220; 320; 820) comprend de plus au moins l'une d'une sortie pour un signal indicatif de la sélection de la première mémoire (230; 330; 830) et d'une sortie pour un signal indicatif de la sélection de la deuxième mémoire (240; 340; 840). 19. Système de mémoire selon la revendication 17, caractérisé en ce que le décodeur de mode (220; 320; 820) comprend de plus: une entrée d'adresse pour recevoir au moins un bit d'une adresse de mémoire requise; une sortie pour délivrer un signal indicatif de la sélection de la première mémoire (230; 330; 830) ; et une sortie pour délivrer un signal indicatif de la sélection de la deuxième mémoire {240; 340; 840), et en ce que le décodeur de mode (220; 320; 820) réagit au bit reçu au nombre d'au moins un de l'adresse de mémoire requise. 20. Système de mémoire selon la revendication 16, caractérisé en ce que le décodeur de mode (220; 320; 820) comprend de plus une entrée de mémoire d'amorçage pour recevoir un signal indicatif d'un mode de mémoire d'amorçage, et en ce que la partie de décodage d'instruction/de données réagit au mode de mémoire d'amorçage. 21. Système de mémoire selon la revendication 16, caractérisé en ce que le décodeur de mode (220; 320; 820) comprend de plus une entrée de mode caché pour recevoir un signal indicatif d'une mémoire qui est cachée, et en ce que la partie de décodage d'instruction/de données réagit au mode caché. 22. Microdispositif de commande à une seule puce, caractérisé en ce qu'il comprend un système de mémoire selon la revendication 1. 23. Système intégré, caractérisé en ce qu'il comprend un système de mémoire selon la revendication 1. 24. Système intégré selon la revendication 23, caractérisé en ce qu'il comprend de plus au moins un processeur (210; 310; 810) en communication de signaux avec le décodeur (220; 230; 820) pour accéder à des adresses de mémoire uniquement en fonction du générateur de mode (250; 350; 850). 25. Système intégré selon la revendication 24, caractérisé en ce que le générateur de mode (250; 350; 850) réagit à un signal de remise à zéro destiné à stabiliser le générateur de mode (250; 350; 850) avant que le processeur (210; 310; 810) ne lise un mode du générateur de mode (250; 350; 850). 26. Procédé pour exécuter le code d'amorçage d'un système intégré, le procédé étant caractérisé en ce qu'il comprend les étapes consistant à : amorcer initialement le système à partir d'une première 10 mémoire {230; 330; 830) ; programmer une deuxième mémoire (240; 340; 840) pour un amorçage ultérieur; programmer un générateur de mode (250; 350; 850) pour amorcer ensuite le système à partir de la deuxième mémoire 15 (240; 340; 840) ; et amorcer ensuite le système à partir de la deuxième mémoire (240; 340; 840). 27. Procédé selon la revendication 26, caractérisé en ce qu'il comprend de plus les étapes consistant à : stabiliser le générateur de mode (250; 350; 850) ; lire un mode du générateur de mode (250; 350; 850) ; et accéder à des adresses de mémoire uniquement en fonction du générateur de mode (250; 350; 850). 28. Procédé selon la revendication 26, caractérisé en ce qu'il comprend de plus la programmation du générateur de mode (250; 350; 850) pour verrouiller le système en amorçage à partir de la deuxième mémoire (240; 340; 840). 29. Procédé selon la revendication 26, caractérisé en ce qu'il comprend de plus la programmation du générateur de mode (250; 350; 850) pour interdire ensuite l'accès à la première mémoire (230; 330; 830). 30. Procédé selon la revendication 26, caractérisé en ce qu'il comprend de plus la programmation du générateur de mode (250; 350; 850) pour verrouiller le système en interdiction de changements vers un mode indicatif de l'autorisation ou de l'interdiction d'accès à la première mémoire (230; 330; 830). 31. Procédé selon la revendication 30, caractérisé en ce que le système est protégé contre toute porte dérobée de logiciel qui pourrait par ailleurs être incorporée dans la première mémoire (230; 330; 830). 32. Procédé selon la revendication 26, caractérisé en ce qu'il comprend de plus les étapes consistant à : programmer le générateur de mode (250; 350; 850) pour amorcer ensuite le système à partir de la première mémoire (230; 330; 830) ; reprogrammer la deuxième mémoire (240; 340; 840) pour un amorçage ultérieur; programmer le générateur de mode (250; 350; 850) pour 15 amorcer ensuite le système à partir de la deuxième mémoire (240; 340; 840) reprogrammée; et amorcer ensuite le système à partir de la deuxième mémoire {240; 340; 840) reprogrammée. 33. Procédé selon la revendication 26, caractérisé en ce qu'il comprend de plus les étapes consistant à : reprogrammer le générateur de mode (250; 350; 850) pour réamorcer ensuite le système à partir de la première mémoire (230; 330; 830) ; et réamorcer ensuite le système à partir de la première 25 mémoire {230; 330; 830).