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.