alif — funktioner för Alif Ensemble SoC¶
Modulen alif exponerar portspecifik funktionalitet för Alif Ensemble SoC, inklusive ett blockenhetsomslag för det inbyggda OSPI-flashminnet och en hjälpfunktion för att dumpa SoC-information från tjänsterna i Secure Enclave.
Exempel:
import alif
alif.info()
flash = alif.Flash()
Funktioner¶
Klasser¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Skapar ett blockenhetsobjekt som backas av det inbyggda OSPI-flashminnet. Den här klassen är endast tillgänglig när den fasta programvaran byggs med OSPI-stöd aktiverat.
Vid anrop utan argument returneras standardsingletonobjektet som täcker den skrivbara filsystemsregionen i flashminnet.
startär byteoffset in i flashminnets lagringsregion. Det måste vara en multipel av flashminnets blockstorlek och ligga inom flashminnets lagringsintervall. Standardvärdet är-1vilket innebär start vid offset0.lenär längden i byte för den flashregion som exponeras av objektet. Det måste vara en multipel av flashminnets blockstorlek och får inte sträcka sig förbi slutet på flashminnets lagringsregion. Standardvärdet är-1vilket innebär att alla återstående byte frånstartanvänds.Objektet implementerar även buffertprotokollet, vilket möjliggör skrivskyddad minnesmappad åtkomst till flashregionen via OSPI XIP-basen. Detta gör en kopieringsfri vy över hela regionen tillgänglig utan att några flashläsningar utförs:
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
Läser byte från flashminnet till
buf. Två överlagringar exponerar det enkla och det utökade gränssnittet:Enkel form (
readblocks(block_num, buf)): läser hela block med början vid blockindexblock_num.len(buf)måste vara en multipel av flashminnets blockstorlek.Utökad form (
readblocks(block_num, buf, offset)): läserlen(buf)byte – inte nödvändigtvis ett helt antal block – med början vid byteoffsetinom blockblock_num.len(buf)har inget justeringskrav.Returnerar
0vid lyckat resultat eller en negativ felkod. Observera att MicroPythons standardprotokoll för blockenheter returnerarNone; drivrutinenalifexponerar avsiktligt den underliggande OSPI-statuskoden så att anropare som kringgårvfskan reagera på hårdvarufel.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Skriver byte från
buftill flashminnet. Två överlagringar exponerar det enkla och det utökade gränssnittet:Enkel form (
writeblocks(block_num, buf)): skriver hela block med början vid blockindexblock_num.len(buf)måste vara en multipel av flashminnets blockstorlek. Varje berört block raderas automatiskt innan det skrivs.Utökad form (
writeblocks(block_num, buf, offset)): skriverlen(buf)byte – inte nödvändigtvis ett helt antal block – med början vid byteoffsetinom blockblock_num.len(buf)har inget justeringskrav, och ingen implicit radering utförs – anroparen måste säkerställa att de berörda blocken har raderats via ett tidigare anrop tillioctl(6, block_num).Returnerar
0vid lyckat resultat eller en negativ felkod (sereadblocks()för motivet).
- ioctl(cmd: int, arg: int) int¶
Utför en kontrolloperation för blockenheten.
cmdär ett av MicroPythons standardkommandonMP_BLOCKDEV_IOCTL_*:1(init) — returnerar0.2(deinit) — returnerar0.3(sync) — returnerar0.4(blockantal) — returnerar antalet block i regionen.5(blockstorlek) — returnerar flashminnets blockstorlek i byte.6(blockradering) — raderar blocket vid indexargoch returnerar resultatet av raderingsoperationen.
Andra värden på
cmdreturnerarNone.