Brevet FR3069342A1 — publié le 20190125

L'invention appartient au domaine de la sauvegarde de données et concerne plus particulièrement un procédé de détermination de l'intégrité de données de navigation et de restauration des données sauvegardées dans une unité de contrôle électronique d'un véhicule automobile. Dans une unité de contrôle (typiquement un ECU, acronyme de Engine Control Unit en anglais), des données de navigation sont sauvegardées dans une mémoire morte, ou non-volatile, reliée à un microcontrôleur, lors d'une coupure-clé en vue d'un arrêt du véhicule. Lors d'un démarrage ultérieur du calculateur, ces données sont restaurées à partir de la mémoire non-volatile, de manière à être réutilisées par l'unité de contrôle. Une coupure-clé permet d'initier une phase d'endormissement du calculateur (appelée également phase de shutdown en anglais). Une sauvegarde des données depuis la mémoire vive, aussi reliée au microcontrôleur vers la mémoire morte, est réalisée pendant la phase d'endormissement de l'unité de contrôle. A l'issue de la phase d'endormissement, l'unité de contrôle peut être désactivée. Un redémarrage ou réveil peut être requis pendant la phase d'endormissement. Les processus en cours pendant la phase d'endormissement doivent alors être interrompus de manière à initier une phase de réveil de l'unité de contrôle le plus rapidement possible. Le temps nécessaire à la sauvegarde des données dans la mémoire morte n'est pas compatible avec la réactivité requise par un réveil pendant une phase d'endormissement, par exemple. Ce temps est typiquement de 300 ms, et de manière générale compris entre 100 ms et 3s. L'écriture ou la copie d'une ou plusieurs données de navigation vers la 25 mémoire morte, créées ou modifiées au cours du roulage (par exemple la signalisation d'une panne d'un capteur) est interrompue en redémarrant, avant que les données n'aient été copiées dans la mémoire morte lors de la phase d'endormissement. A cet effet, il est connu d'écrire les données au début de la phase d'endormissement dans une partie de mémoire vive, désignée par zone non réinitialisable 30 ou reset safe en anglais. Cette partie de la mémoire vive, à la différence des autres parties de la mémoire vive, n'est pas réinitialisée lors d'un redémarrage de l'unité de contrôle : les données écrites dans la zone non réinitialisable restent inchangées lors d'un redémarrage tant que la mémoire vive est sous tension. Les empreintes associées à chacune des données de navigation ou à chacun des groupes de données de navigation 35 sont également calculées, puis enregistrées dans la zone non réinitialisable. 2 Ainsi, il est possible de déterminer, lors d'une phase de réveil, depuis quelle mémoire (vive ou morte) le microcontrôleur doit charger les données pour avoir accès aux données les plus récentes et/ou des données intègres. Lors d'une phase de réveil, le microcontrôleur calcule l'empreinte de chaque donnée ou groupe de données de 5 navigation écrit dans la zone non réinitialisable et la compare avec l'empreinte enregistrée au préalable dans la zone non réinitialisable. Si celles-ci sont égales, la mémoire vive n'a pas été mise hors tension entre le démarrage et le fonctionnement antérieur. Le démarrage a donc eu lieu pendant une phase d'endormissement et l'intégrité des données de la mémoire morte n'est pas sûre. Les données sont alors chargées à partir de 10 la zone non réinitialisable. Si les empreintes associées ne sont pas égales, la mémoire vive a été mise hors tension, indiquant que la phase d'endormissement a été menée à son terme. Les données sont alors chargées depuis la mémoire morte. Un réveil du calculateur peut être déclenché pendant une phase d'endormissement, mais après une phase d'enregistrement complète des données dans 15 la mémoire morte. Le procédé décrit précédemment ne permet pas de discriminer si les données ont été effectivement enregistrées dans la mémoire morte ou pas dans ce cas. Il est également possible de redémarrer le véhicule à une fréquence permettant à un utilisateur mal intentionné d'empêcher l'écriture des données dans la mémoire morte. Lors d'un redémarrage subséquent, si l'unité de contrôle n'est plus 20 alimentée électriquement, les données n'ayant pas été sauvegardées en mémoire morte sont définitivement perdues. Un but de l'invention est de déterminer l'intégrité des données de navigation d'une unité de contrôle, particulièrement des données copiées dans la mémoire morte d'une unité de contrôle d'une manière simple et précise. Ce but est atteint dans le cadre de la présente invention grâce à un procédé de détermination de l'intégrité de données de navigation d'une unité de contrôle d'un véhicule automobile, l'unité de contrôle comprenant un microcontrôleur, une mémoire vive et une mémoire morte reliées au microcontrôleur, la mémoire vive étant configurée pour qu'une zone non réinitialisable de la mémoire vive ne soit pas réinitialisée lors d'un démarrage de l'unité de contrôle, le procédé étant caractérisé en ce qu'il comprend les étapes consistant à: a) lors d'un roulage, calculer le maximum d'un premier compteur et d'un deuxième compteur, le deuxième compteur n'étant associé à aucune empreinte, et fixer ces compteurs à une valeur strictement supérieure au maximum ; b) lors d'une phase d'endormissement de l'unité de contrôle, initier une copie des données de navigation du premier compteur et du deuxième compteur dans la 3 zone non réinitialisable, initier le calcul et la copie d'une empreinte de chaque donnée de navigation et d'une empreinte du premier compteur dans la zone non réinitialisable, puis initier une copie des données de navigation et des compteurs dans la mémoire morte en commençant par la copie du premier 5 compteur et en copiant chaque donnée avant le deuxième compteur ; c) lors d'une phase de réveil, charger le deuxième compteur depuis la mémoire morte ; d) lors d'une phase de réveil, calculer les empreintes des données et du premier compteur copiées dans la zone non réinitialisable ; 10 e) lors d'une phase de réveil, charger le premier compteur depuis la zone non réinitialisable quand l'empreinte calculée et l'empreinte enregistrée du premier compteur dans la zone non réinitialisable sont égales, et charger le premier compteur depuis la mémoire morte quand l'empreinte calculée est différente de l'empreinte enregistrée du premier compteur dans la zone non 15 réinitialisable ; f) lors d'une phase de réveil, comparer le premier compteur et le deuxième compteur ; g) déterminer l'intégrité des données de navigation de la mémoire morte quand le premier compteur est égal au deuxième compteur lors de l'étape f). 20 Avantageusement, dans l'étape g), on notifie à un utilisateur du véhicule l'intégrité des données de navigation quand les compteurs sont égaux et la corruption des données de navigations quand les compteurs sont différents. Avantageusement, le procédé comprend une étape de restauration des données de navigation : 25 - depuis la mémoire morte quand le premier compteur et le deuxième compteur sont égaux, et - depuis la mémoire vive quand le premier compteur et le deuxième compteur sont différents. Avantageusement, une empreinte est calculée par une méthode choisie parmi 30 au moins un contrôle de redondance cyclique et une somme de contrôle. Un autre objet de l'invention est une unité de contrôle d'un véhicule automobile comprenant un microcontrôleur, une mémoire vive et une mémoire morte reliées au microcontrôleur, la mémoire vive étant configurée pour qu'une zone non 4 réinitialisable de la mémoire vive ne soit pas réinitialisée lors d'un démarrage de l'unité de contrôle, l'unité de contrôle étant configurée pour : a) calculer le maximum d'un premier compteur et d'un deuxième compteur, le deuxième compteur n'étant associé à aucune empreinte, et fixer ces compteurs à 5 une valeur strictement supérieure au maximum ; b) lors d'une phase d'endormissement de l'unité de contrôle, initier une copie des données de navigation du premier compteur et du deuxième compteur dans la zone non réinitialisable, initier le calcul et la copie d'une empreinte de chaque donnée de navigation et d'une empreinte du premier compteur dans la zone non 10 réinitialisable, puis initier une copie des données de navigation et des compteurs dans la mémoire morte en commençant par la copie du premier compteur et en copiant chaque donnée avant le deuxième compteur ; c) lors d'une phase de réveil, charger le deuxième compteur depuis la mémoire morte ; 15 d) lors d'une phase de réveil, calculer les empreintes des données et du premier compteur copiées dans la zone non réinitialisable ; e) lors d'une phase de réveil, charger le premier compteur depuis la zone non réinitialisable quand l'empreinte calculée et l'empreinte enregistrée du premier compteur dans la zone non réinitialisable sont égales, et charger le premier 20 compteur depuis la mémoire morte quand l'empreinte calculée est différente de l'empreinte enregistrée du premier compteur dans la zone non réinitialisable ; f) lors d'une phase de réveil, comparer le premier compteur et le deuxième compteur ; g) déterminer l'intégrité des données de navigation de la mémoire morte quand le 25 premier compteur est égal au deuxième compteur lors de l'étape f). Avantageusement, l'unité de contrôle est configurée pour notifier à un utilisateur du véhicule l'intégrité des données de navigation quand les compteurs sont égaux et la corruption des données de navigation quand les compteurs sont différents. Avantageusement, l'unité de contrôle est configurée pour restaurer des 30 données de navigation : - depuis la mémoire morte quand le premier compteur et le deuxième compteur sont égaux, ou - depuis la mémoire vive quand le premier compteur et le deuxième compteur sont différents. 5 D'autres caractéristiques et avantages ressortiront de la description qui suit, laquelle est purement illustrative et non limitative, et doit être lue en regard des figures annexées, parmi lesquelles : - la figure 1 décrit schématiquement un véhicule 1 automobile comprenant 5 une unité de contrôle ; - la figure 2 décrit schématiquement différentes mémoires et zones de mémoire de l'unité de contrôle ; - la figure 3 illustre schématiquement un procédé de restauration de données de navigation selon un mode de réalisation de l'invention. 10 La figure 1 décrit schématiquement un véhicule 1 automobile comprenant une unité de contrôle ECU. L'unité de contrôle ECU du véhicule 1 comprend un microcontrôleur 3 ou microprocesseur, illustré par un rectangle noir en trait continu, relié électriquement à une mémoire morte 5, ou mémoire non-volatile, illustrée par un rectangle en traits pointillés, et également reliée électriquement à une mémoire vive 4, ou mémoire 15 volatile, illustrée par un rectangle en traits pointillés. La mémoire morte 5 peut être une mémoire de type FLASH, ou plus généralement de type EEPROM (acronyme de l'anglais Electrically- Erasable Programmable Read-Only Memory, ou mémoire morte 5 effaçable électriquement et programmable). 20 La mémoire vive 4 est également désignée mémoire volatile, ou mémoire à accès direct, de l'anglais Random Access Memory (RAM). La mémoire vive 4 comprend une zone non réinitialisable 6 ou reset safe en anglais. Cette partie de la mémoire vive 4 n'est pas réinitialisée lors d'un redémarrage de l'unité de contrôle ECU : les données copiées dans la zone non réinitialisable 6 restent inchangées lors d'un redémarrage tant 25 que la mémoire vive 4 est sous tension. La figure 2 décrit schématiquement différentes mémoires et zones de mémoire de l'unité de contrôle ECU. La mémoire vive 4 est illustrée par un rectangle en pointillés à gauche de la figure 2. Cette mémoire comprend une zone non réinitialisable 6. 30 De manière générale, l'unité de contrôle ECU est configurée pour traiter et/ou mémoriser un premier ensemble de données. Cet ensemble de données comprend des jeux de variables, ou channels en anglais, dont au moins à un premier compteur A, un second compteur LAST et un ensemble de données de navigation D (comprenant les données de navigation D,, i étant un nombre entier naturel, illustrées par les données D1 35 et D2 dans la figure 2). On désigne par channel un groupe de données ou jeux de variables liés à une même fonction, par exemple relative au moteur du véhicule 1. Ces données de navigation correspondent par exemple à une distance parcourue, à une 6 consommation, mais peuvent également correspondre à la signalisation d'une panne dans le véhicule 1 ou de la défaillance d'un capteur. Par empreinte, on entend une donnée permettant d'identifier une autre donnée, telle qu'une somme de contrôle, une empreinte numérique, un hash, un 5 condensé, un condensat, une signature ou encore une empreinte cryptographique. La lecture d'une empreinte peut permettre de vérifier l'intégrité d'une donnée. Avantageusement, une empreinte peut être obtenue par une fonction de hachage et/ou un contrôle de redondance cyclique (CRC). La taille du CRC typiquement utilisé est de 8 bits, 16 bits ou 32 bits. 10 Une empreinte CRC peut être calculée pour un premier compteur A et pour chaque donnée D. Le deuxième compteur LAST est configuré pour ne pas avoir d'empreinte calculable, en particulier pas d'empreinte de type CRC. Autrement dit, il est impossible de calculer l'empreinte du deuxième compteur LAST. La mémoire vive 4 est configurée pour mémoriser l'ensemble de données 15 dans une autre zone que la zone non réinitialisable. La zone non réinitialisable 6 est configurée pour mémoriser le premier compteur A, le deuxième compteur LAST et les données de navigation du véhicule 1. Ces données sont dupliquées, dans l'exemple illustré dans la figure 2, dans une autre zone de la mémoire vive 4. 20 La mémoire morte 5 est configurée pour mémoriser au moins l'ensemble de données (comprenant le premier compteur A, le second compteur LAST et les données de navigation D,). La mémoire morte 5 est également configurée pour permettre au microcontrôleur 3 d'écrire l'ensemble de données dans un ordre défini : en commençant par la copie du premier compteur A, puis en écrivant chaque donnée D, avant la copie du 25 deuxième compteur LAST. Cet ordre de copie de l'ensemble de données est illustré par la flèche au-dessus de la mémoire morte 5. Le microcontrôleur 3 est configuré pour calculer l'empreinte CRC de chaque donnée copiée dans la mémoire vive 4, dans la mesure où ces empreintes sont calculables, ce qui n'est pas le cas de l'empreinte du deuxième compteur LAST. Le 30 microcontrôleur 3 peut calculer l'empreinte CRC A du premier compteur et les empreintes CRC D, de chaque donnée de navigation (par exemple CRC D1, CRC D2, etc.). Le microcontrôleur 3 est également configuré pour écrire chacune de ces données et chacune des empreintes calculées associées dans la zone non réinitialisable 6 de la mémoire vive 4. 35 La figure 3 illustre un procédé de restauration de données de navigation selon un mode de réalisation de l'invention. 7 Lors d'une étape a), on calcule le maximum du premier compteur A et du second compteur LAST, puis on fixe la valeur des compteurs A et LAST à une valeur strictement supérieure à ce maximum. Avantageusement, on fixe (ou on initialise) la valeur du premier compteur A et du deuxième compteur LAST à la valeur de ce maximum 5 plus un. Cette étape peut être mise en oeuvre pendant le roulage du véhicule 1 et de manière plus générale à tout moment avant la phase d'endormissement de l'unité de contrôle ECU. Lors de l'étape b), pendant une phase d'endormissement de l'unité de contrôle ECU, on initie une écriture, autrement dit une copie, des données de 10 navigationdu premier compteur A et du deuxième compteur LAST dans la zone non réinitialisable 6 de la mémoire vive 4, et on initie un calcul et la copie de l'empreinte CRC de chaque donnée de navigation et du compteur A dans la zone non réinitialisable 6. Le deuxième compteur LAST n'a pas d'empreinte calculable : son empreinte ne peut pas être copiée dans la zone non réinitialisable 6. Enfin, on initie la copie des données dans la 15 mémoire morte 5 dans l'ordre illustré dans la figure 2, c'est-à-dire en commençant par la copie du premier compteur A, puis en écrivant chaque donnée avant d'écrire le deuxième compteur LAST. Si l'unité de contrôle ECU est mise hors tension après la phase d'endormissement, l'ensemble des données de la mémoire vive 4 sont, lors de la remise 20 sous tension de la mémoire vive 4, dans un état indéterminé. Les données de la zone non réinitialisable 6 n'étant pas réinitialisées, elles sont également dans un état indéterminé après une initialisation de la mémoire vive 4. Un réveil peut être demandé pendant la phase d'endormissement, et plus particulièrement pendant l'étape b). Si une copie en mémoire morte 5 des données de 25 navigation et des compteurs a été initiée, elle doit être interrompue au moment du réveil pour répondre à un critère de réactivité du réveil du véhicule 1. Un utilisateur du véhicule 1 peut commander une phase de réveil pendant une phase d'endormissement. Lors de l'étape c), lors d'une une phase de réveil, on charge le deuxième compteur LAST depuis la mémoire morte 5. 30 Lors d'une étape d), on calcule, dans la phase de réveil, les empreintes des données de navigation et du premier compteur A, copiées dans la zone non réinitialisable 6. On compare ensuite chaque empreinte copiée (ou enregistrée) associée à une donnée dans la zone non réinitialisable 6 avec l'empreinte calculée dans l'étape d) associée à la même donnée. 35 Lors d'une étape e), dans la phase de réveil, quand l'empreinte calculée et l'empreinte enregistrée du premier compteur A dans la zone non réinitialisable 6 sont égales, le premier compteur A est copié depuis la zone non réinitialisable 6 dans une 8 autre zone de la mémoire vive 4. En revanche, quand l'empreinte du premier compteur A calculée et l'empreinte du premier compteur A enregistrée dans la zone non réinitialisable 6 sont différentes, le premier compteur A est copié depuis la mémoire morte 5 dans la mémoire vive 4, dans une zone différente de la zone non réinitialisable 6. 5 Lors d'une étape f), on compare le premier compteur A copié lors de l'étape e) et le deuxième compteur LAST copié lors de l'étape c). Le premier compteur A et le deuxième compteur LAST peuvent être égaux ou différents. Lors de l'étape g), on détermine l'intégrité des données de navigation, en particulier des données de navigation copiées dans la mémoire morte 5, quand le premier 10 compteur A est égal au deuxième compteur LAST. Dans le cas contraire, quand le premier compteur A est différent du deuxième compteur LAST, on détermine l'altération des données, en particulier des données de navigation copiées dans la mémoire morte 5. On désigne par « altéré » des données qui ne représentent pas l'état actuel du véhicule 1. On peut avantageusement notifier l'intégrité ou l'altération des données de 15 navigation copiées dans la mémoire morte 5. Une telle notification peut être mise en oeuvre en copiant dans la mémoire morte 5 une donnée ou un jeu de variables représentatives de l'intégrité des données. On peut également signaler à un utilisateur du véhicule 1 et/ou à l'unité de contrôle ECU l'intégrité ou l'altération des données, par exemple lors du démarrage du véhicule 1. 20 On peut également restaurer l'ensemble de données dans la mémoire vive 4 de l'unité de contrôle ECU depuis la mémoire morte 5 quand le premier compteur A et le deuxième compteur LAST sont égaux. Ce cas de figure correspond à un cas où l'ensemble de données a été entièrement copié lors de la précédente phase d'endormissement de l'unité de contrôle ECU. 25 En revanche, quand le premier compteur A et le deuxième compteur LAST sont différents, les données sont restaurées depuis la mémoire vive 4. Dans ce cas, les données de navigation n'ont pas pu être copiées entièrement dans la mémoire morte 5 lors de la phase d'endormissement de l'unité de contrôle ECU (toutes les données de navigation étant copiées avant le compteur LAST). Cette méthode permet de déterminer 30 si, en cas de perte d'alimentation du calculateur et de la mémoire vive 4 après l'étape g), des données restaurées depuis la mémoire morte 5 vers la mémoire vive 4 sont restaurées avec ou sans une perte d'information (c'est-à-dire REVENDICATIONS1. Procédé de détermination de l'intégrité de données de navigation d'une unité de contrôle (ECU) d'un véhicule (1) automobile, l'unité de contrôle comprenant un microcontrôleur (3), une mémoire vive (4) et une mémoire morte (5) reliées au microcontrôleur (3), la mémoire morte étant configurée pour qu'une zone non réinitialisable (6) de la mémoire vive ne soit pas réinitialisée lors d'un démarrage de l'unité de contrôle, le procédé étant caractérisé en ce qu'il comprend les étapes consistant à: a) calculer le maximum d'un premier compteur (A) et d'un deuxième compteur (LAST), le deuxième compteur (LAST) n'étant associé à aucune empreinte, et fixer ces compteurs à une valeur strictement supérieure au maximum ; b) lors d'une phase d'endormissement de l'unité de contrôle, initier une copie des données de navigation du premier compteur (A) et du deuxième compteur (LAST) dans la zone non réinitialisable, initier le calcul et la copie d'une empreinte de chaque donnée de navigation et d'une empreinte du premier compteur (A) dans la zone non réinitialisable, puis initier une copie des données de navigation et des compteurs (A, LAST) dans la mémoire morte en commençant par la copie du premier compteur (A) et en copiant chaque donnée avant le deuxième compteur (LAST) ; c) lors d'une phase de réveil, charger le deuxième compteur (LAST) depuis la mémoire morte ; d) lors d'une phase de réveil, calculer les empreintes des données et du premier compteur (A) copiées dans la zone non réinitialisable ; e) lors d'une phase de réveil, charger le premier compteur (A) depuis la zone non réinitialisable quand l'empreinte calculée et l'empreinte enregistrée du premier compteur (A) dans la zone non réinitialisable sont égales, et charger le premier compteur (A) depuis la mémoire morte quand l'empreinte calculée est différente de l'empreinte enregistrée du premier compteur (A) dans la zone non réinitialisable ; f) lors d'une phase de réveil, comparer le premier compteur (A) et le deuxième compteur (LAST) ; g) déterminer l'intégrité des données de navigation copiées dans la mémoire morte quand le premier compteur (A) est égal au deuxième compteur (LAST) lors de l'étape f). 10 2. Procédé selon la revendication 1 dans lequel, dans l'étape g), on notifie à un utilisateur du véhicule (1) l'intégrité des données de navigation quand les compteurs (A, LAST) sont égaux ou l'altération des données de navigation quand les compteurs (A, LAST) sont différents. 5 3. Procédé selon la revendication 1 ou 2, comprenant en outre une étape de restauration des données de navigation : - depuis la mémoire morte (5) quand le premier compteur (A) et le deuxième compteur (LAST) sont égaux, ou - depuis la mémoire vive (4) quand le premier compteur (A) et le deuxième 10 compteur (LAST) sont différents. 4. Procédé selon l'une des revendications 1 à 3, dans lequel l'empreinte est calculée par une méthode choisie parmi au moins un contrôle de redondance cyclique et une somme de contrôle. 5. Unité de contrôle (ECU) d'un véhicule (1) automobile comprenant un 15 microcontrôleur (3), une mémoire vive (4) et une mémoire morte (5) reliées au microcontrôleur (3), la mémoire morte étant configurée pour qu'une zone non réinitialisable (6) de la mémoire vive ne soit pas réinitialisée lors d'un démarrage de l'unité de contrôle, l'unité de contrôle étant configurée pour : a) lors d'un roulage, calculer le maximum d'un premier compteur (A) et d'un 20 deuxième compteur (LAST), le deuxième compteur (LAST) n'étant associé à aucune empreinte et fixer ces compteurs à une valeur strictement supérieure au maximum ; b) lors d'une phase d'endormissement de l'unité de contrôle, initier une copie des données de navigation du premier compteur (A) et du deuxième 25 compteur (LAST) dans la zone non réinitialisable, initier le calcul et la copie d'une empreinte de chaque donnée de navigation et d'une empreinte du premier compteur (A) dans la zone non réinitialisable, puis initier une copie des données de navigation et des compteurs (A, LAST) dans la mémoire morte en commençant par la copie du premier compteur (A) et en copiant 30 chaque donnée avant le deuxième compteur (LAST) ; c) lors d'une phase de réveil, charger le deuxième compteur (LAST) depuis la mémoire morte ; d) lors d'une phase de réveil, calculer les empreintes des données et du premier compteur (A) copiées dans la zone non réinitialisable ; 11 e) lors d'une phase de réveil, charger le premier compteur (A) depuis la zone non réinitialisable quand l'empreinte calculée et l'empreinte enregistrée du premier compteur (A) dans la zone non réinitialisable sont égales, et charger le premier compteur (A) depuis la mémoire morte quand l'empreinte calculée 5 est différente de l'empreinte enregistrée du premier compteur (A) dans la zone non réinitialisable ; f) lors d'une phase de réveil, comparer le premier compteur (A) et le deuxième compteur (LAST) ; g) déterminer l'intégrité des données de navigation de la mémoire morte quand 10 le premier compteur (A) est égal au deuxième compteur (LAST) lors de l'étape f). 6. Unité de contrôle selon la revendication 5 configurée pour notifier à un utilisateur du véhicule (1) l'intégrité des données de navigation quand les compteurs (A, LAST) sont égaux et l'altération des données de navigation quand les compteurs (A, 15 LAST) sont différents. 7. Unité de contrôle selon la revendication 5 ou 6 configurée pour restaurer des données de navigation : - depuis la mémoire morte (5) quand le premier compteur (A) et le deuxième compteur (LAST) sont égaux, ou 20 - depuis la mémoire vive (4) quand le premier compteur (A) et le deuxième compteur (LAST) sont différents.