class Flash – доступ к встроенной флеш-памяти

Класс Flash предоставляет прямой поблочный доступ к внешней QSPI-флеш-памяти микросхемы RP2040. Драйвер реализует интерфейс vfs.AbstractBlockDev, поэтому его можно передать в vfs.mount() для пользовательских конфигураций файловой системы.

Большинство скриптов сохраняют данные через автоматически смонтированную файловую систему по пути / и никогда не создают Flash напрямую. Создавайте объект вручную, когда вам нужно:

  • Смонтировать файловую систему, отличную от используемой по умолчанию (например, обернуть в vfs.VfsFat), на пользовательском разделе.

  • Читать или записывать области прошивки или блоки заводских данных, которые не принадлежат файловой системе.

  • Реализовать собственный формат хранения данных во флеш-памяти в обход уровня файловой системы.

Конструкторы

class rp2.Flash Flash

Возвращает одиночный (singleton) объект блочного устройства Flash, опирающийся на QSPI-флеш-память микросхемы RP2040. Первый доступный блок — это блок, расположенный сразу после области прошивки, так что вызывающему коду видна только пригодная для файловой системы часть микросхемы.

Методы

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Читает байты из флеш-памяти в buf. Стандартная точка входа блочного устройства vfs.AbstractBlockDev, используемая уровнем файловой системы.

Простая форма (readblocks(block_num, buf)): читает целые блоки, начиная с блока с индексом block_num. len(buf) должно быть кратно размеру блока флеш-памяти.

Расширенная форма (readblocks(block_num, buf, offset)): читает len(buf) байт — не обязательно целое число блоков — начиная с байта offset внутри блока block_num. Используется littlefs и другими файловыми системами с байтовой адресацией.

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, offset: int) None

Записывает байты из buf во флеш-память. Стандартная точка входа блочного устройства vfs.AbstractBlockDev, используемая уровнем файловой системы.

Простая форма (writeblocks(block_num, buf)): записывает целые блоки, начиная с блока с индексом block_num. len(buf) должно быть кратно размеру блока флеш-памяти. Каждый затрагиваемый блок автоматически стирается перед записью.

Расширенная форма (writeblocks(block_num, buf, offset)): записывает len(buf) байт — не обязательно целое число блоков — начиная с байта offset внутри блока block_num. Неявное стирание не выполняется — вызывающий код должен убедиться, что затрагиваемые блоки были стёрты предыдущим вызовом ioctl(6, block_num).

ioctl(cmd: int, arg: int) int | None

Стандартная управляющая точка входа vfs.AbstractBlockDev. Вызывается уровнем файловой системы при монтировании/размонтировании и при каждой синхронизации. Распознаваемые значения cmd:

  • 1 — инициализация. Возвращает 0 при успехе.

  • 2 — деинициализация. Возвращает 0 при успехе.

  • 3 — синхронизировать ожидающие записи. Возвращает 0.

  • 4 — вернуть количество блоков флеш-памяти, видимых файловой системе.

  • 5 — вернуть размер блока в байтах (обычно размер сектора флеш-памяти, 4096).

  • 6 — стереть блок с индексом arg. Требуется перед использованием расширенной формы writeblocks.

  • 7 — вернуть, поддерживает ли устройство команду стирания блока (1 для RP2040).

Прямые вызывающие обычно не используют этот метод — драйвер файловой системы автоматически диспетчеризует стандартные коды после монтирования Flash.