mimxrt — функциональность, специфичная для NXP i.MXRT

Модуль mimxrt содержит функции и классы, специфичные для семейства микроконтроллеров NXP i.MXRT.

Классы

class mimxrt.Flash

Возвращает объект-одиночку, предоставляющий доступ к пользовательской области хранения встроенной QSPI флеш-памяти как к блочному устройству, совместимому с vfs.AbstractBlockDev. Номера блоков отсчитываются от начала этой области, а не от физического начала флеш-памяти.

В большинстве случаев для хранения постоянных данных на устройстве вам понадобится более высокоуровневая абстракция – например, файловая система через стандартный файловый API Python. Этот интерфейс полезен для настройки конфигурации файловой системы или реализации низкоуровневой системы хранения для вашего приложения.

Объект также реализует протокол буфера, обеспечивая доступ только для чтения с отображением в память ко всей области хранения флеш-памяти через базовый адрес QSPI XIP. Это делает доступным представление области без копирования, не выполняя никаких операций чтения из флеш-памяти:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

Размер блока, используемый базовыми секторами флеш-памяти, можно запросить во время выполнения с помощью ioctl(5, 0).

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) не накладывается ограничение по выравниванию.

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, 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).

Вызывает OSError, если базовая операция стирания или записи флеш-памяти завершается неудачей.

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

Стандартная точка входа ioctl для vfs.AbstractBlockDev. См. полный список значений cmd в vfs.AbstractBlockDev.ioctl(). cmd=5 возвращает размер блока флеш-памяти в байтах; cmd=6 стирает блок с индексом arg.