клас Flash – доступ до вбудованої флеш-пам’яті¶
Клас Flash надає прямий доступ до основного пристрою флеш-пам’яті на OpenMV Cams на базі STM32.
У більшості випадків для зберігання постійних даних на пристрої доцільно використовувати абстракцію вищого рівня, наприклад файлову систему через стандартний файловий API Python, але цей інтерфейс корисний для налаштування конфігурації файлової системи або реалізації низькорівневої системи зберігання даних у вашому застосунку.
Примітка
OpenMV Cam H7 Plus, Pure Thermal та N6 використовують зовнішній чіп флеш-пам’яті SPI/QSPI/XSPI для основного сховища; інші OpenMV Cams на базі 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.