class SDCard – driver pentru carduri SD / MMC¶
Clasa SDCard controlează slotul pentru carduri SD / MMC al camerelor OpenMV care dispun de unul. Driverul implementează interfața vfs.AbstractBlockDev, astfel încât poate fi transmis direct către vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Notă
Firmware-ul OpenMV montează automat cardul SD la pornire, așa că majoritatea scripturilor nu construiesc niciodată direct un obiect SDCard – ele doar citesc și scriu prin calea montată automat. Construiți manual unul doar atunci când aveți nevoie de un punct de montare diferit de cel implicit sau de acces brut, la nivel de bloc, prin readblocks() / writeblocks() / ioctl().
Pe OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 slotul este controlat de controlerul SDMMC integrat al STM32 în modul SD pe 4 biți. Pe OpenMV Cam RT1062 slotul este controlat de controlerul USDHC al i.MX RT, tot în modul SD pe 4 biți. Nu este nevoie de niciun argument de pin-mux pe nicio placă OpenMV actuală – driverul cunoaște cablajul plăcii.
Nu este expusă pe OpenMV Cam AE3 (portul alif).
Constructori¶
- class machine.SDCard(id: int = 1) SDCard¶
Returnează instanța unică (singleton)
SDCardpentru slotul SD identificat prinid.ideste acceptat pentru compatibilitate între porturi, dar porturile suportate de OpenMV expun un singur slot; transmiteți1sau omiteți-l.Pe STM32 constructorul nu acceptă niciun argument; pe mimxrt argumentul
ideste acceptat, dar doar1este valid.Metode¶
- present() bool¶
Returnează
Truedacă în slot este detectat în prezent un card, altfelFalse.Pe plăcile care conectează un semnal de detectare a cardului, metoda reflectă acel semnal în timp real, astfel încât poate fi interogată după ce obiectul
SDCarda fost construit pentru a reacționa la inserarea / scoaterea la cald. Pe plăcile fără semnal de detectare a cardului, valoarea este fixată în momentul construcției – raportează rezultatul sondării inițiale CMD0 efectuate de driver la crearea obiectului, iar un card inserat la cald ulterior nu va fi vizibil până când obiectul nu este reconstruit (sau până cândinit()este apelată pe mimxrt).
- info() tuple[int, int, int]¶
Returnează un tuplu cu 3 elemente care descrie cardul inserat în prezent:
[0]num_blocks– capacitatea totală în blocuri de 512 octeți. Înmulțiți cu 512 pentru a obține capacitatea brută în octeți.[1]block_size– întotdeauna512pentru cardurile SD. Inclus pentru ca apelanții să poată calcula portabilnum_blocks * block_size.[2]card_type– tipul de card raportat de magistrala SD în timpul procesului de inițializare CMD8 / OCR. Valorile tipice sunt0(SDSC – capacitate standard),0x40(SDHC / SDXC – capacitate înaltă / extinsă) și0x80(MMC).
Util pentru a verifica faptul că un card a fost recunoscut sau pentru a afișa valori de spațiu liber raportate la capacitatea totală.
- power(state: bool, /) None¶
Pornește sau oprește alimentarea slotului pentru card. Firmware-ul STM32 expune metoda, dar nicio cameră OpenMV Cam actuală nu controlează alimentarea SD, așa că apelul este practic fără efect. Păstrat pentru compatibilitate cu codul scris inițial pentru plăcile de referință STM32 din MicroPython upstream. Doar pentru portul STM32.
- read(block_num: int, /) bytes¶
Citește un singur bloc de 512 octeți de pe card și îl returnează ca un obiect
bytesnou alocat.Aceasta este citirea pe un singur bloc, moștenită, livrată de portul STM32. Codul nou ar trebui să folosească în schimb
readblocks()– acea metodă funcționează pe fiecare port OpenMV, poate citi orice număr de blocuri contigue într-un singur transfer și evită alocarea la fiecare apel scriind într-un tampon (buffer) furnizat de apelant. Doar pentru portul STM32.
- write(block_num: int, data: bytes, /) None¶
Scrie un singur bloc de 512 octeți pe card.
datatrebuie să aibă exact 512 octeți.Aceasta este scrierea pe un singur bloc, moștenită, livrată de portul STM32; codul nou ar trebui să folosească în schimb
writeblocks(), care funcționează pe fiecare port OpenMV și poate scrie orice număr de blocuri contigue per apel. Doar pentru portul STM32.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Citește date brute aliniate la bloc de pe card în
buf. Punct de intrare standard al dispozitivului de blocurivfs.AbstractBlockDev, utilizat de stratul sistemului de fișiere.Forma simplă (
readblocks(block_num, buf)): citește blocuri întregi începând de la indexul de blocblock_num.len(buf)trebuie să fie un multiplu al dimensiunii blocului SD (512 octeți).Forma extinsă (
readblocks(block_num, buf, offset)): citeștelen(buf)octeți – nu neapărat un număr întreg de blocuri – începând de la octetuloffsetdin cadrul bloculuiblock_num. Utilizată de littlefs și de alte sisteme de fișiere adresabile la nivel de octet.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Scrie date brute aliniate la bloc din
bufpe card. Punct de intrare standard al dispozitivului de blocurivfs.AbstractBlockDev, utilizat de stratul sistemului de fișiere.Forma simplă (
writeblocks(block_num, buf)): scrie blocuri întregi începând de la indexul de blocblock_num.len(buf)trebuie să fie un multiplu al dimensiunii blocului SD (512 octeți). Fiecare bloc afectat este suprascris complet.Forma extinsă (
writeblocks(block_num, buf, offset)): scrielen(buf)octeți – nu neapărat un număr întreg de blocuri – începând de la octetuloffsetdin cadrul bloculuiblock_num. Utilizată de littlefs și de alte sisteme de fișiere adresabile la nivel de octet.
- ioctl(cmd: int, arg: int) int | None¶
Punct de intrare standard de control
vfs.AbstractBlockDev. Apelat de stratul sistemului de fișiere la momentul montării/demontării și la fiecare sincronizare. Valorilecmdrecunoscute sunt:1– inițializare. Returnează0în caz de succes.2– dezinițializare. Returnează0în caz de succes.3– sincronizează orice scrieri în așteptare. Returnează0(driverul SDMMC scrie sincron, nu este nimic de golit).4– returnează numărul de blocuri de pe dispozitiv.5– returnează dimensiunea unui singur bloc (întotdeauna 512).6– șterge un bloc (fără efect pe SD, păstrat pentru contractulvfs.AbstractBlockDev).7– returnează dacă dispozitivul suportă ștergerea blocurilor (0 pe SD).
În mod normal, apelanții direcți nu folosesc această metodă – driverul sistemului de fișiere distribuie automat toate codurile standard odată ce obiectul
SDCardeste montat.
- init(*args, **kwargs) None¶
Reinițializează interfața SD de la zero. Acceptă aceleași argumente ca și constructorul. Util pentru re-detectarea unui card inserat la cald pe plăci fără semnal de detectare a cardului, deoarece
present()este altfel fixată în momentul construcției. Doar pentru portul mimxrt.
- deinit() None¶
Dezinițializează interfața SD, eliberând controlerul SDMMC/USDHC și pinii IO pe care i-a revendicat. Obiectul
SDCarddevine inutilizabil până cândinit()este apelată din nou. Folosiți-o înainte de a re-scrie cardul de pe o altă interfață sau pentru a întrerupe alimentarea slotului într-o aplicație alimentată cu baterie. Doar pentru portul mimxrt.