class SDCard – upravljački program za SD / MMC kartice

Klasa SDCard upravlja utorom za SD / MMC karticu na OpenMV kamerama koje ga imaju. Upravljački program implementira sučelje vfs.AbstractBlockDev pa se može izravno proslijediti funkciji vfs.mount()

import machine
import vfs

sd = machine.SDCard()
vfs.mount(sd, "/sd")

Napomena

OpenMV firmware automatski montira SD karticu pri pokretanju, pa većina skripti nikada izravno ne stvara objekt SDCard – one samo čitaju i pišu kroz automatski montiranu putanju. Objekt stvarajte ručno samo kada vam treba nestandardna točka montiranja ili izravan pristup na razini blokova putem readblocks() / writeblocks() / ioctl().

Na OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 utorom upravlja STM32-ov ugrađeni SDMMC kontroler u 4-bitnom SD načinu rada. Na OpenMV Cam RT1062 utorom upravlja USDHC kontroler i.MX RT-a, također u 4-bitnom SD načinu rada. Na nijednoj trenutnoj OpenMV ploči nisu potrebni argumenti za mapiranje pinova – upravljački program poznaje ožičenje ploče.

Nije dostupno na OpenMV Cam AE3 (alif port).

Konstruktori

class machine.SDCard(id: int = 1) SDCard

Vraća jedinstveni (singleton) objekt SDCard za SD utor identificiran s id. id se prihvaća radi kompatibilnosti između portova, ali OpenMV-podržani portovi izlažu samo jedan utor; proslijedite 1 ili ga izostavite.

Na STM32 konstruktor uopće ne uzima argumente; na mimxrt argument id se prihvaća, ali valjan je samo 1.

Metode

present() bool

Vraća True ako je kartica trenutno otkrivena u utoru, inače False.

Na pločama koje ožičuju signal za otkrivanje kartice metoda odražava taj signal u stvarnom vremenu, pa se može ispitivati nakon što je objekt SDCard stvoren kako bi se reagiralo na umetanje / uklanjanje tijekom rada. Na pločama bez signala za otkrivanje kartice vrijednost se zaključava pri stvaranju objekta – prijavljuje rezultat početne CMD0 provjere koju je upravljački program obavio pri stvaranju objekta, a kartica umetnuta tijekom rada nakon toga neće biti vidljiva dok se objekt ponovno ne stvori (ili dok se na mimxrt ne pozove init()).

info() tuple[int, int, int]

Vraća uređenu trojku (3-tuple) koja opisuje trenutno umetnutu karticu:

  • [0] num_blocks – ukupni kapacitet u blokovima od 512 bajtova. Pomnožite s 512 da dobijete sirovi kapacitet u bajtovima.

  • [1] block_size – uvijek 512 za SD kartice. Uključeno kako bi pozivatelji mogli prijenosno izračunati num_blocks * block_size.

  • [2] card_type – tip kartice koji SD sabirnica prijavljuje tijekom CMD8 / OCR inicijalizacijskog rukovanja. Tipične vrijednosti su 0 (SDSC – standardni kapacitet), 0x40 (SDHC / SDXC – visoki / prošireni kapacitet) i 0x80 (MMC).

Korisno za provjeru je li kartica prepoznata ili za prikaz podataka o slobodnom prostoru u odnosu na ukupni kapacitet.

power(state: bool, /) None

Uključuje ili isključuje napajanje utora za karticu. STM32 firmware izlaže metodu, ali nijedna trenutna OpenMV Cam ne kontrolira napajanje SD-a, pa poziv zapravo nema učinka. Zadržano radi kompatibilnosti s kodom izvorno napisanim za referentne STM32 ploče iz izvornog MicroPythona. Samo STM32 port.

read(block_num: int, /) bytes

Čita jedan blok od 512 bajtova s kartice i vraća ga kao novostvoreni objekt bytes.

