класс Flash – доступ к встроенной флеш-памяти¶
Класс Flash обеспечивает прямой доступ к основному флеш-устройству на OpenMV Cam на базе STM32.
В большинстве случаев для хранения постоянных данных на устройстве вам понадобится абстракция более высокого уровня, например файловая система через стандартный файловый API Python, но этот интерфейс полезен для настройки конфигурации файловой системы или реализации низкоуровневой системы хранения для вашего приложения.
Примечание
OpenMV Cam H7 Plus, Pure Thermal и N6 используют внешнюю микросхему флеш-памяти SPI/QSPI/XSPI в качестве основного хранилища; другие OpenMV Cam на базе STM32 используют внутреннюю флеш-память внутри MCU. Интерфейс Python идентичен в обоих случаях.
Конструкторы¶
- class pyb.Flash¶
- class pyb.Flash(*, start: int = -1, len: int = -1)
Создаёт блочное устройство, совместимое с
vfs.AbstractBlockDev, для встроенной флеш-памяти. Существуют две формы:Flash()(без аргументов): возвращает устаревший объект-синглтон, который предоставляет всю флеш-память с предваряющей виртуальной таблицей разделов. Фактические данные флеш-памяти начинаются с блока0x100. Эта форма устарела и будет удалена в будущем выпуске MicroPython.Flash(start=..., len=...): возвращает новое блочное устройство, которое обращается к флеш-памяти, начиная со смещения в байтахstart(по умолчанию0) на протяженииlenбайтов (по умолчанию: оставшаяся часть устройства). Оба значения должны быть кратны размеру базового блока (обычно 512 байт для внутренней флеш-памяти; внешние компоненты SPI/QSPI/XSPI используют больший размер сектора стирания).
Методы¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Считывает байты из флеш-памяти в
buf. Две перегрузки предоставляют простой и расширенный интерфейсы:Простая форма (
readblocks(block_num, buf)): считывает целые блоки, начиная с индекса блокаblock_num.len(buf)должна быть кратна размеру блока флеш-памяти.Расширенная форма (
readblocks(block_num, buf, offset)): считываетlen(buf)байтов – не обязательно целое число блоков – начиная с байтаoffsetвнутри блокаblock_num.len(buf)не имеет ограничений на выравнивание. Поддерживается только для объектов, созданных с явными аргументамиstart/len, но не для устаревшего синглтона.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Записывает байты из
bufво флеш-память. Две перегрузки предоставляют простой и расширенный интерфейсы:Простая форма (
writeblocks(block_num, buf)): записывает целые блоки, начиная с индекса блокаblock_num.len(buf)должна быть кратна размеру блока флеш-памяти. Каждый затронутый блок автоматически стирается перед записью.Расширенная форма (
writeblocks(block_num, buf, offset)): записываетlen(buf)байтов – не обязательно целое число блоков – начиная с байтаoffsetвнутри блокаblock_num.len(buf)не имеет ограничений на выравнивание, и неявное стирание не выполняется – вызывающая сторона должна обеспечить стирание затронутых блоков посредством предшествующего вызоваioctl(6, block_num). Поддерживается только для объектов, созданных с явными аргументамиstart/len.
- ioctl(cmd: int, arg: int) int | None¶
Стандартная точка входа ioctl блочного устройства
vfs.AbstractBlockDev. Полный список значенийcmdсмотрите вvfs.AbstractBlockDev.ioctl().cmd=5возвращает размер блока флеш-памяти в байтах;cmd=6стирает блок с индексомarg.