třída SDCard – ovladač SD / MMC karty¶
Třída SDCard ovládá slot pro SD / MMC kartu na kamerách OpenMV, které jej mají. Ovladač implementuje rozhraní vfs.AbstractBlockDev, takže jej lze předat přímo funkci vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Poznámka
Firmware OpenMV automaticky připojí SD kartu při startu, takže většina skriptů nikdy nevytváří objekt SDCard přímo – jednoduše čtou a zapisují přes automaticky připojenou cestu. Vytvořte jej ručně pouze tehdy, když potřebujete jiný než výchozí přípojný bod nebo přímý blokový přístup přes readblocks() / writeblocks() / ioctl().
Na OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 je slot řízen integrovaným řadičem SDMMC v čipu STM32 v 4bitovém SD režimu. Na OpenMV Cam RT1062 je slot řízen řadičem USDHC čipu i.MX RT, rovněž v 4bitovém SD režimu. Na žádné aktuální desce OpenMV nejsou potřeba žádné argumenty pro multiplexování pinů – ovladač zná zapojení desky.
Není dostupné na OpenMV Cam AE3 (port alif).
Konstruktory¶
- class machine.SDCard(id: int = 1) SDCard¶
Vrátí singleton
SDCardpro SD slot identifikovaný pomocíid.idje akceptováno kvůli kompatibilitě napříč porty, ale porty podporované OpenMV vystavují pouze jeden slot; předejte1nebo jej vynechte.Na STM32 konstruktor nepřijímá vůbec žádné argumenty; na mimxrt je argument
idakceptován, ale platná je pouze hodnota1.Metody¶
- present() bool¶
Vrátí
True, pokud je ve slotu aktuálně detekována karta, jinakFalse.Na deskách, které zapojují signál detekce karty, metoda odráží tento signál v reálném čase, takže ji lze po vytvoření objektu
SDCardperiodicky dotazovat a reagovat na vložení / vyjmutí karty za chodu. Na deskách bez signálu detekce karty je hodnota uzamčena v okamžiku vytvoření – hlásí výsledek počáteční sondy CMD0, kterou ovladač provedl při vytvoření objektu, a karta vložená za chodu poté nebude viditelná, dokud nebude objekt znovu vytvořen (nebo na mimxrt zavolána metodainit()).
- info() tuple[int, int, int]¶
Vrátí trojici (3-tuple) popisující aktuálně vloženou kartu:
[0]num_blocks– celková kapacita v 512bajtových blocích. Vynásobte 512 pro získání kapacity v bajtech.[1]block_size– pro SD karty vždy512. Zahrnuto, aby volající mohli přenositelně provéstnum_blocks * block_size.[2]card_type– typ karty hlášený SD sběrnicí během inicializačního handshaku CMD8 / OCR. Typické hodnoty jsou0(SDSC – standardní kapacita),0x40(SDHC / SDXC – vysoká / rozšířená kapacita) a0x80(MMC).
Užitečné pro ověření, že byla karta rozpoznána, nebo pro zobrazení údajů o volném místě vzhledem k celkové kapacitě.
- power(state: bool, /) None¶
Zapne nebo vypne napájecí větev slotu karty. Firmware STM32 metodu vystavuje, ale žádná aktuální OpenMV Cam nereguluje napájení SD karty, takže volání je fakticky bez efektu. Ponecháno kvůli kompatibilitě s kódem původně napsaným pro referenční desky STM32 z hlavního proudu MicroPython. Pouze port STM32.
- read(block_num: int, /) bytes¶
Přečte jeden 512bajtový blok z karty a vrátí jej jako nově alokovaný objekt
bytes.Toto je starší čtení jednoho bloku dodávané portem STM32. Nový kód by měl místo toho používat
readblocks()– tato metoda funguje na každém portu OpenMV, umí přečíst libovolný počet souvislých bloků v jednom přenosu a vyhýbá se alokaci při každém volání tím, že zapisuje do bufferu dodaného volajícím. Pouze port STM32.
- write(block_num: int, data: bytes, /) None¶
Zapíše jeden 512bajtový blok na kartu.
datamusí mít přesně 512 bajtů.Toto je starší zápis jednoho bloku dodávaný portem STM32; nový kód by měl místo toho používat
writeblocks(), který funguje na každém portu OpenMV a umí zapsat libovolný počet souvislých bloků na jedno volání. Pouze port STM32.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Přečte z karty surová data zarovnaná na bloky do
buf. Standardní vstupní bod blokového zařízenívfs.AbstractBlockDevpoužívaný vrstvou souborového systému.Jednoduchá forma (
readblocks(block_num, buf)): přečte celé bloky počínaje indexem blokublock_num.len(buf)musí být násobkem velikosti SD bloku (512 bajtů).Rozšířená forma (
readblocks(block_num, buf, offset)): přečtelen(buf)bajtů – ne nutně celý počet bloků – počínaje bajtemoffsetv rámci blokublock_num. Používá se v littlefs a dalších bajtově adresovatelných souborových systémech.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Zapíše surová data zarovnaná na bloky z
bufna kartu. Standardní vstupní bod blokového zařízenívfs.AbstractBlockDevpoužívaný vrstvou souborového systému.Jednoduchá forma (
writeblocks(block_num, buf)): zapíše celé bloky počínaje indexem blokublock_num.len(buf)musí být násobkem velikosti SD bloku (512 bajtů). Každý dotčený blok je přepsán celý.Rozšířená forma (
writeblocks(block_num, buf, offset)): zapíšelen(buf)bajtů – ne nutně celý počet bloků – počínaje bajtemoffsetv rámci blokublock_num. Používá se v littlefs a dalších bajtově adresovatelných souborových systémech.
- ioctl(cmd: int, arg: int) int | None¶
Standardní řídicí vstupní bod
vfs.AbstractBlockDev. Volán vrstvou souborového systému při připojení/odpojení a při každé synchronizaci. Rozpoznané hodnotycmdjsou:1– inicializace. Při úspěchu vrátí0.2– deinicializace. Při úspěchu vrátí0.3– synchronizace všech čekajících zápisů. Vrací0(ovladač SDMMC zapisuje synchronně, není co vyprázdnit).4– vrátí počet bloků na zařízení.5– vrátí velikost jednoho bloku (vždy 512).6– vymaže blok (na SD bez efektu, ponecháno kvůli kontraktuvfs.AbstractBlockDev).7– vrátí, zda zařízení podporuje mazání bloků (na SD 0).
Přímí volající tuto metodu obvykle nepoužívají – ovladač souborového systému automaticky odbavuje všechny standardní kódy, jakmile je
SDCardpřipojena.
- init(*args, **kwargs) None¶
Znovu inicializuje SD rozhraní od základu. Přijímá stejné argumenty jako konstruktor. Užitečné pro opětovnou detekci karty vložené za chodu na deskách bez signálu detekce karty, protože
present()je jinak uzamčeno v okamžiku vytvoření. Pouze port mimxrt.
- deinit() None¶
Deinicializuje SD rozhraní, uvolní řadič SDMMC/USDHC a IO piny, které si nárokoval. Objekt
SDCardse stane nepoužitelným, dokud nebude znovu zavolána metodainit(). Použijte jej před opětovným naplněním karty z jiného rozhraní nebo pro odpojení napájení slotu v aplikaci napájené z baterie. Pouze port mimxrt.