banner
Центр новостей
Мы уделяем особое внимание доставке исключительных продуктов, быстрой доставке и внимательному обслуживанию клиентов.

Файловая система Raspberry Pi Pico и устройство чтения SD-карт

Jun 07, 2023

У 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» — это все, что уже было сохранено в блоке.