class SDCard – drivrutin för SD-/MMC-kort¶
Klassen SDCard styr SD-/MMC-kortplatsen på OpenMV-kameror som har en sådan. Drivrutinen implementerar gränssnittet vfs.AbstractBlockDev så att den kan skickas direkt till vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Anteckning
OpenMV-firmware monterar SD-kortet automatiskt vid uppstart, så de flesta skript konstruerar aldrig en SDCard direkt – de läser och skriver bara via den automatiskt monterade sökvägen. Konstruera en manuellt endast när du behöver en icke-standardmonteringspunkt eller åtkomst på rå blocknivå via readblocks() / writeblocks() / ioctl().
På OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 styrs kortplatsen av STM32:ns inbyggda SDMMC-styrenhet i 4-bitars SD-läge. På OpenMV Cam RT1062 styrs kortplatsen av i.MX RT:ns USDHC-styrenhet, också i 4-bitars SD-läge. Inga pin-mux-argument behövs på något aktuellt OpenMV-kort – drivrutinen känner till kortets kopplingar.
Exponeras inte på OpenMV Cam AE3 (alif-porten).
Konstruktorer¶
- class machine.SDCard(id: int = 1) SDCard¶
Returnerar singleton-objektet
SDCardför den SD-plats som identifieras avid.idaccepteras för korsportskompatibilitet, men de OpenMV-stödda portarna exponerar endast en plats; skicka1eller utelämna det.På STM32 tar konstruktorn inga argument alls; på mimxrt accepteras argumentet
idmen endast1är giltigt.Metoder¶
- present() bool¶
Returnerar
Trueom ett kort för närvarande detekteras i platsen, annarsFalse.På kort som kopplar en kortdetekteringssignal speglar metoden den signalen i realtid, så den kan pollas efter att
SDCard-objektet har konstruerats för att reagera på varm insättning/borttagning. På kort utan kortdetekteringssignal låses värdet vid konstruktionstillfället – det rapporterar resultatet av den initiala CMD0-avsökning som drivrutinen gjorde när objektet skapades, och ett kort som sätts in varmt efteråt blir inte synligt förrän objektet konstrueras om (ellerinit()anropas på mimxrt).
- info() tuple[int, int, int]¶
Returnerar en 3-tupel som beskriver det för närvarande insatta kortet:
[0]num_blocks– total kapacitet i 512-byteblock. Multiplicera med 512 för att få den råa bytekapaciteten.[1]block_size– alltid512för SD-kort. Inkluderas så att anropare portabelt kan beräknanum_blocks * block_size.[2]card_type– den korttyp som rapporteras av SD-bussen under initieringshandskakningen CMD8/OCR. Typiska värden är0(SDSC – standardkapacitet),0x40(SDHC/SDXC – hög/utökad kapacitet) och0x80(MMC).
Användbart för att rimlighetskontrollera att kortet kändes igen, eller för att visa siffror för ledigt utrymme relativt total kapacitet.
- power(state: bool, /) None¶
Slå på eller av strömskenan till kortplatsen. STM32-firmware exponerar metoden, men ingen aktuell OpenMV Cam stänger av SD-strömförsörjningen, så anropet är i praktiken utan effekt. Behålls för kompatibilitet med kod som ursprungligen skrevs för MicroPythons STM32-referenskort uppströms. Endast STM32-porten.
- read(block_num: int, /) bytes¶
Läs ett enskilt 512-byteblock från kortet och returnera det som ett nyallokerat
bytes-objekt.Detta är den äldre enkelblocksläsningen som levereras av STM32-porten. Ny kod bör använda
readblocks()i stället – den metoden fungerar på alla OpenMV-portar, kan läsa valfritt antal sammanhängande block i en överföring och undviker allokeringen per anrop genom att skriva in i en buffert som anroparen tillhandahåller. Endast STM32-porten.
- write(block_num: int, data: bytes, /) None¶
Skriv ett enskilt 512-byteblock till kortet.
datamåste vara exakt 512 byte långt.Detta är den äldre enkelblocksskrivningen som levereras av STM32-porten; ny kod bör använda
writeblocks()i stället, vilken fungerar på alla OpenMV-portar och kan skriva valfritt antal sammanhängande block per anrop. Endast STM32-porten.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Läs rå blockjusterad data från kortet in i
buf. Standardingång för blockenheter enligtvfs.AbstractBlockDevsom används av filsystemslagret.Enkel form (
readblocks(block_num, buf)): läs hela block med början vid blockindexblock_num.len(buf)måste vara en multipel av SD-blockstorleken (512 byte).Utökad form (
readblocks(block_num, buf, offset)): läslen(buf)byte – inte nödvändigtvis ett helt antal block – med början vid byteoffsetinom blockblock_num. Används av littlefs och andra byteadresserbara filsystem.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Skriv rå blockjusterad data från
buftill kortet. Standardingång för blockenheter enligtvfs.AbstractBlockDevsom används av filsystemslagret.Enkel form (
writeblocks(block_num, buf)): skriv hela block med början vid blockindexblock_num.len(buf)måste vara en multipel av SD-blockstorleken (512 byte). Varje berört block skrivs över i sin helhet.Utökad form (
writeblocks(block_num, buf, offset)): skrivlen(buf)byte – inte nödvändigtvis ett helt antal block – med början vid byteoffsetinom blockblock_num. Används av littlefs och andra byteadresserbara filsystem.
- ioctl(cmd: int, arg: int) int | None¶
Standardkontrollingång enligt
vfs.AbstractBlockDev. Anropas av filsystemslagret vid montering/avmontering och vid varje synkronisering. De igenkändacmd-värdena är:1– initiera. Returnerar0vid lyckat resultat.2– avinitiera. Returnerar0vid lyckat resultat.3– synkronisera eventuella väntande skrivningar. Returnerar0(SDMMC-drivrutinen skriver synkront, inget att tömma).4– returnera antalet block på enheten.5– returnera storleken på ett enskilt block (alltid 512).6– radera ett block (utan effekt på SD, behålls förvfs.AbstractBlockDev-kontraktet).7– returnera huruvida enheten stöder blockradering (0 på SD).
Direkta anropare använder normalt inte denna metod – filsystemsdrivrutinen hanterar alla standardkoder automatiskt så snart
SDCardär monterad.
- init(*args, **kwargs) None¶
Återinitiera SD-gränssnittet från grunden. Accepterar samma argument som konstruktorn. Användbart för att åter detektera ett varmt insatt kort på kort utan kortdetekteringssignal, eftersom
present()annars är låst vid konstruktionstillfället. Endast mimxrt-porten.
- deinit() None¶
Avinitiera SD-gränssnittet och frigör SDMMC/USDHC-styrenheten och de IO-stift den hade gjort anspråk på.
SDCard-objektet blir oanvändbart tillsinit()anropas igen. Använd det innan kortet omflashas från ett annat gränssnitt, eller för att stänga av strömmen till platsen i en batteridriven tillämpning. Endast mimxrt-porten.