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.Об’єкт також реалізує протокол буфера, дозволяючи доступ до регіону флеш-пам’яті лише для читання через відображення пам’яті за базовою адресою OSPI XIP. Це забезпечує нульове копіювання перегляду всього регіону без виконання жодних читань флеш-пам’яті:
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.