Bibliothèque Littlefs_Portnta_H7
Table des matières
- Notes importantes pour Portenta_H7
- Pourquoi avons-nous besoin de cette bibliothèque Littlefs_Portenta_H7
- Caractéristiques
- Boards actuellement pris en charge
- Changelog
- Condition préalable
- Installation
- Utiliser le gestionnaire de bibliothèque Arduino
- Installation manuelle
- Vs code et plateforme
- Correctifs de packages
- 1. Pour les cartes Portenta_H7 utilisant Arduino IDE dans Linux
- Exemples
- 1. Littlefs_Count
- 2. Littlefs_test
- Exemple Littlefs_test
- Débogage des échantillons de sortie de terminal
- 1. Littlefs_Count sur Portenta_H7_M7
- 2. Littlefs_test sur Portenta_H7_M7
- Déboguer
- Dépannage
- Problèmes
- FAIRE
- FAIT
- Contributions et merci
- Contributif
- Licence
- Droit d'auteur
Notes importantes pour Portenta_H7
Le Littlefs de la nouvelle carte Portenta_H7 a actuellement testé OK avec seulement 8 fichiers maximum . Les fichiers, à partir de 9 ans et plus, ne peuvent étrangement pas être écrits et / ou lus. Il s'agit peut-être d'un bug dans le ArduinoCore-mbed mbed_portenta core . Le même comportement est observé de Core v2.0.0 jusqu'à v2.6.1 .
Si la taille LittleFS est réduite à 1024KB , le test est OK avec seulement 4 fichiers maximum .
Méfiez-vous et continuez à vérifier les mises à jour.
Pourquoi avons-nous besoin de cette bibliothèque Littlefs_Portenta_H7
Caractéristiques
Cette bibliothèque est juste un simple emballage LittleFS pour faciliter votre utilisation de LittleFS pour le flash intégré sur MBED Portenta_H7 , en utilisant le noyau arduinocore-mbed Mbed_Portenta
L'accès au système de fichiers utilise des API POSIX normales ou des API de système de fichiers MBED
Boards actuellement pris en charge
- Des cartes Portenta_H7 telles que Portenta_H7 Rev2 Abx00042, etc., en utilisant Arduinocore-Mbed mbed_portenta noyau
Condition préalable
-
Arduino IDE 1.8.19+ pour Arduino. -
ArduinoCore-mbed mbed_portenta core 3.4.1+ pour les cartes Arduino Portenta_H7 , telles que Portenta_H7 Rev2 Abx00042, etc.
Installation
Utiliser le gestionnaire de bibliothèque Arduino
Le moyen le meilleur et le plus simple est d'utiliser Arduino Library Manager . Recherchez Littlefs_portenta_H7 , puis sélectionnez / installez la dernière version. Vous pouvez également utiliser ce lien pour des instructions plus détaillées.
Installation manuelle
Une autre façon d'installer est de:
- Accédez à la page LITTLEFS_PORTENTA_H7 .
- Téléchargez la dernière version
LittleFS_Portenta_H7-main.zip . - Extraire le fichier zip vers le répertoire
LittleFS_Portenta_H7-main - Copiez le dossier entièrement
LittleFS_Portenta_H7-main dans le répertoire des bibliothèques Arduino tels que ~/Arduino/libraries/ .
Vs code et plateforme
- Installer vs code
- Installer PlatformoIo
- Installez la bibliothèque Littlefs_Portnta_H7 en utilisant le gestionnaire de bibliothèque. Recherchez Littlefs_portenta_H7 dans les bibliothèques de l'auteur de Platform.io
- Utilisez le fichier Platformo.ini inclus à partir d'exemples pour s'assurer que toutes les bibliothèques dépendantes seront installées automatiquement. Veuillez visiter la documentation pour les autres options et exemples dans le fichier de configuration du projet
Correctifs de packages
1. Pour les cartes Portenta_H7 utilisant Arduino IDE dans Linux
Pour pouvoir télécharger le firmware sur Portenta_H7 en utilisant Arduino Ide dans Linux (Ubuntu, etc.) , vous devez copier le fichier Portenta_post_install.sh dans le répertoire mbed_portenta (~ / .arduino15 / packages / arduino / matériel / mbed_portenta / 3.4.1 / porta_post_install.sh).
Puis exécutez la commande suivante en utilisant sudo
$ cd ~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1
$ chmod 755 portenta_post_install.sh
$ sudo ./portenta_post_install.sh
Cela créera le fichier /etc/udev/rules.d/49-portenta_h7.rules comme suit:
# Portenta H7 bootloader mode UDEV rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="035b", GROUP="plugdev", MODE="0666"
En supposant que la version noyau Arduinocore-Mbed est 3.4.1. Maintenant, un seul fichier doit être copié dans le répertoire:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1/portenta_post_install.sh
Chaque fois qu'une nouvelle version est installée, n'oubliez pas de copier ces fichiers dans le nouveau répertoire de version. Par exemple, la nouvelle version est x.yy.zz
Ce fichier doit être copié dans le répertoire:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/x.yy.zz/portenta_post_install.sh
Exemples
- Littlefs_Count
- Littlefs_test
Exemple Littlefs_test
| # définir lfs_mbed_portenta_h7_version_min_target " Littlefs_portenta_H7 v1.2.0 " |
| # définir LFS_MBED_PORTA_H7_VERSION_MIN 1002000 |
| |
| # définir _lfs_loglevel_ 1 |
| |
| # define Force_Reformat False |
| |
| # Inclut < Littlefs_Portanta_H7.h > |
| |
| Littlefs_Med * myfs; |
| |
| uint32_t file_size_kb = 64 ; |
| |
| VOID ReadcharsFromfile ( CONS CHAR * PATH) |
| { |
| En série. print ( " ReadcharsFromfile: " ); En série. imprimer (chemin); |
| |
| File * file = fopen (path, " r " ); |
| |
| if (fichier) |
| { |
| En série. println ( " => ouvert ok " ); |
| } |
| autre |
| { |
| En série. println ( " => ouvert échoué " ); |
| retour ; |
| } |
| |
| Char C; |
| |
| tandis que ( vrai ) |
| { |
| c = fGetc (fichier); |
| |
| if ( feof (fichier)) |
| { |
| casser ; |
| } |
| autre |
| En série. imprimer (c); |
| } |
| |
| fclose (fichier); |
| } |
| |
| void readfile ( const char * chemin) |
| { |
| En série. print ( " Fichier de lecture: " ); En série. imprimer (chemin); |
| |
| File * file = fopen (path, " r " ); |
| |
| if (fichier) |
| { |
| En série. println ( " => ouvert ok " ); |
| } |
| autre |
| { |
| En série. println ( " => ouvert échoué " ); |
| retour ; |
| } |
| |
| Char C; |
| uint32_t numRead = 1 ; |
| |
| tandis que (numread) |
| { |
| numRead = Fread (( uint8_t *) & c, sizeof (c), 1 , fichier); |
| |
| if (numread) |
| En série. imprimer (c); |
| } |
| |
| fclose (fichier); |
| } |
| |
| void writeFile ( CONS CHAR * PATH, const char * Message, size_t MessageSize) |
| { |
| En série. print ( " Fichier d'écriture: " ); En série. imprimer (chemin); |
| |
| Fichier * file = fopen (path, " w " ); |
| |
| if (fichier) |
| { |
| En série. println ( " => ouvert ok " ); |
| } |
| autre |
| { |
| En série. println ( " => ouvert échoué " ); |
| retour ; |
| } |
| |
| Message if ( fwrite (( uint8_t *), 1 , messages, fichier))) |
| { |
| En série. println ( " * écriture ok " ); |
| } |
| autre |
| { |
| En série. println ( " * Écriture a échoué " ); |
| } |
| |
| fclose (fichier); |
| } |
| |
| void appenfil ( const char * chemin, const char * message, size_t messize) |
| { |
| En série. print ( " Fichier d'appel d'appel: " ); En série. imprimer (chemin); |
| |
| File * file = fopen (path, " a " ); |
| |
| if (fichier) |
| { |
| En série. println ( " => ouvert ok " ); |
| } |
| autre |
| { |
| En série. println ( " => ouvert échoué " ); |
| retour ; |
| } |
| |
| Message if ( fwrite (( uint8_t *), 1 , messages, fichier))) |
| { |
| En série. println ( " * ajout ok " ); |
| } |
| autre |
| { |
| En série. println ( " * amestming a échoué " ); |
| } |
| |
| fclose (fichier); |
| } |
| |
| void DeleteFile ( CONS CHAR * PATH) |
| { |
| En série. print ( " Suppression de fichier: " ); En série. imprimer (chemin); |
| |
| if ( supprimer (chemin) == 0 ) |
| { |
| En série. println ( " => ok " ); |
| } |
| autre |
| { |
| En série. println ( " => a échoué " ); |
| retour ; |
| } |
| } |
| |
| void RenameFile ( const char * path1, const char * path2) |
| { |
| En série. print ( " Fichier de changement de nom: " ); En série. print (path1); |
| En série. print ( " à: " ); En série. print (path2); |
| |
| if ( renommer (path1, path2) == 0 ) |
| { |
| En série. println ( " => ok " ); |
| } |
| autre |
| { |
| En série. println ( " => a échoué " ); |
| retour ; |
| } |
| } |
| |
| void testfileio ( PATH CHAR *) |
| { |
| En série. print ( " Tester les E / S de fichiers avec: " ); En série. imprimer (chemin); |
| |
| # définir Buff_Size 512 |
| |
| statique uint8_t buf [buff_size]; |
| |
| Fichier * file = fopen (path, " w " ); |
| |
| if (fichier) |
| { |
| En série. println ( " => ouvert ok " ); |
| } |
| autre |
| { |
| En série. println ( " => ouvert échoué " ); |
| retour ; |
| } |
| |
| size_t i; |
| En série. println ( " - écriture " ); |
| |
| uint32_t start = Millis (); |
| |
| size_t result = 0 ; |
| |
| // Écrivez un fichier avec file_size_kb |
| pour (i = 0 ; i <file_size_kb * 2 ; i ++) |
| { |
| result = fwrite (buf, buff_size, 1 , fichier); |
| |
| si (résultat! = 1 ) |
| { |
| En série. print ( " write result = " ); En série. println (résultat); |
| En série. print ( " Erreur d'écriture, i = " ); En série. println (i); |
| |
| casser ; |
| } |
| } |
| |
| En série. println ( " " ); |
| uint32_t end = Millis () - start; |
| |
| En série. imprimer (i / 2 ); |
| En série. print ( " kytes écrit en (ms) " ); |
| En série. println (fin); |
| |
| fclose (fichier); |
| |
| printline (); |
| |
| // ///////////////////////////////////// |
| |
| file = fopen (path, " r " ); |
| |
| start = Millis (); |
| end = start; |
| i = 0 ; |
| |
| if (fichier) |
| { |
| start = Millis (); |
| En série. println ( " - lecture " ); |
| |
| résultat = 0 ; |
| |
| fseek (fichier, 0 , Seek_set); |
| |
| // Lire un fichier avec file_size_kb |
| pour (i = 0 ; i <file_size_kb * 2 ; i ++) |
| { |
| result = fread (buf, buff_size, 1 , fichier); |
| |
| si (résultat! = 1 ) |
| { |
| En série. print ( " read result = " ); En série. println (résultat); |
| En série. print ( " Erreur de lecture, i = " ); En série. println (i); |
| |
| casser ; |
| } |
| } |
| |
| En série. println ( " " ); |
| end = Millis () - Start; |
| |
| En série. print ((i * buff_size) / 1024 ); |
| En série. print ( " kytes read in (ms) " ); |
| En série. println (fin); |
| |
| fclose (fichier); |
| } |
| autre |
| { |
| En série. println ( " - Impossible d'ouvrir le fichier pour la lecture " ); |
| } |
| } |
| |
| void Printline () |
| { |
| En série. println ( " ================================================================ " ); |
| } |
| |
| VOID SETUP () |
| { |
| En série. commencer ( 115200 ); |
| tandis que (! Serial) |
| |
| retard ( 1000 ); |
| |
| En série. print ( " n start Littlefs_test sur " ); En série. println (board_name); |
| En série. println (lfs_mbed_portenta_h7_version); |
| |
| # Si défini (lfs_mbed_portenta_h7_version_min) |
| if (lfs_mbed_portenta_h7_version_int <lfs_mbed_portenta_h7_version_min) |
| { |
| En série. print ( " avertissement. doit utiliser cet exemple sur la version égale ou plus tard que: " ); |
| En série. println (lfs_mbed_portenta_h7_version_min_target); |
| } |
| # endif |
| |
| myfs = new Littlefs_Mbed (); |
| |
| if (! myfs-> init ()) |
| { |
| En série. println ( " Littlefs Mount a échoué " ); |
| |
| retour ; |
| } |
| |
| char filename1 [] = mbed_littlefs_file_prefix " /hello1.txt " ; |
| char filename2 [] = mbed_littlefs_file_prefix " /hello2.txt " ; |
| |
| Message de char [] = " Hello from " board_name " n " ; |
| |
| printline (); |
| writeFile (filename1, message, sizeof (message)); |
| printline (); |
| ReadFile (FileName1); |
| printline (); |
| |
| APPENDFILE (FILENAME1, Message, SizeOf (message)); |
| printline (); |
| ReadFile (FileName1); |
| printline (); |
| |
| RENAMEFILE (FILENAME1, FILENAME2); |
| printline (); |
| ReadcharsFromFile (FileName2); |
| printline (); |
| |
| DeleteFile (FileName2); |
| printline (); |
| ReadFile (FileName2); |
| printline (); |
| |
| TestFileio (FileName1); |
| printline (); |
| TestFileio (FileName2); |
| printline (); |
| DeleteFile (FileName1); |
| printline (); |
| DeleteFile (FileName2); |
| printline (); |
| |
| En série. println ( " n test complet " ); |
| } |
| |
| VOID LOOP () |
| { |
| } |
Débogage des échantillons de sortie de terminal
1. Littlefs_Count sur Portenta_H7_M7
Ce qui suit est l'exemple de sortie de terminal lors de l'exécution de l'exemple
1.1 Première course
Start LittleFS_Counting on PORTENTA_H7_M7
LittleFS_Portenta_H7 v1 .2.0
[LFS] Flash Size : (KB) = 2048.00
[LFS] FlashIAP Start Address: = 0x0x8080000
[LFS] LittleFS size (KB) = 1536.00
[LFS] LittleFS Mount OK
Times have been run = 1
=> Open to write OK
1.2 après réinitialisation
Start LittleFS_Counting on PORTENTA_H7_M7
LittleFS_Portenta_H7 v1 .2.0
[LFS] Flash Size : (KB) = 2048.00
[LFS] FlashIAP Start Address: = 0x0x8080000
[LFS] LittleFS size (KB) = 1536.00
[LFS] LittleFS Mount OK
=> Open to read OK
Times have been run = 2
=> Open to write OK
2. Littlefs_test sur Portenta_H7_M7
Ce qui suit est l'exemple de sortie de terminal lors de l'exécution de l'exemple Littlefs_test sur mbed Portenta_H7_M7
Start LittleFS_Test on PORTENTA_H7_M7
LittleFS_Portenta_H7 v1 .2.0
[LFS] Flash Size : (KB) = 2048.00
[LFS] FlashIAP Start Address: = 0x0x8080000
[LFS] LittleFS size (KB) = 1536.00
[LFS] LittleFS Mount OK
====================================================
Writing file: /littlefs/hello1.txt => Open OK
* Writing OK
====================================================
Reading file: /littlefs/hello1.txt => Open OK
Hello from PORTENTA_H7_M7
====================================================
Appending file: /littlefs/hello1.txt => Open OK
* Appending OK
====================================================
Reading file: /littlefs/hello1.txt => Open OK
Hello from PORTENTA_H7_M7
Hello from PORTENTA_H7_M7
====================================================
Renaming file: /littlefs/hello1.txt to: /littlefs/hello2.txt => OK
====================================================
readCharsFromFile: /littlefs/hello2.txt => Open OK
Hello from PORTENTA_H7_M7
Hello from PORTENTA_H7_M7
====================================================
Deleting file: /littlefs/hello2.txt => OK
====================================================
Reading file: /littlefs/hello2.txt => Open Failed
====================================================
Testing file I/O with: /littlefs/hello1.txt => Open OK
- writing
64 Kbytes written in (ms) 1077
====================================================
- reading
384 Kbytes read in (ms) 0
====================================================
Testing file I/O with: /littlefs/hello2.txt => Open OK
- writing
64 Kbytes written in (ms) 1003
====================================================
- reading
64 Kbytes read in (ms) 0
====================================================
Deleting file: /littlefs/hello1.txt => OK
====================================================
Deleting file: /littlefs/hello2.txt => OK
====================================================
Déboguer
Debug est activé par défaut sur série.
Vous pouvez également modifier le niveau de débogage ( lfs_loglevel ) de 0 à 4
# define LFS_DEBUG_OUTPUT Serial
// These define's must be placed at the beginning before #include "LittleFS_Portenta_H7.h"
// _LFS_LOGLEVEL_ from 0 to 4
# define _LFS_LOGLEVEL_ 0
Dépannage
Si vous obtenez des erreurs de compilation, le plus souvent, vous devrez peut-être installer une version plus récente du noyau pour les tableaux Arduino.
Parfois, la bibliothèque ne fonctionnera que si vous mettez à jour le noyau de la carte vers la dernière version car j'utilise des fonctions nouvellement ajoutées.
Problèmes
Soumettre les problèmes à: Littlefs_Portanta_H7 Problèmes
FAIRE
- Recherchez un bogue et une amélioration.
FAIT
- Emballage de base Littlefs pour Portenta_H7 , en utilisant le noyau Arduinocore-Mbed Mbed_portenta
- Ajouter la chaîne de version
- Ajouter une table des matières
- Réduisez la taille
LittleFS à 1024KB - Correction de l'erreur de linker
multiple-definitions - Ajoutez l'astyle en utilisant le style
allman . Restyle la bibliothèque
Contributions et merci
Merci beaucoup pour tous les rapports de bogues, une nouvelle fonctionnalité suggérant, testé et contribuant au développement de cette bibliothèque.
Contributif
Si vous souhaitez contribuer à ce projet:
- Signaler des bogues et des erreurs
- Demandez des améliorations
- Créer des problèmes et extraire les demandes
- Parlez à d'autres personnes de cette bibliothèque
Licence
- La bibliothèque est autorisée sous GPLV3
Droit d'auteur
Copyright (C) 2021- Khoi Hoang