Sistema de archivos Raspberry Pi Pico y lector de tarjetas SD
El Raspberry Pi Pico no tiene almacenamiento extraíble, pero puede usar su memoria flash interna para leer y escribir archivos y es fácil agregar un lector de tarjetas SD. Mostramos cómo hacerlo en MicroPython.
Este es material nuevo que amplía nuestro reciente libro:
Compra en Amazon.
También de interés:
Sistema de archivos Raspberry Pico
El Pico tiene 2 MB de memoria flash que se utiliza para almacenar el intérprete de MicroPython. El resto de la memoria se convierte en un sistema de archivos que puede utilizar desde sus propios programas MicroPython.
La memoria flash se divide en varias particiones que contienen el sistema y los datos. A diferencia de otras implementaciones de MicroPython, solo la partición de datos, 1,6 MB, está disponible y se monta automáticamente como raíz cuando se inicia el sistema. Puede obtener acceso a esta partición utilizando la función rp2.Flash() que devuelve un objeto Partición que representa la partición de datos.
Una vez que tenga una instancia de Partición, puede usar cualquiera de los siguientes métodos:
Estos métodos implementan los protocolos de bloque simples y extendidos definidos por os.AbstractBlockDev. Solo se implementa un subconjunto de comandos ioctl para Pico:
4 – Obtener un recuento de la cantidad de bloques, debe devolver un número entero (arg no se usa)
5: obtiene la cantidad de bytes en un bloque, debe devolver un número entero o Ninguno, en cuyo caso se usa el valor predeterminado de 512 (arg no se usa)
6 – Borrar un bloque, arg es el número de bloque a borrar
Por lo general, estos comandos tienen un nivel demasiado bajo para funcionar con una partición y, en su lugar, desea instalar un sistema de archivos para poder trabajar en términos de archivos. Pero si realmente quiere reinventar la rueda, puede trabajar directamente en términos de bloques sin procesar.
El objeto Flash está configurado para que lo aísle de las otras particiones y sus números de bloque comienzan en cero. Entonces, para escribir algunos datos en el bloque cero y leerlos, podemos usar:
Primero desmontamos el sistema de archivos para que no se pueda usar. Si la partición se dejó montada, el sistema de archivos podría usar el bloque que estamos a punto de usar y sobrescribirlo. A continuación, obtenemos el número de bloques y el tamaño del bloque. Antes de que podamos escribir nuevos datos en un bloque, tenemos que borrarlos usando el comando ioctl 6. Después de esto, podemos escribir cualquier cantidad de bytes hasta el tamaño del bloque. Volver a leer los datos es solo una cuestión de configurar la longitud del búfer para especificar la cantidad de bytes para leer. Si prueba esto, encontrará que hemos almacenado "Hello World":
Los bytes más allá de "Hello World" son lo que ya estaba almacenado en el bloque.