Biblioteca littlefs_portenta_h7
Tabla de contenido
- Notas importantes para Portenta_H7
- ¿Por qué necesitamos esta biblioteca LittleFS_Portenta_H7?
- Características
- Tableros de apoyo actualmente
- Colegio de cambios
- Requisitos previos
- Instalación
- Use el gerente de la biblioteca de Arduino
- Instalación manual
- VS Code & Platformio
- Parches de paquetes
- 1. Para las tablas Portenta_H7 usando Arduino IDE en Linux
- Ejemplos
- 1. Littlefs_Counting
- 2. Littlefs_test
- Ejemplo littlefs_test
- Muestras de salida de terminal de depuración
- 1. LittleFS_Counting en Portenta_H7_M7
- 2. Littlefs_test en Portenta_H7_M7
- Depurar
- Solución de problemas
- Asuntos
- HACER
- HECHO
- Contribuciones y gracias
- Que contribuye
- Licencia
- Derechos de autor
Notas importantes para Portenta_H7
Los pequeños de la nueva placa Portenta_H7 actualmente probaron bien con solo 8 archivos máximos . Los archivos, de 9 y más, de alguna manera extrañamente no se pueden escribir y / o leer. Posiblemente sea un error en el ArduinoCore-mbed mbed_portenta core . El mismo comportamiento se observa desde el núcleo v2.0.0 hasta v2.6.1 .
Si el tamaño de LittleFS se reduce a 1024KB , la prueba está bien con solo 4 archivos máximos .
Tenga cuidado y siga revisando las actualizaciones.
¿Por qué necesitamos esta biblioteca LittleFS_Portenta_H7?
Características
Esta biblioteca es solo un simple envoltorio LittleFS para facilitar su uso de LittleFS para el flash a bordo en MBed Portenta_H7 , utilizando Arduinocore-Mbed MBed_Portenta Core
El acceso del sistema de archivos utiliza API POSIX normales o API del sistema de archivos MBed
Tableros de apoyo actualmente
- Portenta_h7 tableros como Portenta_H7 Rev2 ABX00042, etc., usando Arduinocore-Mbed MBed_Portenta Core
Requisitos previos
-
Arduino IDE 1.8.19+ para Arduino. -
ArduinoCore-mbed mbed_portenta core 3.4.1+ para tableros Arduino portenta_h7 , como Portenta_H7 Rev2 ABX00042, etc.
Instalación
Use el gerente de la biblioteca de Arduino
La mejor y más fácil forma es usar Arduino Library Manager . Busque littlefs_portenta_h7 , luego seleccione / instale la última versión. También puede usar este enlace para instrucciones más detalladas.
Instalación manual
Otra forma de instalar es:
- Navegue a la página LittleFS_Portenta_H7 .
- Descargue la última versión
LittleFS_Portenta_H7-main.zip . - Extraiga el archivo zip al directorio
LittleFS_Portenta_H7-main - Copie Whole
LittleFS_Portenta_H7-main la carpeta al directorio de las Bibliotecas Arduino, como ~/Arduino/libraries/ .
VS Code & Platformio
- Instalar VS Código
- Instalar plataforma
- Instale la biblioteca LittleFS_Portenta_H7 utilizando Biblioteca Manager. Buscar littlefs_portenta_h7 en las bibliotecas del autor de la plataforma.
- Use el archivo de Platformio.ini incluido de los ejemplos para garantizar que todas las bibliotecas dependientes se instalen automáticamente. Visite la documentación para ver las otras opciones y ejemplos en el archivo de configuración del proyecto
Parches de paquetes
1. Para las tablas Portenta_H7 usando Arduino IDE en Linux
Para poder cargar el firmware en Portenta_H7 utilizando Arduino IDE en Linux (Ubuntu, etc.) , debe copiar el archivo Portenta_Post_install.sh en el directorio mbed_portenta (~/.Arduino15/paquete/arduino/hardware/mbed_portenta/3.4.1/portenta_post_install.sh).
Luego ejecute el siguiente comando usando sudo
$ cd ~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1
$ chmod 755 portenta_post_install.sh
$ sudo ./portenta_post_install.sh
Esto creará el archivo /etc/udev/rules.d/49-portenta_h7.rules de la siguiente manera:
# Portenta H7 bootloader mode UDEV rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="035b", GROUP="plugdev", MODE="0666"
Suponiendo que la versión Core Arduinocore-Mbed es 3.4.1. Ahora solo se debe copiar un archivo en el directorio:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1/portenta_post_install.sh
Cada vez que se instala una nueva versión, recuerde copiar estos archivos en el directorio de nueva versión. Por ejemplo, la nueva versión es x.yy.zz
Este archivo debe copiarse en el directorio:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/x.yy.zz/portenta_post_install.sh
Ejemplos
- Littlefs_Counting
- Littlefs_test
Ejemplo littlefs_test
| # define lfs_mbed_portenta_h7_version_min_target " littlefs_portenta_h7 v1.2.0 " |
| # define lfs_mbed_portenta_h7_version_min 1002000 |
| |
| # Defina _lfs_loglevel_ 1 |
| |
| # Define Force_Reformat False |
| |
| # incluir < Littlefs_portenta_h7.h > |
| |
| Littlefs_mbed *myfs; |
| |
| uint32_t file_size_kb = 64 ; |
| |
| Void ReadCharsFromFile ( ruta const char *) |
| { |
| De serie. imprimir ( " ReadcharsFromFile: " ); De serie. imprimir (ruta); |
| |
| Archivo *file = fopen (ruta, " r " ); |
| |
| if (archivo) |
| { |
| De serie. println ( " => abrir OK " ); |
| } |
| demás |
| { |
| De serie. println ( " => abrir fallido " ); |
| devolver ; |
| } |
| |
| char c; |
| |
| mientras ( verdadero ) |
| { |
| c = fgetc (archivo); |
| |
| if ( FEOF (archivo)) |
| { |
| romper ; |
| } |
| demás |
| De serie. imprimir (c); |
| } |
| |
| fclose (archivo); |
| } |
| |
| Void Readfile ( const char * ruta) |
| { |
| De serie. imprimir ( " Archivo de lectura: " ); De serie. imprimir (ruta); |
| |
| Archivo *file = fopen (ruta, " r " ); |
| |
| if (archivo) |
| { |
| De serie. println ( " => abrir OK " ); |
| } |
| demás |
| { |
| De serie. println ( " => abrir fallido " ); |
| devolver ; |
| } |
| |
| char c; |
| uint32_t numread = 1 ; |
| |
| while (numread) |
| { |
| numread = fread (( uint8_t *) & c, sizeof (c), 1 , archivo); |
| |
| if (numread) |
| De serie. imprimir (c); |
| } |
| |
| fclose (archivo); |
| } |
| |
| void writeFile ( const char * ruta, const char * Mensaje, size_t Messagesize) |
| { |
| De serie. imprimir ( " Escribir archivo: " ); De serie. imprimir (ruta); |
| |
| Archivo *file = fopen (ruta, " w " ); |
| |
| if (archivo) |
| { |
| De serie. println ( " => abrir OK " ); |
| } |
| demás |
| { |
| De serie. println ( " => abrir fallido " ); |
| devolver ; |
| } |
| |
| if ( fwrite (( uint8_t *) mensaje, 1 , mensajes, archivo)) |
| { |
| De serie. println ( " * escribiendo bien " ); |
| } |
| demás |
| { |
| De serie. println ( " * escritura fallida " ); |
| } |
| |
| fclose (archivo); |
| } |
| |
| Void appendFile ( const char * ruta, const char * mensaje, size_t Messagesize) |
| { |
| De serie. imprimir ( " archivo de agregado: " ); De serie. imprimir (ruta); |
| |
| Archivo *file = fopen (ruta, " A " ); |
| |
| if (archivo) |
| { |
| De serie. println ( " => abrir OK " ); |
| } |
| demás |
| { |
| De serie. println ( " => abrir fallido " ); |
| devolver ; |
| } |
| |
| if ( fwrite (( uint8_t *) mensaje, 1 , mensajes, archivo)) |
| { |
| De serie. println ( " * Añadir OK " ); |
| } |
| demás |
| { |
| De serie. println ( " * apagar fallido " ); |
| } |
| |
| fclose (archivo); |
| } |
| |
| Void DeleteFile ( ruta const char *) |
| { |
| De serie. imprimir ( " Eliminar archivo: " ); De serie. imprimir (ruta); |
| |
| if ( eliminar (ruta) == 0 ) |
| { |
| De serie. println ( " => ok " ); |
| } |
| demás |
| { |
| De serie. println ( " => fallido " ); |
| devolver ; |
| } |
| } |
| |
| void renameFile ( const char * path1, const char * path2) |
| { |
| De serie. imprimir ( " Archivo de cambio de nombre: " ); De serie. imprimir (ruta1); |
| De serie. imprimir ( " a: " ); De serie. imprimir (Path2); |
| |
| if ( rename (Path1, Path2) == 0 ) |
| { |
| De serie. println ( " => ok " ); |
| } |
| demás |
| { |
| De serie. println ( " => fallido " ); |
| devolver ; |
| } |
| } |
| |
| nulo testFileio ( ruta const char *) |
| { |
| De serie. imprimir ( " Probar el archivo de E/S con: " ); De serie. imprimir (ruta); |
| |
| # Define buff_size 512 |
| |
| static uint8_t buf [buff_size]; |
| |
| Archivo *file = fopen (ruta, " w " ); |
| |
| if (archivo) |
| { |
| De serie. println ( " => abrir OK " ); |
| } |
| demás |
| { |
| De serie. println ( " => abrir fallido " ); |
| devolver ; |
| } |
| |
| size_t i; |
| De serie. println ( " - Writing " ); |
| |
| uint32_t start = millis (); |
| |
| size_t result = 0 ; |
| |
| // Escribe un archivo con file_size_kb |
| para (i = 0 ; i <file_size_kb * 2 ; i ++) |
| { |
| resultado = fwrite (buf, buff_size, 1 , archivo); |
| |
| if (resultado! = 1 ) |
| { |
| De serie. imprimir ( " escribir resultado = " ); De serie. println (resultado); |
| De serie. imprimir ( " Error de escritura, i = " ); De serie. println (i); |
| |
| romper ; |
| } |
| } |
| |
| De serie. println ( " " ); |
| uint32_t end = Millis () - inicio; |
| |
| De serie. imprimir (i / 2 ); |
| De serie. imprimir ( " kbytes escritos en (ms) " ); |
| De serie. println (final); |
| |
| fclose (archivo); |
| |
| printline (); |
| |
| // /////////////////////////// |
| |
| file = fopen (ruta, " r " ); |
| |
| inicio = Millis (); |
| final = inicio; |
| i = 0 ; |
| |
| if (archivo) |
| { |
| inicio = Millis (); |
| De serie. println ( " - lectura " ); |
| |
| resultado = 0 ; |
| |
| fseek (archivo, 0 , Seek_set); |
| |
| // Leer un archivo con file_size_kb |
| para (i = 0 ; i <file_size_kb * 2 ; i ++) |
| { |
| resultado = fread (buf, buff_size, 1 , archivo); |
| |
| if (resultado! = 1 ) |
| { |
| De serie. imprimir ( " Leer resultado = " ); De serie. println (resultado); |
| De serie. imprimir ( " Leer error, i = " ); De serie. println (i); |
| |
| romper ; |
| } |
| } |
| |
| De serie. println ( " " ); |
| end = Millis () - Inicio; |
| |
| De serie. print ((i * buff_size) / 1024 ); |
| De serie. imprimir ( " kbytes leídos en (ms) " ); |
| De serie. println (final); |
| |
| fclose (archivo); |
| } |
| demás |
| { |
| De serie. println ( " - no se pudo abrir el archivo para la lectura " ); |
| } |
| } |
| |
| Void Printline () |
| { |
| De serie. println ( " ===================================================== " ); |
| } |
| |
| Configuración vacía () |
| { |
| De serie. comenzar ( 115200 ); |
| Mientras (! Serial) |
| |
| retraso ( 1000 ); |
| |
| De serie. imprimir ( " n iniciar Littlefs_Test en " ); De serie. println (board_name); |
| De serie. println (lfs_mbed_portenta_h7_version); |
| |
| # si se define (lfs_mbed_portenta_h7_version_min) |
| if (lfs_mbed_portenta_h7_version_int <lfs_mbed_portenta_h7_version_min) |
| { |
| De serie. imprimir ( " advertencia. Debe usar este ejemplo en la versión igual o posterior a: " ); |
| De serie. println (lfs_mbed_portenta_h7_version_min_target); |
| } |
| # endif |
| |
| myfs = new Littlefs_mbed (); |
| |
| if (! myfs-> init ()) |
| { |
| De serie. println ( " Littlefs Mount falló " ); |
| |
| devolver ; |
| } |
| |
| char filename1 [] = mbed_littlefs_file_prefix " /hello1.txt " ; |
| char filename2 [] = mbed_littlefs_file_prefix " /hello2.txt " ; |
| |
| Mensaje char [] = " Hello desde " Board_name " n " ; |
| |
| printline (); |
| WriteFile (FileName1, Mensaje, SizeOf (Mensaje)); |
| printline (); |
| readfile (nombre de archivo1); |
| printline (); |
| |
| appendFile (FileName1, Mensaje, sizeof (mensaje)); |
| printline (); |
| readfile (nombre de archivo1); |
| 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 (); |
| |
| De serie. println ( " n prueba completa " ); |
| } |
| |
| bucle vacío () |
| { |
| } |
Muestras de salida de terminal de depuración
1. LittleFS_Counting en Portenta_H7_M7
La siguiente es la salida del terminal de muestra al ejecutar el ejemplo de littlefs_counting en mbed portenta_h7_m7
1.1 Primera carrera
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 Después del reinicio
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 en Portenta_H7_M7
La siguiente es la salida del terminal de muestra al ejecutar el ejemplo LittleFS_Test en 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
====================================================
Depurar
La depuración está habilitada de forma predeterminada en Serial.
También puede cambiar el nivel de depuración ( LFS_Loglevel ) de 0 a 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
Solución de problemas
Si recibe errores de compilación, la mayoría de las veces, es posible que deba instalar una versión más nueva del núcleo para las tablas Arduino.
A veces, la biblioteca solo funcionará si actualiza el núcleo del tablero a la última versión porque estoy usando funciones recientemente agregadas.
Asuntos
Enviar problemas a: littlefs_portenta_h7 problemas
HACER
- Buscar errores y mejoras.
HECHO
- Wrapper básico de LittleFS para Portenta_H7 , usando Arduinocore-Mbed Mbed_portenta Core
- Agregar cadena de versión
- Agregar tabla de contenido
- Reduzca el tamaño de
LittleFS a 1024kb - Corrige un error de enlazador
multiple-definitions - Agregue Astyle usando
allman Style. Restile la biblioteca
Contribuciones y gracias
Muchas gracias por todos por los informes de errores, una nueva función que sugieren, pruebas y contribuyen al desarrollo de esta biblioteca.
Que contribuye
Si desea contribuir a este proyecto:
- Informar errores y errores
- Solicitar mejoras
- Crear problemas y extraer solicitudes
- Cuéntale a otras personas sobre esta biblioteca
Licencia
- La biblioteca tiene licencia bajo GPLV3
Derechos de autor
Copyright (c) 2021- Khoi Hoang