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. Дивіться vfs.AbstractBlockDev.ioctl() для повного списку значень cmd. cmd=5 повертає розмір блоку флеш-пам’яті у байтах; cmd=6 стирає блок з індексом arg.