Page 1 of 1

Comment connaître espace libre de la Flash sur le Pi Pico ?

Posted: Fri 2 Apr 2021 12:13
by sensor56
Est-ce qu'il y a un moyen simple de connaître l'espace libre restant sur la Flash à partir du code Python sur la carte Pi Pico ? Il semble intéressant de pouvoir connaître l'espace restant depuis le code, notamment si on fait du datalogging, etc. Question idem pour une carte SD d'ailleurs. J'imagine qu'il faut passer par os.statvfs() ? https://docs.micropython.org/en/latest/ ... os.statvfs Et faire quelque chose comme ce qui est indiqué ici : https://stackoverflow.com/questions/426 ... given-file

SI quelqu'un a une combine, je suis preneur...

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Posted: Fri 2 Apr 2021 17:33
by sensor56
Ok, j'ai trouvé et je me réponds à moi-même. Je poste ici en espérant que çà serve à d'autres :

En se basant sur :

* <https://docs.micropython.org/en/latest/library/uos.html>
* <https://stackoverflow.com/questions/426 ... given-file>

On peut faire :

Code: Select all

>>> import os
>>> statvfs = os.statvfs('/')
Par contre on ne peut pas poser comme en CPython:

Code: Select all

statvfs.f_frsize * statvfs.f_blocks     # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree      # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail     # Number of free bytes that ordinary users
                                        # are allowed to use (excl. reserved space
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
AttributeError: 'tuple' object has no attribute 'f_frsize'
En fait, en MicroPython, statvfs est un tuple ce qui ne permet donc pas l'accès direct aux propriétés :

Code: Select all

>>> statvfs
(4096, 4096, 352, 315, 315, 0, 0, 0, 0, 255)
En se basant sur la doc de la fonction statvfs du module uos (https://docs.micropython.org/en/latest/ ... os.statvfs), on peut poser :

Code: Select all

>>> f_bsize, f_frsize, f_blocks,f_bfree,f_bavail, f_bavail, f_ffree, f_favail, f_flag, f_namemax=0,1,2,3,4,5,6,7,8,9
Ensuite, on peut faire facilement :

Code: Select all

>>> statvfs[f_frsize] *statvfs[f_bfree] # free
1290240
>>> statvfs[f_frsize] *statvfs[f_blocks] # total
1441792
>>> totalSize=statvfs[f_frsize] *statvfs[f_blocks]
>>> freeSize=statvfs[f_frsize] *statvfs[f_bfree]
>>> totalSize=statvfs[f_frsize] *statvfs[f_blocks] / 10**6 # en Mo
>>> freeSize=statvfs[f_frsize] *statvfs[f_bfree] / 10**6 # en Mo
>>> print(str(freeSize)+"/"+str(totalSize)+"Mo")
1.29024/1.441792Mo
>>> print(str(freeSize)+" Mo free /"+str(totalSize)+" Mo total")
1.29024 Mo free /1.441792 Mo total
On pourrait facilement mettre tout çà dans une petite fonction utilitaire. Et c'est cool de voir que l'on a plus de 1Mo effectivement libre sur le Pi Pico, ce qui est intéressant pour du datalogging, sans avoir besoin de connecter une carte SD. Par exemple, un fichier de 1440 lignes de data (1 mesure par minute pendant 24H) ne prend que 30Ko environ.

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Posted: Sat 3 Apr 2021 18:49
by Dominique
User mais ne pas abuser

Attention avec les écritures récurrentes en flash... une cellule flash grille au bout de 100.000 cycles d'écriture.
Cela semble beaucoup mais peut être atteint en quelques mois suivant l'intensité data-logging.
MicroPython utilise maintenant LittleFs et je ne sais pas si cela améliore cette contrainte (en distribuant les écritures sur différentes cellules)

Si data-logging intensif alors faut absolument passer sur un stockage externe (soit carte SD, soit EEPROM) que l'on pourra remplacer.

Note: En test intensif, je suis déjà arrivé à griller de la flash en moins de 20 mins.

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Posted: Thu 8 Apr 2021 07:42
by sensor56
reste à savoir si un "append" sur un fichier existant entraîne une ré-écriture complète du fichier ou un simple ajout.

Mais, ok, privilégier l'usage d'une SD si datalogging important.

Et ce rappel sur le nombre max d'écriture en FLASH donne aussi de la pertinence au fait de garder les codes côté PC et de les envoyer en RAM à l'exécution, en phase de développement, plutôt que de les écrire sur la flash à chaque modif.

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Posted: Thu 8 Apr 2021 10:23
by Dominique
sensor56 wrote: Thu 8 Apr 2021 07:42 reste à savoir si un "append" sur un fichier existant entraîne une ré-écriture complète du fichier ou un simple ajout.
A mon avis, tant que le block n'est pas rempli (4096 octets sous MicroPython), on peut s'attendre à des écritures récurrentes partielles dans le bloc tant que celui-ci n'est pas rempli. Cela aura probablement moins d'impact dans le cas d'un append() que lorsque l'on modifie constamment la même section.
sensor56 wrote: Thu 8 Apr 2021 07:42 Et ce rappel sur le nombre max d'écriture en FLASH donne aussi de la pertinence au fait de garder les codes côté PC et de les envoyer en RAM à l'exécution, en phase de développement, plutôt que de les écrire sur la flash à chaque modif.
A tiens, je n'avais pas pensé à celle là!
Mais c'est effectivement pertinent!