Les mémoires NAND flash ne sont pas très supportées par les principales librairies de microcontrôleurs

J’ai joué un peu avec une mémoire NAND flash et la librairie Adafruit_SPIFlash, sans savoir qu’elle n’était pas supportée. Premièrement, l’indice du JEDEC est décalé d’un octect, je ne sais pas pourquoi. En éditant le fichier Adafruit_SPIFlashBase.cpp à la ligne 114 (fonction begin), j’ai pu corriger cela et faire en sorte que le programme Flash_info fonctionne. J’ai ensuite essayé d’utiliser le programme sdfat_format, sans succès. Le programme a l’air de commencer, mais ne répond pas. Parfois, si je joue avec les câbles ou si j’approche ma main (il y a un effet capacitif étrange), le programme se termine avec l’erreur 13. En monitorant le courant consommé, je peux voir que la chip se met bien en mode active (~4mA de consommation, comparé à 0,2mA en sleep lorsque CS est mis à HIGH), mais qu’il n’y a pas d’écriture qui se produit (il faudrait un courant d’environ 25mA). J’ai abandonné et j’ai fait quelques recherches sur internet pour en savoir plus. Ce qui m’a mis la puce à l’oreille, c’est que toutes les puces définies dans la librairie d’Adafruit sont des NOR ou des FRAM.

Le thread ici parle du problème : https://community.particle.io/t/spiflash-support-for-w25n01gv/58283. Voir le commentaire : https://community.particle.io/t/spiflash-support-for-w25n01gv/58283/5 Voici la raison (entre autres) pourquoi la librairie SPIFlash ne fonctionne pas :

WIth NAND flash it’s always paged read and write with a weird page size of 2,112 bytes for the W24N01GV. So you always have to set the page and work with a page at a time, for both read and write. The SpiFlashRK library only works in linear mode and has no concept of working with paged mode.

Paul Stoffregen, le créateur des Teensy, a dit à deux endroit que les NAND flash ne sont pas supportés par sa librairie : https://forum.pjrc.com/index.php?threads/will-pauls-spiflash-library-work-with-these.31491/#post-92697 et https://github.com/PaulStoffregen/SerialFlash/issues/58#issuecomment-1814185087 « Just to state as clearly as possible, NAND chips are not supported by this library and probably never will be. »

Une possible solution serait d’utiliser la librairie LittleFS, tel que suggéré ici : https://protosupplies.com/product/w25n02g/. Il y a tout de même la gestion des bad blocks et des erreurs à garder en tête, mais ça me semble être la piste la plus réaliste pour faire fonctionner ces chips. https://github.com/PaulStoffregen/LittleFS