FR 3044125 A1 20170526 FR 1652672 A 20160329 1 L'invention concerne le domaine des mémoires flash non volatiles, de type NAND, et en particulier le comportement d'applications appartenant à une couche supérieure du pilote de telles mémoires flash et accédant en lecture, en écriture ou en effacement à des blocs desdites mémoires flash. Plus précisément, la présente invention vise un procédé de test du comportement d'une telle application accédant à une mémoire flash, vis-à-vis de l'apparition subite d'un mauvais bloc, altéré physiquement, lors d'une tentative d'accès en lecture, en écriture ou en effacement. Il est connu de l'état de la technique des composants électroniques formant 10 des espaces de stockages de données sous la forme de mémoires flash non volatiles de type NAND. La mémoire flash NAND est ainsi une technologie bien connue de stockage de données, à base de semi-conducteurs, ne nécessitant pas d'alimentation électrique pour conserver lesdites données. C'est pourquoi elle est dite « non volatile », 15 contrairement à une mémoire vive, pour laquelle les données sont effacées lorsque l'alimentation de ladite mémoire vive est coupée. Comme cela est connu, chaque mémoire flash NAND est divisée en blocs comprenant plusieurs pages. En pratique, une application accède en lecture / écriture à une page et réalise des effacements bloc par bloc. 20 Un problème connu de ces mémoires flash réside dans le vieillissement prématuré de ces mémoires flash par rapport à la durée de vie des produits qui les intègrent. En effet, les constructeurs de mémoire flash s'engagent statistiquement sur un nombre, typiquement 100 000, de cycles d'écriture / effacement que les blocs de la mémoire flash concernée supportent, en moyenne. Les pilotes de mémoire flash sont 25 ainsi supervisés par des algorithmes de nivellement d'usure - « wear leveling » selon l'expression en anglais connue de l'homme du métier - , chargés de répartir les accès en écriture / effacement uniformément sur l'ensemble des blocs/pages de la mémoire flash, afin d'éviter justement le vieillissement anticipé de certains blocs. De façon générale, il est connu que, lors d'accès à des blocs d'une mémoire 30 flash, des informations peuvent être perdues. Ces erreurs sont généralement sans effet car, statistiquement, le taux d'erreurs est suffisamment faible pour que la plupart des erreurs puissent être corrigées de façon automatique. Ainsi, un type de problème connu est relatif à la perte d'électrons lors d'un accès à une page d'un bloc d'une mémoire flash. En raison de cette perte d'électrons, des 35 valeurs de bit ne peuvent pas être correctement positionnées a priori. Une simple 3044125 2 réitération de la tentative d'accès, telle qu'une réécriture, peut alors suffire, mais il est aussi possible qu'une erreur subsiste. Cependant, dans ce cas, des algorithmes de correction automatique, en particulier de type ECC (pour « Error Correction Code » selon l'abréviation anglaise connue de l'homme du métier), permettent généralement de corriger 5 ce type de problème. Un autre type d'erreur, non corrigeable en tant que telle, est lié à l'existence de blocs vraiment défectueux, c'est-à-dire physiquement altérés, couramment désignés dans le domaine technique sous l'expression en anglais de « bad blocks », signifiant mauvais blocs. Un mauvais bloc comprend un nombre trop important d'erreurs. Etant physiquement altéré, il est impossible de l'effacer. Lorsqu'une application tente d'accéder à un tel mauvais bloc, le risque classique réside dans le fait que l'application se mette à dysfonctionner, cherchant à effacer le mauvais bloc, n'y parvenant pas, et cherchant de nouveau à écrire dans le 15 mauvais bloc etc. Pour pallier cet inconvénient, les blocs des mémoires flash connues comprennent une zone réservée (« spare area » selon l'expression en anglais connue de l'homme du métier) comportant une balise spéciale comprenant une information relative à l'éventuel caractère mauvais dudit bloc. 20 Cette balise de mauvais bloc (« bad block tag » selon l'expression en anglais connue de l'homme du métier) est lue, via le pilote de la mémoire flash, lors d'un accès au bloc. Si le bloc est balisé comme étant mauvais, alors les accès en lecture / écriture / effacement ne seront pas effectuées sur ce bloc. En pratique, le pilote de la mémoire flash copie alors le contenu du mauvais bloc dans un bloc sain. 25 La balise de mauvais bloc peut typiquement être configurée en usine, lors de la fabrication des mémoires flash, avant leur livraison aux utilisateurs. Cependant, un problème majeur subsiste : lorsqu'un mauvais bloc apparaît au cours de la vie du produit intégrant la mémoire flash, il est difficile de garantir que le comportement de l'application sera adapté. En effet, le mauvais bloc apparaissant de 30 façon impromptue, il n'est pas présenté comme altéré dans la balise prévue à cet effet. Le procédé selon l'invention vise ainsi à tester le comportement d'une application appartenant à une couche supérieure du pilote de la mémoire flash, comme l'algorithme de nivellement d'usure de la mémoire flash par exemple, vis-à-vis de l'apparition d'un nouveau mauvais bloc dans une mémoire flash. 35 A cet effet, la présente invention consiste en un procédé pour tester le comportement d'une application, notamment d'un algorithme de nivellement d'usure ou un 3044125 3 algorithme spécifique de gestion des mauvais blocs d'une mémoire flash, vis-à-vis de l'apparition d'un mauvais bloc dans une mémoire flash. Au moyen de ce procédé, une liste de mauvais blocs est simulée, les mauvais blocs simulés de la liste pouvant être simulés mauvais en lecture et/ou en écriture et/ou 5 en effacement. De cette façon, le procédé selon l'invention prévoie la création de mauvais blocs logiques virtuels permettant d'observer le comportement de l'application confrontée à l'apparition soudaine d'un mauvais bloc. Selon l'invention, un algorithme spécifique, comprenant le renvoi d'une erreur simulée vers l'application, est mis en oeuvre pour tester le comportement d'une 10 application cherchant à accéder à un bloc appartenant à la liste simulée de mauvais blocs, afin de vérifier que ledit comportement est sûr. A cette fin, plus précisément, la présente invention a pour objet un procédé de test d'une application appartenant à une couche supérieure d'un pilote d'une mémoire flash non volatile de type NAND, ladite mémoire flash comprenant un ensemble de blocs auxquels l'application accède en lecture ou en écriture ou en effacement, chaque bloc comportant une pluralité de pages, ledit test visant à vérifier le comportement de l'application vis-à-vis de l'apparition d'un mauvais bloc, physiquement altéré, lors d'une tentative d'accès en lecture ou en écriture ou en effacement sur ledit bloc, le procédé comprenant l'établissement d'une liste simulée de mauvais blocs, destinée à être considérés comme des mauvais blocs par le pilote de la mémoire flash, et la mise en oeuvre d'un algorithme, ledit algorithme comprenant le renvoi d'une erreur à destination de l'application lorsque ladite application cherche à accéder en lecture ou en écriture ou en effacement à un bloc de la mémoire flash appartenant à la liste simulée de mauvais blocs. Grâce au procédé selon l'invention, il est possible de vérifier le comportement d'une application appartenant à une couche supérieure d'un pilote de mémoire flash vis-à-vis d'une apparition subite d'un nouveau mauvais bloc. Selon un mode de réalisation préféré, l'algorithme est intégré au pilote de la mémoire flash. Selon un mode de réalisation, la liste simulée de mauvais blocs comprend, pour chaque mauvais bloc simulé de ladite liste simulée de mauvais blocs, une mention selon laquelle ledit mauvais bloc simulé est un mauvais bloc simulé en lecture et/ou un mauvais bloc simulé en écriture et/ou un mauvais bloc simulé en effacement. Selon un mode de réalisation, l'algorithme comprend les étapes 35 conditionnelles suivantes, lors d'une tentative de l'application d'accéder en lecture à une page d'un bloc : 3044125 4 - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en effacement, et s'il y a déjà eu une tentative d'effacement avec retour d'erreur, alors aucune lecture de la page n'est effectuée et une erreur est renvoyée à l'application ; 5 - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en écriture, et s'il y a déjà eu une tentative d'écriture avec retour d'erreur, alors aucune lecture de la page n'est effectuée et une erreur est renvoyée à l'application ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention 10 mauvais bloc simulé en écriture, et s'il n'y a pas encore eu de tentative d'écriture dans ledit bloc, alors une lecture normale de la page est effectuée ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en effacement, et s'il n'y a pas encore eu de tentative d'effacement dudit bloc, alors une lecture normale de la page est effectuée. 15 Selon un mode de réalisation, l'algorithme comprend les étapes conditionnelles suivantes, lors d'une tentative de l'application d'accéder en écriture à une page d'un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en effacement, et s'il y a déjà eu une tentative d'effacement 20 avec retour d'erreur, alors aucune écriture dans la page n'est effectuée et une erreur est renvoyée à l'application ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en écriture, alors aucune écriture dans la page n'est effectuée et une erreur est renvoyée à l'application ; 25 - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en effacement, et s'il n'y a pas encore eu de tentative d'effacement dudit bloc, alors une écriture normale dans la page est effectuée. Selon un mode de réalisation, l'algorithme comprend les étapes conditionnelles suivantes, lors d'une tentative de l'application d'accéder en effacement à 30 un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en effacement, alors un effacement du bloc est effectué et une erreur est renvoyée à l'application ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en écriture, et s'il y a déjà eu une tentative d'écriture dans le bloc avec retour d'erreur, alors un effacement du bloc est effectué et une erreur est renvoyée à l'application ; 3044125 5 - si ledit bloc se trouve dans la liste simulée de mauvais blocs avec la mention mauvais bloc simulé en écriture, et s'il n'y a pas encore eu de tentative d'écriture dans ledit bloc, alors un effacement du bloc est effectué et aucune erreur n'est renvoyée à l'application. 5 Selon un mode de réalisation, chaque bloc comprend une zone réservée comportant une balise apte à indiquer que ledit bloc est un mauvais bloc, dans lequel l'algorithme mis en oeuvre comprend la lecture et l'écriture réelle de ladite balise. Selon un mode de réalisation, ladite application testée est un algorithme de nivellement d'usure de la mémoire flash. 10 Selon un mode de réalisation, ladite application est un algorithme de gestion des mauvais blocs de la mémoire flash. L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple, et se référant aux dessins annexés qui représentent : 15 - la figure 1, un schéma bloc fonctionnel, correspondant à un mode de réalisation préféré du procédé selon l'invention, dans le cas où un nouveau mauvais bloc apparaît lors d'une tentative d'accès en lecture ; - la figure 2, un schéma bloc fonctionnel, correspondant au mode de réalisation préféré du procédé selon l'invention, dans le cas où un nouveau 20 mauvais bloc apparaît lors d'une tentative d'accès en écriture ; - la figure 3, un schéma bloc fonctionnel, correspondant au mode de réalisation préféré du procédé selon l'invention, dans le cas où un nouveau mauvais bloc apparaît lors d'une tentative d'accès en effacement. Il faut noter que les figures exposent l'invention de manière détaillée pour en 25 permettre la mise en oeuvre, lesdites figures pouvant bien entendu également servir à mieux définir l'invention. L'invention est présentée principalement en vue d'une mise en oeuvre du procédé de test d'une application appartenant à une couche supérieure d'un pilote de mémoire flash, quel que soit le domaine technique dans lequel ladite mémoire flash est 30 mise en oeuvre. Cependant, le procédé selon l'invention vise notamment le domaine technique de l'automobile, dans lequel des mémoires non volatiles, de type mémoire flash NAND, sont couramment mises en oeuvre, et dans lequel le cycle de vie du produit - l'automobile - peut être long au regard du nombre de cycles autorisés sur lesdites mémoires flash. 35 Comme brièvement décrit précédemment, le procédé selon l'invention vise à tester le comportement d'une application appartenant à une couche supérieure d'un pilote 3044125 6 de mémoire flash vis-à-vis de l'apparition subite d'un mauvais bloc non préalablement déclaré. Ainsi, il s'agit de permettre de vérifier le comportement de ladite application dans l'hypothèse où elle chercherait à accéder à un bloc physiquement altéré, ledit bloc 5 n'étant pas balisé dans la zone réservée du bloc concerné comme étant un mauvais bloc (l'homme du métier recourant à des expressions en anglais pourrait dire que le « bad block tag » du « spare area » du bloc en question ne mentionne pas ledit « block » comme étant un « bad block »). A cette fin, le procédé selon l'invention comprend la création d'une liste 10 simulée de mauvais blocs. Cette liste est imposée au pilote de la mémoire flash, instaurant de ce fait l'existence virtuelle de mauvais blocs renvoyant une erreur à l'application qui chercherait à y accéder en lecture, en écriture, en effacement. De préférence, il est prévu que les blocs appartenant à la liste simulée de mauvais blocs sont marqués comme étant des mauvais blocs en lecture et/ou en écriture 15 et/ou en effacement. Le procédé selon l'invention comprend en outre un algorithme mis en oeuvre par le pilote de la mémoire flash, permettant de simuler le type d'erreur renvoyée à l'application, selon que le mauvais bloc simulé empêche un accès en lecture, en écriture ou en effacement. 20 Dès lors, le procédé selon l'invention permet de constater si le comportement de l'application confrontée à l'apparition subite d'un mauvais bloc est sûr ou non. Les figures 1 à 3 consistent en des schémas-blocs fonctionnels représentant le procédé selon l'invention, conformément à un mode de réalisation préféré. En référence aux figures 1 à 3, ledit procédé comporte ainsi la mise en 25 oeuvre d'un algorithme comprenant différentes étapes conditionnelles, selon le type de mauvais blocs simulés rencontrés. Ainsi, en référence à la figure 1, lors d'une tentative de l'application d'accéder en lecture R à une page d'un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention 30 mauvais bloc simulé en effacement BBE, et s'il y a déjà eu une tentative d'effacement ET avec retour d'erreur, alors aucune lecture de la page n'est effectuée et une erreur est renvoyée à l'application (étape NOR) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en écriture BBW, et s'il y a déjà eu une tentative 35 d'écriture WT avec retour d'erreur, alors aucune lecture de la page n'est effectuée et une erreur est renvoyée à l'application (étape NOR) ; 3044125 7 - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en écriture BBW, et s'il n'y a pas encore eu de tentative d'écriture dans ledit bloc, alors une lecture normale de la page est effectuée (étape R) ; 5 - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en effacement BBE, et s'il n'y a pas encore eu de tentative d'effacement dudit bloc, alors une lecture normale de la page est effectuée (étape R). En référence à la figure 2, lors d'une tentative de l'application d'accéder en 10 écriture W à une page d'un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en effacement BBE, et s'il y a déjà eu une tentative d'effacement ET avec retour d'erreur, alors aucune écriture dans la page n'est effectuée et une erreur est renvoyée à l'application (étape NOW) ; 15 - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en écriture BBW, alors aucune écriture dans la page n'est effectuée et une erreur est renvoyée à l'application (étape NOW) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en effacement BBE, et s'il n'y a pas encore eu de tentative 20 d'effacement dudit bloc, alors une écriture normale dans la page est effectuée (étape W). En référence à la figure 3, lors d'une tentative de l'application d'accéder en effacement E à un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention 25 mauvais bloc simulé en effacement BBE, alors un effacement du bloc est effectué et une erreur est renvoyée à l'application (étape E) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en écriture BBW, et s'il y a déjà eu une tentative d'écriture WT dans le bloc avec retour d'erreur, alors un effacement du bloc est 30 effectué et une erreur est renvoyée à l'application (étape E) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs BB avec la mention mauvais bloc simulé en écriture BBW, et s'il n'y a pas encore eu de tentative d'écriture dans ledit bloc, alors un effacement du bloc est effectué et aucune erreur n'est renvoyée à l'application (étape E'). 35 Par ailleurs, chaque bloc comprend en général une zone réservée - une « spare area » selon l'expression en anglais connue de l'homme du métier - comportant une balise apte à indiquer que ledit bloc est un mauvais bloc - un « bad block tag » selon 3044125 8 l'expression en anglais connue de l'homme du métier - ; il est à noter que, selon le mode de réalisation préféré, l'algorithme mis en oeuvre comprend la lecture et l'écriture réelle de ladite balise quelle que soit la situation. En résumé, la présente invention concerne un procédé permettant de tester le 5 comportement d'une application appartenant à une couche supérieure d'un pilote de mémoire flash, telle qu'un algorithme de nivellement d'usure ou un algorithme de gestion des mauvais blocs, vis-à-vis de l'apparition subite d'un nouveau mauvais bloc dans une mémoire flash à laquelle il tente d'accéder. Il est précisé, en outre, que la présente invention n'est pas limitée au mode de 10 réalisation décrit ci-dessus et est susceptible de variantes accessibles à l'homme de l'art. REVENDICATIONS1. Procédé de test d'une application appartenant à une couche supérieure d'un pilote d'une mémoire flash non volatile de type NAND, ladite mémoire flash comprenant un ensemble de blocs auxquels l'application accède en lecture ou en écriture ou en effacement, chaque bloc comportant une pluralité de pages, ledit test visant à vérifier le comportement de l'application vis-à-vis de l'apparition d'un mauvais bloc, physiquement altéré, lors d'une tentative d'accès en lecture ou en écriture ou en effacement sur ledit bloc, le procédé comprenant l'établissement d'une liste simulée de mauvais blocs, destinée à être considérés comme des mauvais blocs par le pilote de la mémoire flash, et la mise en oeuvre d'un algorithme, ledit algorithme comprenant le renvoi d'une erreur à destination de l'application lorsque ladite application cherche à accéder en lecture ou en écriture ou en effacement à un bloc de la mémoire flash appartenant à la liste simulée de mauvais blocs. 2. Procédé selon la revendication précédente, dans lequel l'algorithme est intégré au pilote de la mémoire flash. 3. Procédé selon l'une quelconque des revendications précédentes, dans lequel la liste simulée de mauvais blocs comprend, pour chaque mauvais bloc simulé de ladite liste simulée de mauvais blocs, une mention selon laquelle ledit mauvais bloc simulé est un mauvais bloc simulé en lecture et/ou un mauvais bloc simulé en écriture et/ou un mauvais bloc simulé en effacement. 4. Procédé selon la revendication précédente, dans lequel l'algorithme comprend les étapes conditionnelles suivantes, lors d'une tentative de l'application d'accéder en lecture à une page d'un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en effacement (BBE), et s'il y a déjà eu une tentative d'effacement (ET) avec retour d'erreur, alors aucune lecture de la page n'est effectuée et une erreur est renvoyée à l'application (NOR) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en écriture (BBW), et s'il y a déjà eu une tentative d'écriture (WT) avec retour d'erreur, alors aucune lecture de la page n'est effectuée et une erreur est renvoyée à l'application (NOR) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en écriture (BBW), et s'il n'y a pas encore eu de tentative d'écriture dans ledit bloc, alors une lecture normale de la page est effectuée (R) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en effacement (BBE), et s'il n'y a pas encore eu de 3044125 10 tentative d'effacement dudit bloc, alors une lecture normale de la page est effectuée (R). 5. Procédé selon l'une quelconque des revendications 3 à 4, dans lequel l'algorithme comprend les étapes conditionnelles suivantes, lors d'une tentative de 5 l'application d'accéder en écriture à une page d'un bloc : - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en effacement (BBE), et s'il y a déjà eu une tentative d'effacement (ET) avec retour d'erreur, alors aucune écriture dans la page n'est effectuée et une erreur est renvoyée à l'application (NOW) ; 10 - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en écriture (BBW), alors aucune écriture dans la page n'est effectuée et une erreur est renvoyée à l'application (NOW) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en effacement (BBE), et s'il n'y a pas encore eu de 15 tentative d'effacement dudit bloc, alors une écriture normale dans la page est effectuée (W). 6. Procédé selon l'une quelconque des revendications 3 à 5, dans lequel l'algorithme comprend les étapes conditionnelles suivantes, lors d'une tentative de l'application d'accéder en effacement à un bloc : 20 - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en effacement (BBE), alors un effacement du bloc est effectué et une erreur est renvoyée à l'application (E) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en écriture (BBW), et s'il y a déjà eu une tentative 25 d'écriture (WT) dans le bloc avec retour d'erreur, alors un effacement du bloc est effectué et une erreur est renvoyée à l'application (E) ; - si ledit bloc se trouve dans la liste simulée de mauvais blocs (BB) avec la mention mauvais bloc simulé en écriture (BBW), et s'il n'y a pas encore eu de tentative d'écriture dans ledit bloc, alors un effacement du bloc est effectué et 30 aucune erreur n'est renvoyée à l'application (E'). 7. Procédé selon l'une quelconque des revendications précédentes, chaque bloc comprenant une zone réservée comportant une balise apte à indiquer que ledit bloc est un mauvais bloc, dans lequel l'algorithme mis en oeuvre comprend la lecture et l'écriture réelle de la dite balise. 35 8. Procédé selon l'une quelconque des revendications précédentes, dans lequel ladite application testée est un algorithme de nivellement d'usure de la mémoire flash. 3044125 11 9. Procédé selon l'une quelconque des revendications 1 à 7, dans lequel ladite application est un algorithme de gestion des mauvais blocs de la mémoire flash.