mimxrt — funkcje specyficzne dla NXP i.MXRT

Moduł mimxrt zawiera funkcje i klasy specyficzne dla rodziny mikrokontrolerów NXP i.MXRT.

Klasy

class mimxrt.Flash

Pobiera obiekt singletonu, który udostępnia obszar pamięci użytkownika wbudowanej pamięci flash QSPI jako urządzenie blokowe zgodne z vfs.AbstractBlockDev. Numery bloków są względne wobec początku tego obszaru, a nie fizycznego początku pamięci flash.

W większości przypadków, aby przechowywać trwałe dane na urządzeniu, będziesz chciał użyć abstrakcji wyższego poziomu – na przykład systemu plików poprzez standardowe API plików Pythona. Ten interfejs jest przydatny do dostosowania konfiguracji systemu plików lub zaimplementowania niskopoziomowego systemu przechowywania dla twojej aplikacji.

Obiekt implementuje również protokół bufora, umożliwiając dostęp tylko do odczytu z mapowaniem pamięci do całego obszaru pamięci flash poprzez bazę QSPI XIP. Udostępnia to widok obszaru bez kopiowania, bez wykonywania jakichkolwiek odczytów z pamięci flash:

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

Rozmiar bloku używany przez bazowe sektory pamięci flash można odpytać w czasie wykonywania za pomocą ioctl(5, 0).

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Odczytuje bajty z pamięci flash do buf. Dwa przeciążenia udostępniają interfejs prosty i rozszerzony:

Forma prosta (readblocks(block_num, buf)): odczytuje całe bloki, zaczynając od indeksu bloku block_num. len(buf) musi być wielokrotnością rozmiaru bloku pamięci flash.

Forma rozszerzona (readblocks(block_num, buf, offset)): odczytuje len(buf) bajtów – niekoniecznie całkowitą liczbę bloków – zaczynając od bajtu offset w bloku block_num. len(buf) nie ma ograniczeń co do wyrównania.

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, offset: int) None

Zapisuje bajty z buf do pamięci flash. Dwa przeciążenia udostępniają interfejs prosty i rozszerzony:

Forma prosta (writeblocks(block_num, buf)): zapisuje całe bloki, zaczynając od indeksu bloku block_num. len(buf) musi być wielokrotnością rozmiaru bloku pamięci flash. Każdy zmieniany blok jest automatycznie kasowany przed zapisem.

Forma rozszerzona (writeblocks(block_num, buf, offset)): zapisuje len(buf) bajtów – niekoniecznie całkowitą liczbę bloków – zaczynając od bajtu offset w bloku block_num. len(buf) nie ma ograniczeń co do wyrównania i nie jest wykonywane żadne niejawne kasowanie – wywołujący musi zapewnić, że zmieniane bloki zostały skasowane wcześniejszym wywołaniem ioctl(6, block_num).

Zgłasza OSError, jeśli bazowa operacja kasowania lub zapisu pamięci flash się nie powiedzie.

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

Standardowy punkt wejścia ioctl klasy vfs.AbstractBlockDev. Pełną listę wartości cmd znajdziesz w vfs.AbstractBlockDev.ioctl(). cmd=5 zwraca rozmiar bloku pamięci flash w bajtach; cmd=6 kasuje blok o indeksie arg.