alif — Alif Ensemble SoC fonksiyonları

alif modülü, Alif Ensemble SoC için porta özgü işlevselliği açığa çıkarır; bu, yerleşik OSPI flash belleğe yönelik bir blok aygıtı sarmalayıcısını ve Secure Enclave hizmetlerinden SoC bilgilerini dökmek için bir yardımcıyı içerir.

Örnek:

import alif

alif.info()
flash = alif.Flash()

Fonksiyonlar

alif.info() None

Alif Secure Enclave hizmetlerinden (SE hizmetleri) toplanan aygıt bilgilerini seri terminale döker.

Sınıflar

class alif.Flash(*, start: int = -1, len: int = -1)

Yerleşik OSPI flash bellek tarafından desteklenen bir blok aygıtı nesnesi oluşturur. Bu sınıf yalnızca aygıt yazılımı (firmware) OSPI desteği etkinleştirilerek derlendiğinde kullanılabilir.

Argüman verilmeden çağrıldığında, flash belleğin yazılabilir dosya sistemi bölgesini kapsayan varsayılan tekil (singleton) nesneyi döndürür.

start, flash bellek depolama bölgesi içindeki bayt ofsetidir. Flash bellek blok boyutunun katı olmalı ve flash bellek depolama aralığı içinde kalmalıdır. Varsayılan olarak -1 değerine sahiptir; bu da 0 ofsetinden başlamak anlamına gelir.

len, nesnenin açığa çıkardığı flash bellek bölgesinin bayt cinsinden uzunluğudur. Flash bellek blok boyutunun katı olmalı ve flash bellek depolama bölgesinin sonunu aşmamalıdır. Varsayılan olarak -1 değerine sahiptir; bu da start konumundan kalan tüm baytları kullanmak anlamına gelir.

Nesne ayrıca arabellek protokolünü de uygular; bu sayede OSPI XIP tabanı aracılığıyla flash bellek bölgesine salt okunur bellek eşlemeli erişim sağlanır. Bu, herhangi bir flash bellek okuması yapılmadan tüm bölgenin sıfır kopyalı bir görünümünü kullanılabilir kılar:

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

Flash bellekten buf içine baytlar okur. İki aşırı yükleme, basit ve genişletilmiş arayüzleri açığa çıkarır:

Basit biçim (readblocks(block_num, buf)): block_num blok dizininden başlayarak tam bloklar okur. len(buf), flash bellek blok boyutunun katı olmalıdır.

Genişletilmiş biçim (readblocks(block_num, buf, offset)): block_num bloğu içindeki offset baytından başlayarak len(buf) bayt okur – ki bu mutlaka tam sayıda blok olmak zorunda değildir. len(buf) için herhangi bir hizalama kısıtlaması yoktur.

Başarı durumunda 0, aksi halde negatif bir hata kodu döndürür. Standart MicroPython blok aygıtı protokolünün None döndürdüğünü unutmayın; alif sürücüsü, vfs modülünü atlayan çağıranların donanım hatalarına tepki verebilmesi için alttaki OSPI durum kodunu kasıtlı olarak açığa çıkarır.

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

buf içindeki baytları flash belleğe yazar. İki aşırı yükleme, basit ve genişletilmiş arayüzleri açığa çıkarır:

Basit biçim (writeblocks(block_num, buf)): block_num blok dizininden başlayarak tam bloklar yazar. len(buf), flash bellek blok boyutunun katı olmalıdır. Etkilenen her blok, yazılmadan önce otomatik olarak silinir.

Genişletilmiş biçim (writeblocks(block_num, buf, offset)): block_num bloğu içindeki offset baytından başlayarak len(buf) bayt yazar – ki bu mutlaka tam sayıda blok olmak zorunda değildir. len(buf) için herhangi bir hizalama kısıtlaması yoktur ve örtük silme yapılmaz – çağıranın, etkilenen blokların önceden bir ioctl(6, block_num) çağrısı aracılığıyla silinmiş olduğundan emin olması gerekir.

Başarı durumunda 0, aksi halde negatif bir hata kodu döndürür (gerekçe için readblocks() bölümüne bakın).

ioctl(cmd: int, arg: int) int

Bir blok aygıtı denetim işlemi gerçekleştirir. cmd, standart MicroPython MP_BLOCKDEV_IOCTL_* komutlarından biridir:

  • 1 (init) — 0 döndürür.

  • 2 (deinit) — 0 döndürür.

  • 3 (sync) — 0 döndürür.

  • 4 (blok sayısı) — bölgedeki blok sayısını döndürür.

  • 5 (blok boyutu) — flash bellek blok boyutunu bayt cinsinden döndürür.

  • 6 (blok silme) — arg dizinindeki bloğu siler ve silme işleminin sonucunu döndürür.

Diğer cmd değerleri None döndürür.

Sabitler

alif.usb_msc: bool

Yalnızca aygıt yazılımı (firmware) USB Mass Storage Class desteği etkinleştirilerek derlendiğinde mevcuttur ve True olarak ayarlanır. Aksi halde bu öznitelik bulunmaz.