puis-je écrire dans une page déjà écrite, si j'évite les zones déjà écrites?
Si je comprends p. 16 de la fiche technique correctement, il dit: Avec cette puce particulière, vous ne devez pas écrire dans une page déjà écrite, même si vous évitez les zones déjà écrites.
détails
La puce de mémoire flash SST25VF064C Fiche p. 16 indique "L'instruction de programme de page programme jusqu'à 256 octets de données dans la mémoire. L'adresse de page sélectionnée doit être à l'état effacé (FFH) avant de lancer l'opération de programme de page."
Je suppose donc que "la page sélectionnée entière doit être dans l'état effacé (chaque octet sur la page FFh) avant de lancer une opération de programme de page." SST ou Microchip a-t-il publié de la documentation clarifiant cette phrase exaspérément ambiguë?
D'après mon expérience, le fabricant de toutes les puces flash MLC et de certaines puces flash SLC plus récentes exige qu'une fois qu'une page a été écrite, la page doit être effacée avant que cette page ne soit réécrite, même si vous ne voulez changer que 1 bit en un 0 bit. (Ceci est appelé la "règle d'écriture unique" dans l'article YAFFS .)
D'après mon expérience, toutes les anciennes puces flash vous permettent de changer n'importe quel 1 bit en 0 bit sans cycle d'effacement, même si ce bit est dans une page ou même un octet qui a déjà eu d'autres bits programmés à zéro - un la page du flash peut être programmée plusieurs fois entre les effacements. (Ceci est appelé "écriture multiple" dans l'article YAFFS).
La fiche technique du fabricant est une promesse conditionnelle que le fabricant vous fait. Tant que vous suivez toutes les recommandations de la fiche technique, le fabricant promet que la puce fonctionnera comme spécifié. Je soupçonne que si vous programmez une page déjà écrite, en évitant les zones déjà écrites, il y a de fortes chances qu'une lecture immédiate puisse donner les données que vous attendez - les octets nouvellement écrits sont les valeurs que vous venez d'écrire, et les autres octets sont probablement inchangés. Cependant, comme cela ne suit pas les recommandations de la fiche technique, vous ne pouvez plus compter sur toutes les promesses de la fiche technique. J'entends des rumeurs selon lesquelles une telle activité non autorisée fait souffrir le temps de rétention des données et l'endurance, en raison de la perturbation du programme, de la surprogrammation, du piège de charge, des effets similaires au marteau perforateur DRAM , etc.
"Le schéma d'utilisation de la mémoire influe sur le taux d'erreur sur les bits. Programmation de pages partielles, programmation de pages non séquentielles dans le bloc, lecture excessive par bloc sans effacement ainsi qu'un nombre non égal d'opérations de lecture dans un seul bloc augmentation du nombre de lectures perturber les erreurs. " - Michal Jedrak.
"Mémoire Flash NAND dans les systèmes embarqués".
"Une perturbation de programme se produit lorsqu'un bit est involontairement programmé de" 1 "à" 0 "pendant un événement de programmation de page. Cette erreur de bit peut se produire soit sur la page en cours de programmation, soit sur une autre page du bloc. Conditions de tension de polarisation dans le blocage pendant la programmation de la page peut entraîner une petite quantité de courant à pénétrer dans les cellules de mémoire à proximité. Des tentatives répétées de programmation de page partielle continueront d'aggraver cette situation. " - Douglas Sheldon et Michael Freie.
"Test de dérangement dans les mémoires Flash" . p. 8, 9.
"Une perturbation de programme se produit lorsqu'un bit est involontairement programmé (1 à 0) pendant une opération de programmation. ... Cette condition est aggravée par une programmation aléatoire dans le bloc et par l'application de plusieurs écritures partielles sur les pages."
"Atténuation des défaillances flash Yaffs NAND"