FR 2977047 A1 20121228 FR 1101929 A 20110622 Procédé de gestion de l'endurance de mémoires non volatiles L'invention concerne un nouveau procédé de gestion de l'endurance destiné à des dispositifs dé stockage de données, tels que par exemple des mémoires non volatiles, en particulier les mémoires non volatiles utilisables dans des applications embarquées. Contexte de l'invention Dans le domaine des mémoires informatiques, les mémoires non volatiles se caractérisent par le fait qu'elles peuvent conserver leur contenu même lorsqu'elles ne sont pas alimentées. Cette caractéristique très intéressante introduit deux nouveaux paramètres caractéristiques de ces types de mémoires, à savoir: - La rétention : le temps de rétention est la durée pendant laquelle une mémoire non volatile peut conserver ses données sans rafraichissement, que la mémoire soit alimentée ou non. - La capacité d'endurance : c'est le nombre de fois que l'on peut effacer et réécrire une case mémoire avant que celle-ci ne soit plus en mesure d'être écrite correctement. Une fois « usée », la case mémoire peut présenter soit des problèmes de rétention, soit plus simplement ne pas restituer à la lecture la valeur qui y a été préalablement écrite. La présente invention s'attache plus spécifiquement à résoudre le problème de la capacité d'endurance insuffisante de certains dispositifs de stockage de données, comme cela sera décrit en particulier dans le cas des mémoires non volatiles. La capacité d'endurance des mémoires non volatiles : Suivant le type de mémoire non volatile (EZPROM, FLASH, MRAM ...), la capacité d'endurance est très variable. On peut parler de quelques milliers de cycles d'effacement/écriture sur certaines mémoires FLASH jusqu'à quelques centaines de milliers de cycles de programmation et d'effacement sur les meilleures d'entre elles (FLASH ou E2PROM). Cette capacité d'endurance est évidemment fonction du type de mémoire (par exemple une mémoire E2PROM est souvent meilleure qu'une mémoire FLASH du point de vue de l'endurance), du procédé technologique de fabrication employé (par exemple un procédé utilisant une finesse de gravure de 0.09pm), mais elle est aussi très variable de case mémoire à case mémoire (dans le cas des mémoires FLASH par exemple, on parle d'ailleurs de secteur de mémoire plutôt que de case mémoire). Pour une technologie donnée, un fondeur devra garantir une capacité d'endurance minimale (par exemple de 10 000 cycles). Cette capacité d'endurance est appelée « endurance native ». Dans la réalité, cela reviendra à assurer que le plus « mauvais » des secteurs peut supporter 10 000 cycles de programmation et d'effacement. Les autres secteurs pourront supporter des capacités bien au dessus de 10 000 cycles avec une variabilité pouvant les emmener parfois à plusieurs centaines de milliers voire des millions de cycles. Cette variabilité de la capacité d'endurance suit une distribution 20 statistique dite de Weibull. Besoin d'endurance des applications : Suivant le type d'utilisation de la mémoire non volatile, le besoin d'endurance est extrêmement variable, comme le montrent les exemples ci-dessous. 25 Cas du stockage permanent de programme : Si la NVM (« Non Volatile Memory » en terminologie anglosaxonne, ou mémoire non volatile) stocke un programme destiné à être exécuté par un microprocesseur (c'est le cas du programme dans les systèmes 30 embarqués), le besoin d'endurance est très bas puisque ce programme ne va quasiment pas changer au cours du temps. Historiquement, ce type de contenu était stocké dans de la mémoire ROM (non modifiable) ce qui explique que le besoin d'endurance soit très bas. Cas du stockage de fichiers : C'est le cas typique par exemple des mémoires de type « Solid State Drive » (SSD) très utilisées de nos jours dans les ordinateurs de bureau ou ordinateurs portables, les clefs USB ou les baladeurs MP3. Pour ce type d'application, le besoin d'endurance est élevé mais sans règle d'utilisation définissable à priori. Tous les secteurs de la mémoire SSD ont à priori d'un point de vue statistique le même besoin d'endurance avec une exception toutefois pour la table d'allocation des fichiers qui va être mise à jour à chaque fois qu'un fichier est modifié et donc va avoir un besoin d'endurance bien plus élevé. A noter que si on stocke un système d'exploitation sur une mémoire de type SSD, on aura un besoin d'endurance assez bas pour cette zone, mais non détectable à priori, donc non exploitable pour réduire le besoin d'endurance. Typiquement, la granularité des fichiers dans les systèmes de stockage de fichiers est de l'ordre de 4 kilo-octets. Cas du stockage de données : Dans le domaine des applications embarquées par exemple, le microprocesseur va nécessiter en plus de la zone de stockage de programme, une zone de stockage de données. On peut retrouver dans cette zone un système de stockage de fichiers (comme dans l'exemple précédent), mais aussi des objets logiciels utilisés pour le fonctionnement courant (« buffers » ou zones tampons de communications, données de travail etc. ...). Ces objets se caractérisent en général par une taille faible (de l'ordre de grandeur d'un ou de plusieurs mots de processeur CPU jusqu'à quelques kilo-octets) mais avec un besoin d'endurance extrêmement élevé. A noter que la table d'allocation des fichiers du cas précédent (stockage de fichiers) peut très bien rentrer dans cette définition. Elle sera dans ce cas de l'ordre du mot CPU (typiquement 16, 32 ou 64 bits). Etat de la technique On connaît déjà un certain nombre de procédés de gestion de l'endurance des mémoires non volatiles. Sans être exhaustif, on va en rappeler certains, ainsi que leurs principales caractéristiques. 10 La Correction d'erreur (ECC) Ce procédé consiste à ajouter à chaque mot de mémoire une extension d'ECC (« Error correction code »). Ceci permet de corriger des erreurs de type unitaire, dites de « single bit fail » en terminologie 15 anglosaxonne, qui sont typiques des problèmes de rétention et d'endurance. La correction d'erreur a parmi ses avantages, le fait de permettre de multiplier l'endurance native de chaque secteur de mémoire par un facteur multiplicatif (2 à 4). Elle peut également aider à la résolution d'autres types de problèmes (comme par exemple une meilleure résistance aux 20 perturbations et une meilleure rétention etc.). En outre, c'est un procédé local plutôt simple ne nécessitant pas de RAM supplémentaire. Il ne nécessite qu'un codeur/décodeur d'ECC, présentant un faible coût en portes logiques. Par contre, la correction d'erreurs a aussi une série d'inconvénients. Ainsi, c'est un procédé très coûteux en mémoire non volatile additionnelle: 25 typiquement 250/0 de la mémoire non volatile totale peut être occupée par l'ECC. En outre, seule une implémentation matérielle est possible. Le surcoût matériel doit être payé sur chaque mot mémoire quel que soit le besoin réel d'endurance. Une correction sur plus d'un bit peut être envisagée mais à des coûts prohibitifs.5 En résumé, l'ECC est donc un système simple à mettre en oeuvre, permettant d'améliorer l'endurance native des mémoires non volatiles de manière artificielle mais au prix d'un coût en surface additionnelle de silicium important. Le Remplacement de secteurs mémoire (« Sector Sparing ») Dans ce procédé, on ajoute à la mémoire non volatile un certain nombre de secteurs qui vont servir à remplacer les secteurs hors d'usage. Il sera nécessaire d'utiliser une table de translation d'adresses pour accéder aux secteurs remplacés à leur nouvel emplacement. C'est une solution qui a été abondamment utilisée sur les circuits contrôleurs de disques durs, ne serait-ce que pour gérer les secteurs défectueux, à l'origine ou au cours du temps. Un tel procédé a par exemple déjà été décrit dans le US 22196687 Al. Parmi les avantages de ce procédé, on peut citer le fait que c'est une solution qu'il est possiblede mettre en oeuvre par logiciel. Elle peut être appliquée à des prédateurs d'endurance connus du système d'exploitation (par exemple la table d'allocation des fichiers d'un système de fichiers) sans être déployée sur toute la mémoire. C'est ce qui est fait souvent dans un système d'exploitation pour améliorer l'endurance sur ce type d'objets. On peut décider du nombre de secteurs additionnels en fonction du besoin de remplacement visé (le procédé est dit modulable, ou encore « scalable » en terminologie anglosaxonne). C'est un procédé bien adapté aux granularités faibles. La table de translation d'adresse ne redirige que les secteurs remplacés (il n'y a donc pas de pertes de performances sur le code ou sur les données à besoin d'endurance faible). Enfin, l'algorithme est simple à mettre en oeuvre et peu coûteux en portes logiques et en RAM. Parmi les inconvénients de ce procédé, on remarque qu'il nécessite d'utiliser un critère pour déterminer qu'un secteur est usé. Habituellement on utilise un compteur de cycles et on compare sa sortie avec la garantie d'endurance donnée par le fournisseur de la mémoire. En outre, ce procédé ne sera pas suffisant si la majorité des secteurs a un besoin d'endurance supérieur à l'endurance native puisque le nombre de secteurs additionnels est limité. Ce procédé est donc surtout adapté à un petit nombre de prédateurs d'endurance. Par ailleurs, il faudra sauvegarder (ou recréer) la table de translation d'adresses en cas de coupure de courant. Il convient donc de prévoir de la mémoire non volatile additionnelle pour cela. Le gain en endurance est globalisé et limité à N * endurance native où N est le nombre de secteurs additionnels. De plus, ce procédé devient rapidement plus complexe s'il faut organiser des remplacements de secteurs déjà remplacés. En définitive, c'est un procédé performant, relativement peu coûteux en matériel et en performances CPU mais dont la capacité d'endurance additionnelle est limitée par le nombre de secteurs de remplacement alloués. La répartition de la consommation d'endurance (« Wear Levelling » en terminologie anglosaxonne) Ce procédé de gestion d'endurance consiste à essayer de répartir de la manière la plus homogène possible le besoin d'endurance sur un maximum de secteurs afin de pouvoir profiter de l'endurance native de tous. Pour cela la technique générale consiste à écrire le nouveau contenu d'un secteur dans un secteur libre puis à invalider l'ancien secteur qui devient à son tour libre pour une prochaine opération. Une table d'allocation assez complexe est nécessaire pour stocker les relocalisations des secteurs. Il y deux déclinaisons possibles connues de ce procédé: Le « Wear Leveling » dynamique : dans le "Wear Leveling" dynamique, on n'utilise que les secteurs actifs (ceux qui sont mis à jour régulièrement) 30 plus un secteur de remplacement pour les rotations. Cela limite la capacité d'endurance à un sous ensemble de la mémoire. Ce procédé est très utilisé dans les clefs USB. Un tel procédé est décrit notamment dans le document US 2007/0294490 (Freitas et al.). Le « Wear Leveling » statique : ici, en plus du "Wear Leveling" dynamique, on échange de temps en temps des secteurs actifs avec des secteurs inactifs pour accroître la capacité d'endurance. Ce procédé est utilisé par exemple dans les mémoires de type SSD mais est bien plus complexe. Parmi les avantages du « Wear Leveling », on note qu'il permet théoriquement d'avoir une endurance globale égale à la somme de l'endurance native de TOUS les secteurs de la mémoire. Cette méthode donne donc le plus haut niveau d'endurance possible. Elle permet de traiter un grand nombre de prédateurs d'endurance. Et c'est une solution possible à mettre en oeuvre en logiciel. Parmi les inconvénients de ce procédé, on remarque qu'en pratique l'endurance globale est limitée aux secteurs actifs (pour le « Wear Leveling » dynamique). Sinon, il faut organiser la rotation de secteurs inactifs ce qui augmente beaucoup la complexité des algorithmes, comme dans le cas du « Wear Leveling » statique. En outre, il y a une baisse de performances d'accès à la mémoire lors de la rotation des secteurs inactifs ou l'identification de périodes où la rotation peut être faite en temps masqué. Par ailleurs, l'indirection d'adresse étant généralisée à toute la mémoire, ce procédé affecte également les performances de lecture et d'exécution de code (dite « fetch »), Si le code est contenu dans la mémoire Flash, et pas seulement les performances de lecture de données (dite « data read »). En outre, le besoin de mémoire RAM est très important pour stocker les relocalisations de secteurs. De plus, ce procédé impose la nécessité absolue de savoir recréer la table d'allocation au démarrage du circuit et donc de stocker son contenu en mémoire non volatile d'une manière ou d'une autre. La rotation des secteurs étant homogène, le procédé va s'arrêter lorsque le plus faible des sécteurs impliqués dans la rotation va atteindre sa limite d'endurance native. Inconvénients de l'état de la technique En résumé, comme on le constate, aucun des procédés de gestion d'endurance connus ne sait tirer parti de manière fine et granulaire des 10 caractéristiques intrinsèques d'endurance des mémoires, ni des différences de besoin d'endurance en fonction des applications visées pour les mémoires. But de l'invention 15 Un but général de l'invention est par conséquent de proposer un procédé de gestion de l'endurance d'une mémoire non volatile qui soit à même de remédier aux inconvénients des procédés de gestion d'endurance connus, afin d'améliorer l'endurance globale d'une mémoire. 20 Un but plus spécifique de l'invention est de proposer un procédé de gestion de l'endurance d'une mémoire apte à utiliser la limite réelle, physique, d'endurance de chaque secteur de mémoire. Un autre but de l'invention est de proposer un procédé de gestion de l'endurance qui soit à même d'augmenter l'endurance globale d'une mémoire 25 non volatile, de la manière la plus efficace et à moindre coût. Résumé de l'invention Ces buts sont atteints par le procédé de gestion d'endurance selon 30 l'invention, telle que définie dans les revendications.5 A cet effet, l'invention a pour objet un procédé de gestion de l'endurance d'un système de stockage de données pourvu d'un ensemble de secteurs assortis d'une capacité d'endurance native garantie (G), comportant les étapes consistant à : - partitionner ledit système de stockage de données en une pluralité de secteurs de travail, et en une pluralité de secteurs de remplacement aptes à former un réservoir d'endurance, certains des secteurs de travail étant destinés à être remplacés par des secteurs de remplacement lorsque lesdits secteurs de travail sont usés après un certain nombre de cycles de programmation et/ou d'effacement; - définir une table de translation d'adressses permettant de retrouver l'emplacement des secteurs de remplacement affectés à des secteurs de travail usés ; - caractérisé en ce qu'il comporte une étape consistant à déterminer, secteur par secteur, si un secteur de travail courant est physiquement usé, et une étape de remplacement de ce secteur de travail par un secteur de remplacement exécutée uniquement lorsque ledit secteur de travail courant est déclaré physiquement usé. De façon avantageuse, ce procédé prévoit également que pour déterminer si un secteur de travail courant est physiquement usé, on teste la fin de vie réelle dudit secteur, sans tenir compte de l'endurance native indiquée pour ce secteur. Dans un mode de réalisation préféré de l'invention, le procédé prévoit que pour tester la fin de vie réelle d'un secteur de travail courant en mode 25 effacement, on effectue les opérations suivantes : effacer ledit secteur de la mémoire de travail; - mesurer la qualité d'effacement dudit secteur courant de la mémoire de travail ; - si la qualité d'effacement dudit secteur de travail est inférieure 30 à un seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant usé et entamer une procédure de remplacement de ce secteur de travail par un secteur de remplacement provenant du réservoir d'endurance ; - si la qualité d'effacement est supérieure ou égale audit seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant valide. De façon similaire, le procédé prévoit que pour tester la fin de vie réelle d'un secteur de travail courant en mode programmation, on effectue les opérations suivantes : - programmer ledit secteur de la mémoire de travail; mesurer la qualité de programmation dudit secteur courant de la mémoire de travail ; - si la qualité de programmation dudit secteur de travail est inférieure à un seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant usé et entamer une procédure de remplacement de ce secteur de travail par un secteur de remplacement provenant du réservoir d'endurance ; - si la qualité de programmation est supérieure ou égale audit seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant valide. Selon l'invention, la détermination de l'usure des secteurs de la mémoire de travail se fait en temps réel lors de l'utilisation de chaque secteur. En outre, pour mesurer la qualité d'effacement ou de programmation d'un secteur, on procède à une lecture de la qualité d'effacement ou de programmation des points mémoire du secteur, par rapport à un critère normal (Normal Vref.) de tension de seuil limite. En variante, on procède à une lecture de la qualité d'effacement ou de programmation des points mémoire du secteur par rapport à un critère de lecture (Margin Vref.) plus sévère qu'un critère normal. Dans une autre variante du procédé selon l'invention, dans laquelle une impulsion d'effacement ou de programmation unique est remplacée par plusieurs impulsions plus faibles appliquées de façon séquentielle, un test de qualité d'effacement ou de programmation est pratiqué après chaque impulsion, et un secteur de mémoire de travail est déclaré usé si lesdits tests de qualité restent négatifs après un nombre maximal prédéfini d'impulsions et de tests. Selon un aspect avantageux du procédé selon l'invention, un secteur de travail remplacé par un secteur de remplacement devient lui-même un secteur de travail susceptible d'être remplacé lorsqu'il aura atteint son seuil d'usure physique. L'invention a également pour objet un dispositif pour la mise en oeuvre du procédé de gestion d'endurance ci-dessus, caractérisé en ce qu'il comporte une mémoire partitionnée en une pluralité de secteurs de travail et de secteurs de remplacement, une table d'allocation des secteurs, un automate apte à exécuter les étapes du procédé selon l'une quelconque des revendications 1 à 9, et un dispositif de mesure de l'usure physique des secteurs de la mémoire. D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description détaillée des dessins annexés, dans lesquels : - la figure 1 représente une courbe de distribution de l'endurance 20 native des secteurs d'une mémoire; - la figure 2 représente un organigramme des étapes du procédé selon l'invention; - la figure 3 représente une vue schématique de l'organisation d'une mémoire non volatile à laquelle peut être appliqué le procédé selon 25 l'invention; - la figure 4 représente de façon schématique le principe mis en oeuvre pour la mesure de la qualité d'effacement; - la figure 5 représente de façon plus détaillée l'organigramme des étapes correspondant à l'opération d'effacement dans l'organigramme de la 30 figure 2. On se réfère à la figure 1. On a représenté dans cette figure un graphe de la répartition statistique des secteurs d'une mémoire en fonction de leur capacité d'endurance. On aura donc en ordonnée, le pourcentage des secteurs pour une endurance donnée en abscisse. L'endurance en abscisse peut être exprimée en un nombre d'effacements possibles, qui représente en fait la capacité d'endurance du secteur. Comme on le voit sur le graphe 10, la distribution de la proportion des secteurs en fonction de l'endurance a une forme de gaussienne, répartie autour d'une valeur moyenne notée EM, et tous les secteurs ont une endurance supérieure à l'endurance minimale garantie pour les secteurs de cette mémoire, encore appelée endurance native ou intrinsèque, et notée G. En pratique, le fabricant de la mémoire va donner une valeur d'endurance garantie G, indiquant que l'endurance de tous les secteurs est supérieure à cette valeur d'endurance garantie. Or la forme des courbes d'endurance est en pratique très étalée (elle n'est pas représentée à l'échelle dans la figure 1), ce qui signifie que la valeur de l'endurance minimale G est très inférieure à la valeur d'endurance moyenne EM. Un des objectifs essentiels du procédé de gestion d'endurance selon l'invention est de faire en sorte que grâce au procédé, la valeur d'endurance réellement utilisable soit très supérieure, à savoir supérieure de plusieurs ordres de grandeur, à la valeur d'endurance minimale G garantie par le fabricant de la mémoire. On se réfère maintenant à la figure 2 représentant un organigramme des étapes du procédé selon l'invention. Ce procédé est mis en oeuvre par une machine d'état, et appliqué à un secteur courant de la mémoire. A partir d'un état de repos 20, on décide en 21 s'il faut effacer le secteur courant. Dans l'affirmative, en 22, on procède à l'effacement, ce qui consiste à envoyer au secteur courant de la mémoire une tension suffisante pour provoquer l'effacement des cellules. Puis en 23 on procède à une vérification de la qualité d'effacement, selon une méthode de vérification choisie parmi plusieurs disponibles, tel que décrit plus loin. Si le résultat du test de la qualité d'effacement est bon (branche 24), on passe à l'étape 26 et on considère que l'effacement a été fait de façon satisfaisante. Si par contre le résultat de la qualité du test d'effacement en 23 est mauvais, on considère que le secteur courant de la mémoire est usé, et on le remplace en 25 par un secteur de remplacement bon (et au préalable effacé), ce qui revient à considérer que l'effacement a été effectué (repère 26). On se réfère à lâ figure 3 montrant de façon schématique l'organisation d'une mémoire 30 non volatile, par exemple de type FLASH, comprenant une zone de travail 31 et une zone de remplacement 32, chaque zone étant découpée en secteurs, par exemple des secteurs de travail 33 et des secteurs de remplacement 34. Quand le test d'effacement appliqué à un secteur (par exemple au secteur 12) indique que ce secteur est usé, on redirige ce secteur vers un secteur donné parmi les secteurs de remplacement 34 de la zone de remplacement 32. Le secteur de remplacement précis de la zone de remplacement qui sera affecté au remplacement du secteur de travail numéro 12, sera déterminé par une table d'allocation 35 permettant de garder la trace des remplacements effectués. Un secteur de travail 33 de la mémoire de travail 31 peut être remplacé un nombre entier n de fois, n étant inférieur à un nombre N correspondant au nombre de secteurs de remplacement 34 contenus dans la zone de remplacement 32. Idéalement, l'invention prévoit que les secteurs 34 de la zone de remplacement 32 peuvent eux aussi être remplacés par d'autres secteurs de la zone de remplacement, au même titre que les secteurs de travail, ce qui permet encore d'augmenter la capacité d'endurance de la mémoire 30. Pour mettre en oeuvre le procédé ci-dessus, on utilisera un automate (non représenté), une table d'allocation (35), une mémoire non volatile (30) et un dispositif de mesure (non représenté) de l'usure des secteurs de la mémoire. L'automate peut être réalisé sous la forme d'une machine d'états matérielle ou logicielle. La table d'allocation 35 peut être réalisée sous la forme d'une mémoire, d'un banc de registres ou d'un fichier logiciel. La mémoire non volatile 30 peut être une mémoire physique ou un autre dispositif de stockage de données. Le dispositif de mesure peut mettre en oeuvre un mode de lecture normal, ou un mode de lecture plus sévère de la mémoire ou tout dispositif permettant de déterminer qu'une opération d'effacement ou de programmation n'a pas été effectuée de manière correcte. Un exemple de dispositif de mesure de l'usure des secteurs va être décrit en relation avec la figure 4, dans laquelle on a représenté un graphe comportant en ordonnée la population de bits d'un secteur donné de la mémoire, en fonction de la tension de seuil Vt des transistors mémoire, représentée en abscisse. Par convention, on considère qu'un bit est « programmé » ou à un niveau zéro, lorsque la tension de seuil du transistor correspondant est supérieure à une tension limite notée Vtm;n, qui dépend de la technologie utilisée pour la mémoire. Inversément, on considère qu'un bit est « effacé » ou à niveau un, lorsque la tension de seuil du transistor correspondant à ce bit est inférieure 20 à une tension limite notée Vtmax- Comme cela est représenté sur la figure 4, les tensions de seuil pour un point mémoire programmé (0) ou effacé (1) varient, et les populations respectives des bits à zéro ou à un en fonction de la tension de seuil appliquée, suivent des distributions (40,41) de forme généralement 25 gaussienne. En lecture dite en « mode normal », on compare la tension de seuil Vt du point mémoire courant à une référence fixe, notée Normal Vref, située entre les tensions limites Vtmm et Vtmax (et schématisée par un trait interompu), et on classe le point mémoire donné comme étant à zéro ou à 30 un en fonction du résultat de la comparaison par rapport à la tension de seuil de référence normale, Normal Vref. En lecture dite en « mode sévérisé», on compare la tension de seuil du point mémoire courant à une autre référence, notée Margin Vre . (non représentée), supérieure a Vtmax mais inférieure à la référence précédente Normal VRef. Par conséquent, un point mémoire ayant une tension de seuil Vt située entre la référence de lecture en mode normal, Normal VRef., et la référence de lecture en « mode sévérisé », Margin VRef., pourrait être considéré comme ayant une valeur différente en mode normal (par exemple un zéro à la place d'un un, ou inversément), de celle obtenue avec une lecture en « mode sévérisé ». Ces modes de lecture de la tension de seuil d'un point mémoire, qu'il s'agisse du mode normal ou du mode sévérisé, peuvent être utilisés dans le procédé selon l'invention pour mesurer la qualité d'effacement d'un secteur. Ils vont en effet permettre de détecter si un secteur est réellement bien effacé sans se baser sur la limite théorique d'endurance de celui-ci, mais bien sur ses qualités physiques intrinsèques. Le procédé permet aussi de garantir que la lecture de vérification de l'effacement est robuste. On se réfère à la figure 5 représentant une variante du procédé d'effacement d'un secteur de mémoire, dans laquelle l'étape d'effacement normale 22 à impulsion unique de l'organigramme de la figure 2, est remplacée par un effacement à impulsions d'effacement multiples. De façon générale, effacer un point mémoire consiste à lui appliquer une haute tension et à lui amener une certaine énergie, ce qui finit par l'abimer et par le rendre illisible. Dans une variante avantageuse de l'invention, il est prévu de n'appliquer à chaque point mémoire que la tension d'effacement nécessaire, ce qui permet d'augmenter la durée de vie de chaque point mémoire, et par conséquent la durée de vie du réservoir d'endurance et donc de la mémoire tout entière. A cet effet, l'invention prévoit de remplacer une impulsion d'effacement normale et unique, par plusieurs impulsions plus faibles appliquées de façon séquentielle, avec un test de qualité d'effacement pratiqué après chaque impulsion d'effacement. Les impulsions faibles étant appliquées jusqu'à ce que le test de qualité d'effacement soit positif, ou jusqu'à ce qu'un nombre prédéfini d'impulsions faibles aient été appliquées. Si le test de qualité d'effacement est encore mauvais après l'application du nombre maximal prédéfini d'impulsions faibles, on considère que le secteur de mémoire est usé et on procède à son remplacement par allocation d'un secteur de la zone de remplacement. On voit bien que si le test de qualité d'effacement donne un bon résultat après un nombre d'impulsions inférieur au nombre maximal prédéfini d'impulsions, la quantité totale d'énergie appliquée pour effacer ce secteur aura été inférieure à celle d'un effacement classique, ce qui contribue à prolonger la durée de vie de la mémoire. Comme expliqué précédemment, le test de qualité d'effacement peut être effectué en mode normal, ou en mode sévérisé. Avantages de l'invention L'invention telle que décrite permet d'atteindre les buts fixés. Elle permet avant tout d'atteindre des capacités d'endurance très élevées, presque équivalentes à celles obtenues par les méthodes dites de « Wear Leveling », mais sans les inconvénients de celles-ci. L'invention est par conséquent particulièrement utile dans des environnements où tous les objets de données n'ont pas un besoin élevé d'endurance, ce qui est en général le cas notamment dans des applications de type logiciel embarqué et sécurisé, où seul un petit nombre d'objets nécessite une endurance élevée. Cette méthode prend alors tout son sens pour un coût très limité,' mais elle est utilisable sur tout autre type d'application ou de dispositif de stockage connu ou à venir et ayant des besoins d'endurance similaires. un critère d'usure physique et non simplement statistique est absolument 30 fondamental pour assurer une endurance globale élevée de la mémoire. Cela permet à la fois de maximiser l'utilisation d'un secteur d'origine avant d'avoir à le remplacer (et donc de diminuer le besoin en secteurs de remplacement) mais également de maximiser la valeur du « réservoir d'endurance ». L'utilisation du mécanisme de mesure de la qualité d'effacement permet également de n'appliquer que la quantité nécessaire de tension d'effacement à un secteur et donc d'en maximiser la durée de vie. En pratique, le nombre de secteurs de remplacement nécessaires peut aisément être ajusté en fonction du besoin d'endurance visé. En outre, le procédé selon l'invention permet d'éliminer rapidement du réservoir d'endurance les secteurs faibles demandant beaucoup d'endurance. Le procédé selon l'invention n'est que faiblement pénalisant en terme de coût de mémoire supplémentaire, ce coût est en effet très faible puisque proportionnel à l'endurance globale visée et non pas à la taille de la mémoire. Le besoin en mémoire RAM et en logique de contrôle est extrêmement faible surtout comparé à celui requis par les procédés dits de « wear Leveling » dynamique ou statique. Le procédé selon l'invention permet une utilisation optimale de l'endurance des secteurs participant au système. Les secteurs d'origine ne demandant pas plus d'endurance qu'ils ne sont capables eux-mêmes de fournir n'entrent jamais dans le système de remplacement (à la différence du « wear Leveling » où théoriquement tous les secteurs participent au système). Il y a donc une baisse drastique du nombre de secteurs de remplacement nécessaires, grâce à l'utilisation optimale des secteurs d'origine. L'invention s'applique aujourd'hui essentiellement aux mémoires non volatiles mais est susceptible de s'appliquer à tout système de stockage 30 de données présentant des phénomènes d'usure. REVENDICATIONS, 1. Procédé de gestion de l'endurance d'un système de stockage de données pourvu d'un ensemble de secteurs assortis d'une capacité d'endurance native garantie (G), comportant les étapes consistant à : - partitionner ledit système de stockage de données en une pluralité de secteurs de travail, et en une pluralité de secteurs de remplacement aptes à former un réservoir d'endurance, certains des secteurs de travail étant destinés à être remplacés par des secteurs de remplacement lorsque lesdits secteurs de travail sont usés après un certain nombre de cycles de programmation et/ou d'effacement; - définir une table de translation d'adressses permettant de retrouver l'emplacement des secteurs de remplacement affectés à des secteurs de travail usés ; - caractérisé en ce qu'il comporte une étape (23) consistant à déterminer, secteur par secteur, si un secteur de travail courant est physiquement usé, et une étape (25) de remplacement de ce secteur de travail par un secteur de remplacement, exécutée uniquement lorsque ledit secteur de travail courant est déclaré physiquement usé. 2. Procédé selon la revendication 1, caractérisé en ce que pour déterminer si un secteur de travail courant est physiquement usé, on teste la fin de vie réelle dudit secteur, sans tenir compte de la capacité d'endurance native garantie (G) du secteur. 3. Procédé selon la revendication 1 ou la revendication 2, caractérisé en ce que pour tester la fin de vie réelle d'un secteur de travail courant en mode effacement, on effectue les opérations suivantes : effacer ledit secteur de la mémoire de travail;25- mesurer la qualité d' effacement dudit secteur courant de la mémoire de travail ; - si la qualité d'effacement dudit secteur de travail est inférieure à un seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant usé et entamer une procédure de remplacement de ce secteur de travail par un secteur de remplacement provenant du réservoir d'endurance ; - si la qualité d'effacement est supérieure ou égale audit seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant valide. 4. Procédé selon la revendication 1 ou la revendication 2, caractérisé en ce que pour tester la fin de vie réelle d'un secteur de travail courant en mode programmation, on effectue les opérations suivantes : - programmer ledit secteur de la mémoire de travail; mesurer la qualité de programmation dudit secteur courant de la mémoire de travail ; - si la qualité de programmation dudit secteur de travail est inférieure à un seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant usé et entamer une procédure de remplacement de ce secteur de travail par un secteur de remplacement provenant du réservoir d'endurance ; - si la qualité de programmation est supérieure ou égale audit seuil de qualité prédéterminé, déclarer ce secteur de travail comme étant valide. 5. Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que la détermination de l'usure des secteurs de la mémoire de travail se fait en temps réel lors de l'utilisation de chaque secteur.30 6. Procédé selon la revendication 3 ou la revendication 4, caractérisé en ce que pour mesurer la qualité d'effacement ou de programmation d'un secteur, on procéde à une lecture de la qualité d'effacement ou de programmation des points mémoire du secteur, par rapport à un critère normal (Normal Vref.) de tension de seuil limite. 7. Procédé selon la revendication 3 ou la revendication 4, caractérisé en ce que pour mesurer la qualité d'effacement ou de programmation d'un secteur, on procéde à une lecture de la qualité d'effacement ou de programmation des points mémoire du secteur par rapport à un critère de lecture (Margin' Vref.) plus sévère qu'un critère normal. 8. Procédé selon l'une quelconque des revendications 1 à 7, dans lequel une impulsion d'effacement ou de programmation unique est remplacée par plusieurs impulsions plus faibles appliquées de façon séquentielle, caractérisé en ce qu'un test de qualité d'effacement ou de programmation est pratiqué après chaque impulsion, et en ce qu'un secteur de mémoire de travail est déclaré usé si lesdits tests de qualité restent négatifs après un nombre maximal prédéfini d'impulsions et de tests. 9. Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce qu'un secteur de travail remplacé par un secteur de remplacement devient lui-même un secteur de travail susceptible d'être remplacé lorsqu'il aura atteint son seuil d'usure physique. 10. Dispositif pour la mise en oeuvre du procédé de gestion d'endurance selon l'une ' quelconque des revendications précédentes, caractérisé en ce qu'il comporte une mémoire partitionnée en une pluralité de secteurs de travail et de secteurs de remplacement, une table d'allocation des secteurs, un automate apte à exécuter les étapes du procédé selon l'unequelconque des revendications 1 à 9, et un dispositif de mesure de l'usure physique des secteurs de la mémoire.