alif — Alif Ensemble SoC -funktiot

Moduuli alif tarjoaa Alif Ensemble SoC -piirille porttikohtaista toiminnallisuutta, mukaan lukien lohkolaitekääreen sisäänrakennetulle OSPI flash-muistille sekä apuvälineen SoC-tietojen dumppaamiseen Secure Enclave -palveluista.

Esimerkki:

import alif

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

Funktiot

alif.info() None

Dumppaa Alif Secure Enclave -palveluista (SE-palvelut) kerätyt laitetiedot sarjapäätteeseen.

Luokat

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

Luo lohkolaiteobjektin, jonka taustana on sisäänrakennettu OSPI flash-muisti. Tämä luokka on käytettävissä vain, kun laiteohjelmisto on käännetty OSPI-tuki käytössä.

Ilman argumentteja kutsuttuna palauttaa oletussingleton-objektin, joka kattaa flash-muistin kirjoitettavan tiedostojärjestelmäalueen.

start on tavusiirtymä flash-tallennusalueelle. Sen on oltava flash-lohkokoon monikerta ja flash-tallennusalueen sisällä. Oletusarvo on -1, mikä tarkoittaa aloitusta siirtymästä 0.

len on objektin paljastaman flash-alueen pituus tavuina. Sen on oltava flash-lohkokoon monikerta eikä se saa ulottua flash-tallennusalueen loppua pidemmälle. Oletusarvo on -1, mikä tarkoittaa kaikkien jäljellä olevien tavujen käyttöä kohdasta start lähtien.

Objekti toteuttaa myös puskuriprotokollan, mikä mahdollistaa vain luku -tyyppisen muistikartoitetun pääsyn flash-alueelle OSPI XIP -perusosoitteen kautta. Tämä tarjoaa koko alueesta nollakopioisen näkymän ilman yhtäkään flash-lukua:

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

Lue tavuja flash-muistista puskuriin buf. Kaksi ylikuormitusta paljastaa yksinkertaisen ja laajennetun rajapinnan:

Yksinkertainen muoto (readblocks(block_num, buf)): lukee kokonaisia lohkoja alkaen lohkoindeksistä block_num. Arvon len(buf) on oltava flash-lohkokoon monikerta.

Laajennettu muoto (readblocks(block_num, buf, offset)): lukee len(buf) tavua – ei välttämättä kokonaista määrää lohkoja – alkaen tavusta offset lohkon block_num sisällä. Arvolla len(buf) ei ole kohdistusrajoitusta.

Palauttaa 0 onnistuessaan tai negatiivisen virhekoodin. Huomaa, että MicroPythonin vakiintunut lohkolaiteprotokolla palauttaa None; alif-ajuri paljastaa tarkoituksella alla olevan OSPI-tilakoodin, jotta kutsujat, jotka ohittavat vfs-moduulin, voivat reagoida laitteistovirheisiin.

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

Kirjoita tavuja puskurista buf flash-muistiin. Kaksi ylikuormitusta paljastaa yksinkertaisen ja laajennetun rajapinnan:

Yksinkertainen muoto (writeblocks(block_num, buf)): kirjoittaa kokonaisia lohkoja alkaen lohkoindeksistä block_num. Arvon len(buf) on oltava flash-lohkokoon monikerta. Jokainen kohteena oleva lohko tyhjennetään automaattisesti ennen kirjoittamista.

Laajennettu muoto (writeblocks(block_num, buf, offset)): kirjoittaa len(buf) tavua – ei välttämättä kokonaista määrää lohkoja – alkaen tavusta offset lohkon block_num sisällä. Arvolla len(buf) ei ole kohdistusrajoitusta, eikä mitään implisiittistä tyhjennystä suoriteta – kutsujan on varmistettava, että kohteena olevat lohkot on tyhjennetty aiemmalla ioctl(6, block_num) -kutsulla.

Palauttaa 0 onnistuessaan tai negatiivisen virhekoodin (katso readblocks() perustelut).

ioctl(cmd: int, arg: int) int

Suorittaa lohkolaitteen ohjaustoiminnon. cmd on yksi MicroPythonin vakiintuneista MP_BLOCKDEV_IOCTL_* -komennoista:

  • 1 (init) — palauttaa 0.

  • 2 (deinit) — palauttaa 0.

  • 3 (sync) — palauttaa 0.

  • 4 (block count) — palauttaa alueen lohkojen määrän.

  • 5 (block size) — palauttaa flash-lohkokoon tavuina.

  • 6 (block erase) — tyhjentää lohkon indeksissä arg ja palauttaa tyhjennystoiminnon tuloksen.

Muut cmd-arvot palauttavat None.

Vakiot

alif.usb_msc: bool

Läsnä ja asetettuna arvoon True vain, kun laiteohjelmisto on käännetty USB Mass Storage Class -tuki käytössä. Muutoin attribuutti puuttuu.