alif --- fungsi SoC Alif Ensemble¶
Modul alif mengekspos fungsionalitas khusus port untuk SoC Alif Ensemble, termasuk wrapper perangkat blok untuk flash OSPI yang terpasang di board dan helper untuk membuang informasi SoC dari layanan Secure Enclave.
Contoh:
import alif
alif.info()
flash = alif.Flash()
Fungsi¶
Kelas¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Membuat objek perangkat blok yang didukung oleh flash OSPI yang terpasang di board. Kelas ini hanya tersedia ketika firmware dibangun dengan dukungan OSPI yang diaktifkan.
Ketika dipanggil tanpa argumen, mengembalikan objek singleton default yang mencakup wilayah filesystem yang dapat ditulis dari flash.
startadalah offset byte ke dalam wilayah penyimpanan flash. Harus merupakan kelipatan dari ukuran blok flash dan berada dalam rentang penyimpanan flash. Defaultnya adalah-1yang berarti mulai dari offset0.lenadalah panjang dalam byte dari wilayah flash yang diekspos oleh objek. Harus merupakan kelipatan dari ukuran blok flash dan tidak boleh melampaui akhir wilayah penyimpanan flash. Defaultnya adalah-1yang berarti gunakan semua byte yang tersisa daristart.Objek ini juga mengimplementasikan protokol buffer, memungkinkan akses memory-mapped hanya-baca ke wilayah flash melalui basis OSPI XIP. Ini membuat tampilan zero-copy dari seluruh wilayah tersedia tanpa mengeluarkan pembacaan flash apa pun:
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
Membaca byte dari flash ke dalam
buf. Dua overload mengekspos antarmuka sederhana dan diperluas:Bentuk sederhana (
readblocks(block_num, buf)): membaca blok penuh mulai dari indeks blokblock_num.len(buf)harus merupakan kelipatan dari ukuran blok flash.Bentuk diperluas (
readblocks(block_num, buf, offset)): membacalen(buf)byte -- tidak harus merupakan jumlah blok penuh -- mulai dari byteoffsetdalam blokblock_num.len(buf)tidak memiliki batasan penyelarasan.Mengembalikan
0jika berhasil atau kode kesalahan negatif. Perhatikan bahwa protokol perangkat blok MicroPython standar mengembalikanNone; driveralifsecara sengaja mengekspos kode status OSPI yang mendasarinya sehingga pemanggil yang melewativfsdapat bereaksi terhadap kesalahan hardware.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Menulis byte dari
bufke flash. Dua overload mengekspos antarmuka sederhana dan diperluas:Bentuk sederhana (
writeblocks(block_num, buf)): menulis blok penuh mulai dari indeks blokblock_num.len(buf)harus merupakan kelipatan dari ukuran blok flash. Setiap blok yang terpengaruh dihapus secara otomatis sebelum ditulis.Bentuk diperluas (
writeblocks(block_num, buf, offset)): menulislen(buf)byte -- tidak harus merupakan jumlah blok penuh -- mulai dari byteoffsetdalam blokblock_num.len(buf)tidak memiliki batasan penyelarasan, dan tidak ada penghapusan implisit yang dilakukan -- pemanggil harus memastikan blok yang terpengaruh telah dihapus melalui panggilanioctl(6, block_num)sebelumnya.Mengembalikan
0jika berhasil atau kode kesalahan negatif (lihatreadblocks()untuk alasannya).
- ioctl(cmd: int, arg: int) int¶
Melakukan operasi kontrol perangkat blok.
cmdadalah salah satu perintah MicroPython standarMP_BLOCKDEV_IOCTL_*:1(init) --- mengembalikan0.2(deinit) --- mengembalikan0.3(sync) --- mengembalikan0.4(jumlah blok) --- mengembalikan jumlah blok dalam wilayah.5(ukuran blok) --- mengembalikan ukuran blok flash dalam byte.6(hapus blok) --- menghapus blok pada indeksargdan mengembalikan hasil operasi penghapusan.
Nilai
cmdlainnya mengembalikanNone.