Ovo je naslijeđeno čitanje jednog bloka koje isporučuje STM32 port. Novi kod umjesto toga treba koristiti readblocks() – ta metoda radi na svakom OpenMV portu, može pročitati bilo koji broj uzastopnih blokova u jednom prijenosu i izbjegava alokaciju po pozivu pišući u međuspremnik koji isporučuje pozivatelj. Samo STM32 port.

write(block_num: int, data: bytes, /) None

Piše jedan blok od 512 bajtova na karticu. data mora biti točno 512 bajtova dug.

Ovo je naslijeđeno pisanje jednog bloka koje isporučuje STM32 port; novi kod umjesto toga treba koristiti writeblocks(), koji radi na svakom OpenMV portu i može zapisati bilo koji broj uzastopnih blokova po pozivu. Samo STM32 port.

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Čita sirove podatke poravnate na blokove s kartice u buf. Standardna ulazna točka blok-uređaja vfs.AbstractBlockDev koju koristi sloj datotečnog sustava.

Jednostavan oblik (readblocks(block_num, buf)): čita cijele blokove počevši od indeksa bloka block_num. len(buf) mora biti višekratnik veličine SD bloka (512 bajtova).

Prošireni oblik (readblocks(block_num, buf, offset)): čita len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. Koristi ga littlefs i drugi bajtno adresabilni datotečni sustavi.

writeblocks(block_num: int, buf: bytes | bytearray) None
writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None

Piše sirove podatke poravnate na blokove iz buf na karticu. Standardna ulazna točka blok-uređaja vfs.AbstractBlockDev koju koristi sloj datotečnog sustava.

Jednostavan oblik (writeblocks(block_num, buf)): piše cijele blokove počevši od indeksa bloka block_num. len(buf) mora biti višekratnik veličine SD bloka (512 bajtova). Svaki zahvaćeni blok se u cijelosti prepisuje.

Prošireni oblik (writeblocks(block_num, buf, offset)): piše len(buf) bajtova – ne nužno cijeli broj blokova – počevši od bajta offset unutar bloka block_num. Koristi ga littlefs i drugi bajtno adresabilni datotečni sustavi.

ioctl(cmd: int, arg: int) int | None

Standardna upravljačka ulazna točka vfs.AbstractBlockDev. Poziva ju sloj datotečnog sustava pri montiranju/demontiranju i pri svakoj sinkronizaciji. Prepoznate cmd vrijednosti su:

  • 1 – inicijalizacija. Vraća 0 u slučaju uspjeha.

  • 2 – deinicijalizacija. Vraća 0 u slučaju uspjeha.

  • 3 – sinkronizira sva pisanja na čekanju. Vraća 0 (SDMMC upravljački program piše sinkrono, nema ništa za pražnjenje).

  • 4 – vraća broj blokova na uređaju.

  • 5 – vraća veličinu jednog bloka (uvijek 512).

  • 6 – briše blok (bez učinka na SD-u, zadržano radi ugovora vfs.AbstractBlockDev).

  • 7 – vraća podržava li uređaj brisanje blokova (0 na SD-u).

Izravni pozivatelji obično ne koriste ovu metodu – upravljački program datotečnog sustava automatski raspoređuje sve standardne kodove čim je SDCard montiran.

init(*args, **kwargs) None

Ponovno inicijalizira SD sučelje od početka. Prihvaća iste argumente kao konstruktor. Korisno za ponovno otkrivanje kartice umetnute tijekom rada na pločama bez signala za otkrivanje kartice, budući da je present() inače zaključan pri stvaranju objekta. Samo mimxrt port.

deinit() None

Deinicijalizira SD sučelje, otpuštajući SDMMC/USDHC kontroler i IO pinove koje je zauzeo. Objekt SDCard postaje neupotrebljiv dok se ponovno ne pozove init(). Koristite ga prije ponovnog upisivanja kartice s drugog sučelja ili za isključivanje napajanja utora u aplikaciji napajanoj baterijom. Samo mimxrt port.