alif — функции SoC Alif Ensemble¶
Модуль alif предоставляет специфичную для порта функциональность для SoC Alif Ensemble, включая обёртку блочного устройства для встроенной OSPI флеш-памяти и вспомогательную функцию для вывода информации о SoC из служб Secure Enclave.
Пример:
import alif
alif.info()
flash = alif.Flash()
Функции¶
Классы¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Создаёт объект блочного устройства, основанный на встроенной OSPI флеш-памяти. Этот класс доступен только тогда, когда прошивка собрана с включённой поддержкой OSPI.
При вызове без аргументов возвращает объект-синглтон по умолчанию, охватывающий область флеш-памяти с записываемой файловой системой.
start— это байтовое смещение в области хранения флеш-памяти. Должно быть кратно размеру блока флеш-памяти и находиться в пределах диапазона хранения флеш-памяти. По умолчанию-1, что означает начало со смещения0.len— это длина в байтах области флеш-памяти, предоставляемой объектом. Должна быть кратна размеру блока флеш-памяти и не выходить за конец области хранения флеш-памяти. По умолчанию-1, что означает использование всех оставшихся байтов начиная сstart.Объект также реализует протокол буфера, обеспечивая доступ к области флеш-памяти только для чтения через отображение в память (memory-mapped) с использованием базового адреса OSPI XIP. Это делает доступным представление всей области без копирования (zero-copy) без выполнения каких-либо чтений флеш-памяти:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
Читает байты из флеш-памяти в
buf. Две перегрузки предоставляют простой и расширенный интерфейсы:Простая форма (
readblocks(block_num, buf)): читает целые блоки начиная с индекса блокаblock_num.len(buf)должно быть кратно размеру блока флеш-памяти.Расширенная форма (
readblocks(block_num, buf, offset)): читаетlen(buf)байтов — не обязательно целое число блоков — начиная с байтовогоoffsetвнутри блокаblock_num.len(buf)не имеет ограничений по выравниванию.Возвращает
0в случае успеха или отрицательный код ошибки. Обратите внимание, что стандартный протокол блочного устройства MicroPython возвращаетNone; драйверalifнамеренно предоставляет базовый код состояния OSPI, чтобы вызывающий код, обходящийvfs, мог реагировать на аппаратные ошибки.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Записывает байты из
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).Возвращает
0в случае успеха или отрицательный код ошибки (обоснование см. вreadblocks()).
- ioctl(cmd: int, arg: int) int¶
Выполняет операцию управления блочным устройством.
cmd— это одна из стандартных команд MicroPythonMP_BLOCKDEV_IOCTL_*:1(init) — возвращает0.2(deinit) — возвращает0.3(sync) — возвращает0.4(block count) — возвращает количество блоков в области.5(block size) — возвращает размер блока флеш-памяти в байтах.6(block erase) — стирает блок с индексомargи возвращает результат операции стирания.
Другие значения
cmdвозвращаютNone.