Файловая система Raspberry Pi Pico и устройство чтения SD-карт
У Raspberry Pi Pico нет съемного накопителя, но вы можете использовать его внутреннюю флэш-память для чтения и записи файлов, а также легко добавить устройство чтения SD-карт. Мы покажем, как это сделать в MicroPython.
Это новый материал, дополняющий нашу недавнюю книгу:
Купить на Amazon.
Также представляет интерес:
Файловая система Raspberry Pico
<АСИН:1871962803>
<АСИН:187196279X>
Pico имеет 2 МБ флэш-памяти, которая используется для хранения интерпретатора MicroPython. Остальная часть памяти преобразуется в файловую систему, которую вы можете использовать в своих собственных программах MicroPython.
Флэш-память разделена на несколько разделов, в которых хранятся система и данные. В отличие от некоторых других реализаций MicroPython, доступен только раздел данных размером 1,6 МБ, который автоматически монтируется как корневой при загрузке системы. Вы можете получить доступ к этому разделу с помощью функции rp2.Flash(), которая возвращает объект Partition, представляющий раздел данных.
Если у вас есть экземпляр Partition, вы можете использовать любой из следующих методов:
Эти методы реализуют как простые, так и расширенные блочные протоколы, определенные os.AbstractBlockDev. Для Pico реализована только часть команд ioctl:
4 – Получить подсчет количества блоков, должно вернуть целое число (аргумент не используется)
5 — Получить количество байтов в блоке, должно возвращать целое число или None, в этом случае используется значение по умолчанию 512 (arg не используется).
6 – Удалить блок, arg – номер блока, который нужно стереть.
Обычно эти команды слишком низкого уровня для работы с разделом, и вместо этого вам нужно установить файловую систему, чтобы можно было работать с файлами. Но если вы действительно хотите изобрести велосипед, вы можете работать непосредственно с необработанными блоками.
Объект Flash настроен так, что он изолирует вас от других разделов, а номера его блоков начинаются с нуля. Итак, чтобы записать некоторые данные в нулевой блок и прочитать их обратно, мы можем использовать:
Сначала мы отключаем файловую систему, чтобы ее нельзя было использовать. Если раздел остался смонтированным, файловая система может использовать блок, который мы собираемся использовать, и перезаписать его. Далее мы получаем количество блоков и размер блока. Прежде чем мы сможем записать новые данные в блок, мы должны стереть их с помощью команды ioctl 6. После этого мы можем записать любое количество байтов в пределах размера блока. Обратное чтение данных — это всего лишь вопрос установки длины буфера, чтобы указать количество байтов для чтения. Если вы попробуете это, вы обнаружите, что мы сохранили «Hello World»:
Байты после «Hello World» — это все, что уже было сохранено в блоке.