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¶
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-1değerine sahiptir; bu da0ofsetinden 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-1değerine sahiptir; bu dastartkonumundan 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
bufiç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_numblok 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_numbloğu içindekioffsetbaytından başlayaraklen(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ünNonedöndürdüğünü unutmayın;alifsürücüsü,vfsmodü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
bufiç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_numblok 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_numbloğu içindekioffsetbaytından başlayaraklen(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 birioctl(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çinreadblocks()bölümüne bakın).
- ioctl(cmd: int, arg: int) int¶
Bir blok aygıtı denetim işlemi gerçekleştirir.
cmd, standart MicroPythonMP_BLOCKDEV_IOCTL_*komutlarından biridir:1(init) —0döndürür.2(deinit) —0döndürür.3(sync) —0dö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) —argdizinindeki bloğu siler ve silme işleminin sonucunu döndürür.
Diğer
cmddeğerleriNonedöndürür.