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

alif.info() None

Membuang informasi perangkat yang dikumpulkan dari layanan Alif Secure Enclave (layanan SE) ke terminal serial.

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.

start adalah offset byte ke dalam wilayah penyimpanan flash. Harus merupakan kelipatan dari ukuran blok flash dan berada dalam rentang penyimpanan flash. Defaultnya adalah -1 yang berarti mulai dari offset 0.

len adalah 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 -1 yang berarti gunakan semua byte yang tersisa dari start.

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 blok block_num. len(buf) harus merupakan kelipatan dari ukuran blok flash.

Bentuk diperluas (readblocks(block_num, buf, offset)): membaca len(buf) byte -- tidak harus merupakan jumlah blok penuh -- mulai dari byte offset dalam blok block_num. len(buf) tidak memiliki batasan penyelarasan.

Mengembalikan 0 jika berhasil atau kode kesalahan negatif. Perhatikan bahwa protokol perangkat blok MicroPython standar mengembalikan None; driver alif secara sengaja mengekspos kode status OSPI yang mendasarinya sehingga pemanggil yang melewati vfs dapat bereaksi terhadap kesalahan hardware.

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

Menulis byte dari buf ke flash. Dua overload mengekspos antarmuka sederhana dan diperluas:

Bentuk sederhana (writeblocks(block_num, buf)): menulis blok penuh mulai dari indeks blok block_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)): menulis len(buf) byte -- tidak harus merupakan jumlah blok penuh -- mulai dari byte offset dalam blok block_num. len(buf) tidak memiliki batasan penyelarasan, dan tidak ada penghapusan implisit yang dilakukan -- pemanggil harus memastikan blok yang terpengaruh telah dihapus melalui panggilan ioctl(6, block_num) sebelumnya.

Mengembalikan 0 jika berhasil atau kode kesalahan negatif (lihat readblocks() untuk alasannya).

ioctl(cmd: int, arg: int) int

Melakukan operasi kontrol perangkat blok. cmd adalah salah satu perintah MicroPython standar MP_BLOCKDEV_IOCTL_*:

  • 1 (init) --- mengembalikan 0.

  • 2 (deinit) --- mengembalikan 0.

  • 3 (sync) --- mengembalikan 0.

  • 4 (jumlah blok) --- mengembalikan jumlah blok dalam wilayah.

  • 5 (ukuran blok) --- mengembalikan ukuran blok flash dalam byte.

  • 6 (hapus blok) --- menghapus blok pada indeks arg dan mengembalikan hasil operasi penghapusan.

Nilai cmd lainnya mengembalikan None.

Konstanta

alif.usb_msc: bool

Ada dan diatur ke True hanya ketika firmware dibangun dengan dukungan USB Mass Storage Class yang diaktifkan. Atribut ini tidak ada jika tidak.