Littlefs_portenta_h7 bibliothek
Inhaltsverzeichnis
- Wichtige Anmerkungen für Portenta_H7
- Warum brauchen wir diese Bibliothek von Littlefs_Portenta_H7?
- Merkmale
- Derzeit unterstützte Boards
- Changelog
- Voraussetzungen
- Installation
- Verwenden Sie Arduino Library Manager
- Handbuch installieren
- VS Code & Platformio
- Pakete Patches
- 1. für portenta_h7 -Boards mit Arduino IDE unter Linux
- Beispiele
- 1.. Littlefs_counting
- 2. Littlefs_test
- Beispiel Littlefs_test
- Debugg -Terminalausgangsproben
- 1..
- 2. Littlefs_test auf portenta_h7_m7
- Debuggen
- Fehlerbehebung
- Probleme
- Zu tun
- ERLEDIGT
- Beiträge und danke
- Beitragen
- Lizenz
- Copyright
Wichtige Anmerkungen für Portenta_H7
Die Littlefs der neuen Portenta_h7 -Karte wurden derzeit mit nur maximalen 8 Dateien in Ordnung getestet. Die Dateien ab 9 und up können irgendwie seltsamerweise nicht geschrieben und / oder gelesen werden. Dies ist möglicherweise ein Fehler im ArduinoCore-mbed mbed_portenta core . Das gleiche Verhalten wird von Kern v2.0.0 bis v2.6.1 beobachtet.
Wenn LittleFS -Größe auf 1024KB reduziert wird, ist der Test mit nur maximal 4 Dateien in Ordnung.
Achten Sie auf und überprüfen Sie weiter nach Updates.
Warum brauchen wir diese Bibliothek von Littlefs_Portenta_H7?
Merkmale
Diese Bibliothek ist nur ein einfacher LittleFS Wrapper, um die Verwendung von Littlefs für den Onboard-Blitz auf MBED PORTENTA_H7 mit Arduinocore-Mbed Mbed_Portenta Core zu erleichtern
Der Dateisystemzugriff verwendet normale POSIX -APIs oder MBED -Dateisystem -APIs
Derzeit unterstützte Boards
- PORTENTA_H7-Karten wie Portenta_H7 Rev2 ABX00042 usw. unter Verwendung von Arduinocore-Mbed Mbed_Portenta Core
Voraussetzungen
-
Arduino IDE 1.8.19+ für Arduino. -
ArduinoCore-mbed mbed_portenta core 3.4.1+ für Arduino Portenta_H7- Boards wie Portenta_H7 Rev2 ABX00042 usw ..
Installation
Verwenden Sie Arduino Library Manager
Der beste und einfachste Weg ist die Verwendung Arduino Library Manager . Suchen Sie nach LittleFS_Portenta_h7 und wählen Sie die neueste Version aus / installieren Sie sie. Sie können diesen Link auch für detailliertere Anweisungen verwenden.
Handbuch installieren
Eine andere Möglichkeit zu installieren ist:
- Navigieren Sie zur Seite LittleFS_Portenta_H7 .
- Laden Sie die neueste Version
LittleFS_Portenta_H7-main.zip herunter. - Extrahieren Sie die ZIP-Datei in
LittleFS_Portenta_H7-main Verzeichnis - Kopieren Sie den Ordner "Whole
LittleFS_Portenta_H7-main in das Verzeichnis von Arduino Libraries wie ~/Arduino/libraries/ .
VS Code & Platformio
- Installieren Sie vs Code
- Installieren Sie Platformio
- Installieren Sie die Bibliothek von Littlefs_Portenta_h7 mithilfe von Library Manager. Suchen Sie nach LittleFS_Portenta_h7 in Platform.io Author -Bibliotheken
- Verwenden Sie die inklusive Plattformio.ini -Datei aus Beispielen, um sicherzustellen, dass alle abhängigen Bibliotheken automatisch installiert werden. Bitte besuchen Sie die Dokumentation für die anderen Optionen und Beispiele in der Projektkonfigurationsdatei
Pakete Patches
1. für portenta_h7 -Boards mit Arduino IDE unter Linux
Um Firmware mit Arduino IDE in Linux (Ubuntu usw.) auf portenta_h7 hochzuladen , müssen Sie die Datei pORTENTA_POST_INSTALL.SH in das Verzeichnis mbed_Portenta (~/.arduino15/Pakete/Arduino/Hardware/MBED_PORTENTA/3.4.1/portenta_post_install.s) kopieren.
Führen Sie dann den folgenden Befehl mit sudo aus
$ cd ~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1
$ chmod 755 portenta_post_install.sh
$ sudo ./portenta_post_install.sh
Dadurch werden die Datei /etc/udev/rules.d/49-portenta_h7.rules wie folgt erstellt:
# Portenta H7 bootloader mode UDEV rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="035b", GROUP="plugdev", MODE="0666"
Angenommen, die Kernversion von Arduinocore-Mbed ist 3.4.1. Jetzt darf nur eine Datei in das Verzeichnis kopiert werden:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1/portenta_post_install.sh
Wenn eine neue Version installiert ist, denken Sie daran, diese Dateien in das neue Versionsverzeichnis zu kopieren. Zum Beispiel ist eine neue Version x.yy.zz
Diese Datei muss in das Verzeichnis kopiert werden:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/x.yy.zz/portenta_post_install.sh
Beispiele
- Littlefs_counting
- Littlefs_test
Beispiel Littlefs_test
| # Definieren Sie lfs_mbed_Portenta_h7_version_min_target " Littlefs_Portenta_h7 v1.2.0 " |
| # Definieren Sie lfs_mbed_Portenta_h7_version_min 1002000 |
| |
| # Definieren Sie _lfs_loglevel_ 1 |
| |
| # Definieren Sie Force_reformat False |
| |
| # inklusive < littlefs_portenta_h7.h > |
| |
| Littlefs_mbed *myfs; |
| |
| uint32_t file_size_kb = 64 ; |
| |
| void ReadcharsfromFile ( const char * path) |
| { |
| Serie. print ( " ReadCharsfromFile: " ); Serie. Druck (Pfad); |
| |
| Datei *file = fopen (Pfad, " r " ); |
| |
| if (Datei) |
| { |
| Serie. println ( " => open ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => open fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| |
| Char C; |
| |
| während ( wahr ) |
| { |
| C = fGetC (Datei); |
| |
| if ( feof (Datei)) |
| { |
| brechen ; |
| } |
| anders |
| Serie. Druck (c); |
| } |
| |
| fcLose (Datei); |
| } |
| |
| void Readfile ( const char * path) |
| { |
| Serie. print ( " Lesendatei: " ); Serie. Druck (Pfad); |
| |
| Datei *file = fopen (Pfad, " r " ); |
| |
| if (Datei) |
| { |
| Serie. println ( " => open ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => open fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| |
| Char C; |
| uint32_t numread = 1 ; |
| |
| während (numread) |
| { |
| numread = fread (( uint8_t *) & c, sizeof (c), 1 , Datei); |
| |
| if (numread) |
| Serie. Druck (c); |
| } |
| |
| fcLose (Datei); |
| } |
| |
| void writefile ( const char * path, const char * meldung, size_t message) |
| { |
| Serie. print ( " Datei schreiben: " ); Serie. Druck (Pfad); |
| |
| Datei *file = fopen (Pfad, " W " ); |
| |
| if (Datei) |
| { |
| Serie. println ( " => open ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => open fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| |
| if ( fWrite (( uint8_t *) meldung, 1 , messagise, Datei)) |
| { |
| Serie. println ( " * schriftlich ok " ); |
| } |
| anders |
| { |
| Serie. println ( " * fehlgeschlagen " ); |
| } |
| |
| fcLose (Datei); |
| } |
| |
| void appendfile ( const char * path, const char * meldung, size_t message) |
| { |
| Serie. print ( " Anhangsdatei: " ); Serie. Druck (Pfad); |
| |
| Datei *file = fopen (Pfad, " a " ); |
| |
| if (Datei) |
| { |
| Serie. println ( " => open ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => open fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| |
| if ( fWrite (( uint8_t *) meldung, 1 , messagise, Datei)) |
| { |
| Serie. println ( " * anhängen ok " ); |
| } |
| anders |
| { |
| Serie. println ( " * fehlgeschlagen " ); |
| } |
| |
| fcLose (Datei); |
| } |
| |
| Hohlraum deletefile ( const char * path) |
| { |
| Serie. print ( " Datei löschen: " ); Serie. Druck (Pfad); |
| |
| if ( entfernen (Pfad) == 0 ) |
| { |
| Serie. println ( " => ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| } |
| |
| void RenameFile ( const char * path1, const char * path2) |
| { |
| Serie. print ( " Umbenennung von Datei: " ); Serie. print (path1); |
| Serie. print ( " zu: " ); Serie. print (path2); |
| |
| if ( umbenennen (Path1, Path2) == 0 ) |
| { |
| Serie. println ( " => ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| } |
| |
| void TestFileio ( const char * path) |
| { |
| Serie. print ( " Testdatei I/O mit: " ); Serie. Druck (Pfad); |
| |
| # Buff_size 512 definieren |
| |
| static uint8_t buf [buff_size]; |
| |
| Datei *file = fopen (Pfad, " W " ); |
| |
| if (Datei) |
| { |
| Serie. println ( " => open ok " ); |
| } |
| anders |
| { |
| Serie. println ( " => open fehlgeschlagen " ); |
| zurückkehren ; |
| } |
| |
| size_t i; |
| Serie. println ( " - writing " ); |
| |
| uint32_t start = millis (); |
| |
| size_t result = 0 ; |
| |
| // Schreiben Sie eine Datei mit File_Size_kb |
| für (i = 0 ; i <file_size_kb * 2 ; i ++) |
| { |
| result = fwrite (buf, buff_size, 1 , Datei); |
| |
| if (Ergebnis! = 1 ) |
| { |
| Serie. print ( " write result = " ); Serie. println (Ergebnis); |
| Serie. print ( " Fehler schreiben, i = " ); Serie. println (i); |
| |
| brechen ; |
| } |
| } |
| |
| Serie. println ( " " ); |
| uint32_t end = millis () - start; |
| |
| Serie. print (i / 2 ); |
| Serie. print ( " kBytes geschrieben in (ms) " ); |
| Serie. println (Ende); |
| |
| fcLose (Datei); |
| |
| printline (); |
| |
| // ////////////////////////////////////. |
| |
| Datei = fopen (Pfad, " r " ); |
| |
| start = Millis (); |
| Ende = Start; |
| i = 0 ; |
| |
| if (Datei) |
| { |
| start = Millis (); |
| Serie. println ( " - Reading " ); |
| |
| Ergebnis = 0 ; |
| |
| FSEEK (Datei, 0 , such_set); |
| |
| // Lesen Sie eine Datei mit File_Size_kb |
| für (i = 0 ; i <file_size_kb * 2 ; i ++) |
| { |
| result = fread (buf, buff_size, 1 , Datei); |
| |
| if (Ergebnis! = 1 ) |
| { |
| Serie. print ( " read result = " ); Serie. println (Ergebnis); |
| Serie. print ( " Fehler lesen, i = " ); Serie. println (i); |
| |
| brechen ; |
| } |
| } |
| |
| Serie. println ( " " ); |
| End = Millis () - Start; |
| |
| Serie. print ((i * buff_size) / 1024 ); |
| Serie. print ( " kBytes lesen in (ms) " ); |
| Serie. println (Ende); |
| |
| fcLose (Datei); |
| } |
| anders |
| { |
| Serie. println ( " - fehlgeschlagene Datei zum Lesen öffnen " ); |
| } |
| } |
| |
| void printline () |
| { |
| Serie. println ( " =================================================== " ); |
| } |
| |
| void setup () |
| { |
| Serie. Beginnen Sie ( 115200 ); |
| while (! Serie) |
| |
| Verzögerung ( 1000 ); |
| |
| Serie. print ( " n starten Sie Littlefs_test on " ); Serie. println (board_name); |
| Serie. println (lfs_mbed_portenta_h7_version); |
| |
| # wenn definiert (lfs_mbed_portenta_h7_version_min) |
| if (lfs_mbed_portenta_h7_version_int <lfs_mbed_portenta_h7_version_min) |
| { |
| Serie. print ( " Warnung. Muss dieses Beispiel auf Version verwenden, die gleich oder später als: " ); |
| Serie. println (lfs_mbed_portenta_h7_version_min_target); |
| } |
| # endif |
| |
| myfs = new Littlefs_mbed (); |
| |
| if (! myfs-> init ()) |
| { |
| Serie. println ( " Littlefs Mount fehlgeschlagen " ); |
| |
| zurückkehren ; |
| } |
| |
| char Dateiname1 [] = mbed_littlefs_file_prefix " /hello1.txt " ; |
| char Dateiname2 [] = mbed_littlefs_file_prefix " /hello2.txt " ; |
| |
| char message [] = " Hallo aus " board_name " n " ; |
| |
| printline (); |
| WriteFile (Dateiname1, Nachricht, Größe (Nachricht)); |
| printline (); |
| ReadFile (Dateiname1); |
| printline (); |
| |
| appendFile (Dateiname1, Nachricht, sizeof (meldung)); |
| printline (); |
| ReadFile (Dateiname1); |
| printline (); |
| |
| RenameFile (Dateiname1, Dateiname2); |
| printline (); |
| ReadcharsFromFile (Dateiname2); |
| printline (); |
| |
| DeleteFile (Dateiname2); |
| printline (); |
| ReadFile (Dateiname2); |
| printline (); |
| |
| TestFileio (Dateiname1); |
| printline (); |
| TestFileio (Dateiname2); |
| printline (); |
| DeleteFile (Dateiname1); |
| printline (); |
| DeleteFile (Dateiname2); |
| printline (); |
| |
| Serie. println ( " n test complete " ); |
| } |
| |
| Hohlraumschleife ( ) |
| { |
| } |
Debugg -Terminalausgangsproben
1..
Das Folgende ist die Ausgabe des Beispielanterminals beim Ausführen von Beispiel LittleFS_Counting auf MBED portenta_h7_m7
1.1 Erster Lauf
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 Nach dem Zurücksetzen
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 auf portenta_h7_m7
Das Folgende ist die Ausgabe des Beispielanterminals beim Ausführen von Beispiel Littlefs_test auf 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
====================================================
Debuggen
Debugg ist standardmäßig in der Serie aktiviert.
Sie können auch das Debugging -Level ( LFS_LogLivel ) von 0 auf 4 ändern
# 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
Fehlerbehebung
Wenn Sie Kompilierungsfehler erhalten, müssen Sie möglicherweise eine neuere Version des Kerns für Arduino -Boards installieren.
Manchmal funktioniert die Bibliothek nur, wenn Sie den Board Core auf die neueste Version aktualisieren, da ich neu hinzugefügte Funktionen verwende.
Probleme
Senden Sie Probleme an: Littlefs_portenta_h7 Probleme
Zu tun
- Suche nach Fehler und Verbesserung.
ERLEDIGT
- Basic LittleFS-Wrapper für Portenta_H7 mit Arduinocore-Mbed Mbed_Portenta Core
- Versionszeichenfolge hinzufügen
- Inhaltsverzeichnis hinzufügen
- Reduzieren Sie die Größe
LittleFS auf 1024 KB - Beheben Sie
multiple-definitions für Linkerfehler - Fügen Sie Astyle mit
allman -Stil hinzu. Die Bibliothek neu style
Beiträge und danke
Vielen Dank für alle für die Meldung von Fehler, neue Funktionen, die vorgeschlagen, testen und zur Entwicklung dieser Bibliothek beitragen.
Beitragen
Wenn Sie zu diesem Projekt beitragen möchten:
- Melden Sie Fehler und Fehler
- Bitten Sie um Verbesserungen
- Erstellen Sie Probleme und ziehen Sie Anfragen an
- Erzählen Sie anderen Leuten von dieser Bibliothek
Lizenz
- Die Bibliothek ist unter GPLV3 lizenziert
Copyright
Copyright (C) 2021-Khoi Hoang