SDCard osztály – SD / MMC kártyameghajtó¶
A SDCard osztály az SD / MMC kártyafoglalatot vezérli azokon az OpenMV kamerákon, amelyek rendelkeznek ilyennel. A meghajtó megvalósítja a vfs.AbstractBlockDev interfészt, így közvetlenül átadható a vfs.mount() függvénynek:
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Megjegyzés
Az OpenMV firmware indításkor automatikusan csatolja az SD kártyát, így a legtöbb szkript soha nem hoz létre közvetlenül SDCard objektumot – egyszerűen az automatikusan csatolt útvonalon keresztül olvas és ír. Csak akkor hozz létre egyet kézzel, ha nem alapértelmezett csatolási pontra vagy nyers, blokk szintű hozzáférésre van szükséged a readblocks() / writeblocks() / ioctl() metódusokon keresztül.
Az OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 modelleken a foglalatot az STM32 chipbe integrált SDMMC vezérlője hajtja meg 4 bites SD üzemmódban. Az OpenMV Cam RT1062 modellen a foglalatot az i.MX RT USDHC vezérlője hajtja meg, szintén 4 bites SD üzemmódban. Egyetlen jelenlegi OpenMV lapon sincs szükség láb-multiplexer argumentumokra – a meghajtó ismeri a lap bekötését.
Nincs elérhetővé téve az OpenMV Cam AE3 modellen (alif port).
Konstruktorok¶
- class machine.SDCard(id: int = 1) SDCard¶
Visszaadja az
idáltal azonosított SD foglalathoz tartozóSDCardegyke (singleton) példányt. Azida portok közötti kompatibilitás érdekében elfogadott, de az OpenMV által támogatott portok csak egyetlen foglalatot tesznek elérhetővé; add meg az1értéket, vagy hagyd el.STM32 esetén a konstruktor egyáltalán nem fogad argumentumokat; mimxrt esetén az
idargumentum elfogadott, de csak az1érvényes.Metódusok¶
- present() bool¶
Visszaadja a
Trueértéket, ha jelenleg kártya van észlelve a foglalatban, egyébként aFalseértéket.Azokon a lapokon, amelyek kártyaérzékelő jelet vezetnek be, a metódus valós időben tükrözi ezt a jelet, így a
SDCardobjektum létrehozása után lekérdezhető, hogy reagáljon a kártya menet közbeni behelyezésére / eltávolítására. A kártyaérzékelő jellel nem rendelkező lapokon az érték a létrehozáskor rögzül – a meghajtó által az objektum létrehozásakor végzett kezdeti CMD0 vizsgálat eredményét jelzi, és egy utólag, menet közben behelyezett kártya nem lesz látható, amíg az objektumot újra létre nem hozzák (vagy mimxrt esetén meg nem hívják azinit()metódust).
- info() tuple[int, int, int]¶
Visszaad egy 3 elemű rendezett párt (tuple), amely a jelenleg behelyezett kártyát írja le:
[0]num_blocks– a teljes kapacitás 512 bájtos blokkokban. Szorozd meg 512-vel a nyers bájtkapacitás megkapásához.[1]block_size– SD kártyák esetén mindig512. Azért szerepel, hogy a hívók hordozható módon elvégezhessék anum_blocks * block_sizeműveletet.[2]card_type– a kártya típusa, amelyet az SD busz jelentett a CMD8 / OCR inicializálási kézfogás során. Tipikus értékek a0(SDSC – standard kapacitás), a0x40(SDHC / SDXC – nagy / kibővített kapacitás) és a0x80(MMC).
Hasznos annak ellenőrzésére, hogy a kártya felismerésre került-e, vagy a szabad helyre vonatkozó adatok teljes kapacitáshoz viszonyított megjelenítésére.
- power(state: bool, /) None¶
Be- vagy kikapcsolja a kártyafoglalat tápsínjét. Az STM32 firmware elérhetővé teszi ezt a metódust, de egyetlen jelenlegi OpenMV Cam sem szabályozza az SD tápellátást, így a hívás gyakorlatilag nem csinál semmit. A kompatibilitás kedvéért megtartva olyan kódhoz, amelyet eredetileg az upstream MicroPython STM32 referencialapokhoz írtak. Csak STM32 port.
- read(block_num: int, /) bytes¶
Beolvas egyetlen 512 bájtos blokkot a kártyáról, és újonnan lefoglalt
bytesobjektumként adja vissza.Ez az STM32 port által szállított, örökölt egyblokkos olvasás. Az új kódnak ehelyett a
readblocks()metódust kell használnia – az minden OpenMV porton működik, egyetlen átvitelben tetszőleges számú összefüggő blokkot képes olvasni, és elkerüli a hívásonkénti lefoglalást azáltal, hogy egy hívó által biztosított pufferbe ír. Csak STM32 port.
- write(block_num: int, data: bytes, /) None¶
Egyetlen 512 bájtos blokkot ír a kártyára. A
datahosszának pontosan 512 bájtnak kell lennie.Ez az STM32 port által szállított, örökölt egyblokkos írás; az új kódnak ehelyett a
writeblocks()metódust kell használnia, amely minden OpenMV porton működik, és hívásonként tetszőleges számú összefüggő blokkot képes írni. Csak STM32 port.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Nyers, blokkhatárhoz igazított adatokat olvas be a kártyáról a
bufpufferbe. A fájlrendszer rétege által használt standardvfs.AbstractBlockDevblokkeszköz belépési pont.Egyszerű forma (
readblocks(block_num, buf)): teljes blokkokat olvas ablock_numblokkindextől kezdődően. Alen(buf)értéknek az SD blokkméret (512 bájt) többszörösének kell lennie.Kibővített forma (
readblocks(block_num, buf, offset)):len(buf)bájtot olvas – nem feltétlenül egész számú blokkot – ablock_numblokkon belülioffsetbájttól kezdődően. A littlefs és más bájtcímezhető fájlrendszerek használják.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Nyers, blokkhatárhoz igazított adatokat ír a
bufpufferből a kártyára. A fájlrendszer rétege által használt standardvfs.AbstractBlockDevblokkeszköz belépési pont.Egyszerű forma (
writeblocks(block_num, buf)): teljes blokkokat ír ablock_numblokkindextől kezdődően. Alen(buf)értéknek az SD blokkméret (512 bájt) többszörösének kell lennie. Minden érintett blokk teljes egészében felülíródik.Kibővített forma (
writeblocks(block_num, buf, offset)):len(buf)bájtot ír – nem feltétlenül egész számú blokkot – ablock_numblokkon belülioffsetbájttól kezdődően. A littlefs és más bájtcímezhető fájlrendszerek használják.
- ioctl(cmd: int, arg: int) int | None¶
Standard
vfs.AbstractBlockDevvezérlési belépési pont. A fájlrendszer rétege hívja meg csatoláskor/leválasztáskor és minden szinkronizáláskor. A felismertcmdértékek a következők:1– inicializálás. Sikeresség esetén0értéket ad vissza.2– de-inicializálás. Sikeresség esetén0értéket ad vissza.3– a függőben lévő írások szinkronizálása.0értéket ad vissza (az SDMMC meghajtó szinkron módon ír, nincs mit kiüríteni).4– visszaadja az eszközön lévő blokkok számát.5– visszaadja egyetlen blokk méretét (mindig 512).6– blokk törlése (SD esetén nem csinál semmit, avfs.AbstractBlockDevszerződés kedvéért megtartva).7– visszaadja, hogy az eszköz támogatja-e a blokktörlést (SD esetén 0).
A közvetlen hívók általában nem használják ezt a metódust – a fájlrendszer-meghajtó automatikusan kezeli az összes standard kódot, miután a
SDCardcsatolásra került.
- init(*args, **kwargs) None¶
Az SD interfész teljes újrainicializálása. Ugyanazokat az argumentumokat fogadja el, mint a konstruktor. Hasznos a menet közben behelyezett kártya újraészleléséhez kártyaérzékelő jel nélküli lapokon, mivel a
present()egyébként a létrehozáskor rögzül. Csak mimxrt port.
- deinit() None¶
De-inicializálja az SD interfészt, felszabadítva az SDMMC/USDHC vezérlőt és az általa lefoglalt IO lábakat. A
SDCardobjektum használhatatlanná válik, amíg azinit()metódust újra meg nem hívják. Használd, mielőtt egy másik interfészről újraírnád a kártyát, vagy hogy lekapcsold a foglalat tápellátását egy akkumulátoros alkalmazásban. Csak mimxrt port.