class SDCard – SD-/MMC-kaartstuurprogramma¶
De klasse SDCard bestuurt de SD-/MMC-kaartsleuf op OpenMV-cams die er een hebben. Het stuurprogramma implementeert de vfs.AbstractBlockDev-interface, zodat het rechtstreeks aan vfs.mount() kan worden doorgegeven:
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Notitie
OpenMV-firmware koppelt de SD-kaart automatisch bij het opstarten, dus de meeste scripts maken nooit rechtstreeks een SDCard aan – ze lezen en schrijven gewoon via het automatisch gekoppelde pad. Maak er alleen handmatig een aan wanneer je een niet-standaard koppelpunt nodig hebt of ruwe blok-niveau toegang via readblocks() / writeblocks() / ioctl().
Op de OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 wordt de sleuf aangestuurd door de on-chip SDMMC-controller van de STM32 in 4-bits SD-modus. Op de OpenMV Cam RT1062 wordt de sleuf aangestuurd door de USDHC-controller van de i.MX RT, eveneens in 4-bits SD-modus. Er zijn op geen enkel huidig OpenMV-board pin-mux-argumenten nodig – het stuurprogramma kent de bedrading van het board.
Niet beschikbaar op de OpenMV Cam AE3 (alif-port).
Constructors¶
- class machine.SDCard(id: int = 1) SDCard¶
Geeft de
SDCard-singleton terug voor de SD-sleuf die wordt aangeduid metid.idwordt geaccepteerd voor compatibiliteit tussen ports, maar de door OpenMV ondersteunde ports stellen slechts één sleuf beschikbaar; geef1op of laat het weg.Op STM32 neemt de constructor helemaal geen argumenten; op mimxrt wordt het
id-argument geaccepteerd, maar is alleen1geldig.Methods¶
- present() bool¶
Geeft
Trueterug als er momenteel een kaart in de sleuf wordt gedetecteerd, andersFalse.Op boards die een card-detect-signaal bedraden, weerspiegelt de methode dat signaal in realtime, zodat het na het construeren van het
SDCard-object kan worden gepolld om te reageren op hot insertion / verwijdering. Op boards zonder card-detect-signaal wordt de waarde vastgelegd bij het construeren – ze rapporteert het resultaat van de initiële CMD0-probe die het stuurprogramma deed toen het object werd aangemaakt, en een kaart die daarna hot wordt ingebracht is niet zichtbaar totdat het object opnieuw wordt geconstrueerd (ofinit()wordt aangeroepen op mimxrt).
- info() tuple[int, int, int]¶
Geeft een 3-tuple terug dat de momenteel ingebrachte kaart beschrijft:
[0]num_blocks– totale capaciteit in blokken van 512 byte. Vermenigvuldig met 512 om de ruwe bytecapaciteit te krijgen.[1]block_size– altijd512voor SD-kaarten. Toegevoegd zodat aanroepers draagbaarnum_blocks * block_sizekunnen berekenen.[2]card_type– het kaarttype zoals gerapporteerd door de SD-bus tijdens de CMD8- / OCR-initialisatiehandshake. Typische waarden zijn0(SDSC – standaardcapaciteit),0x40(SDHC / SDXC – hoge / uitgebreide capaciteit) en0x80(MMC).
Handig om te controleren of de kaart is herkend, of om de hoeveelheid vrije ruimte ten opzichte van de totale capaciteit weer te geven.
- power(state: bool, /) None¶
Schakelt de voedingsrail van de kaartsleuf in of uit. STM32-firmware stelt de methode beschikbaar, maar geen enkele huidige OpenMV Cam schakelt de SD-voeding, dus de aanroep is in feite een no-op. Behouden voor compatibiliteit met code die oorspronkelijk is geschreven voor de upstream MicroPython STM32-referentieboards. Alleen STM32-port.
- read(block_num: int, /) bytes¶
Leest een enkel blok van 512 byte van de kaart en geeft het terug als een nieuw toegewezen
bytes-object.Dit is de verouderde single-block-read die door de STM32-port wordt geleverd. Nieuwe code moet in plaats daarvan
readblocks()gebruiken – die methode werkt op elke OpenMV-port, kan een willekeurig aantal aaneengesloten blokken in één transfer lezen en vermijdt de toewijzing per aanroep door in een door de aanroeper geleverde buffer te schrijven. Alleen STM32-port.
- write(block_num: int, data: bytes, /) None¶
Schrijft een enkel blok van 512 byte naar de kaart.
datamoet precies 512 byte lang zijn.Dit is de verouderde single-block-write die door de STM32-port wordt geleverd; nieuwe code moet in plaats daarvan
writeblocks()gebruiken, die op elke OpenMV-port werkt en een willekeurig aantal aaneengesloten blokken per aanroep kan schrijven. Alleen STM32-port.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Leest ruwe blok-uitgelijnde gegevens van de kaart in
buf. Standaardvfs.AbstractBlockDev-blokapparaat-ingangspunt dat door de bestandssysteemlaag wordt gebruikt.Eenvoudige vorm (
readblocks(block_num, buf)): leest hele blokken vanaf blokindexblock_num.len(buf)moet een veelvoud zijn van de SD-blokgrootte (512 byte).Uitgebreide vorm (
readblocks(block_num, buf, offset)): leestlen(buf)bytes – niet noodzakelijk een geheel aantal blokken – vanaf byteoffsetbinnen blokblock_num. Gebruikt door littlefs en andere byte-adresseerbare bestandssystemen.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Schrijft ruwe blok-uitgelijnde gegevens van
bufnaar de kaart. Standaardvfs.AbstractBlockDev-blokapparaat-ingangspunt dat door de bestandssysteemlaag wordt gebruikt.Eenvoudige vorm (
writeblocks(block_num, buf)): schrijft hele blokken vanaf blokindexblock_num.len(buf)moet een veelvoud zijn van de SD-blokgrootte (512 byte). Elk betrokken blok wordt volledig overschreven.Uitgebreide vorm (
writeblocks(block_num, buf, offset)): schrijftlen(buf)bytes – niet noodzakelijk een geheel aantal blokken – vanaf byteoffsetbinnen blokblock_num. Gebruikt door littlefs en andere byte-adresseerbare bestandssystemen.
- ioctl(cmd: int, arg: int) int | None¶
Standaard
vfs.AbstractBlockDev-besturingsingangspunt. Wordt aangeroepen door de bestandssysteemlaag bij het koppelen/ontkoppelen en bij elke sync. De herkendecmd-waarden zijn:1– initialiseren. Geeft0terug bij succes.2– deïnitialiseren. Geeft0terug bij succes.3– alle openstaande schrijfacties synchroniseren. Geeft0terug (het SDMMC-stuurprogramma schrijft synchroon, er is niets om te flushen).4– geeft het aantal blokken op het apparaat terug.5– geeft de grootte van een enkel blok terug (altijd 512).6– een blok wissen (no-op op SD, behouden voor hetvfs.AbstractBlockDev-contract).7– geeft terug of het apparaat blok wissen ondersteunt (0 op SD).
Directe aanroepers gebruiken deze methode normaal gesproken niet – het bestandssysteemstuurprogramma verzendt alle standaardcodes automatisch zodra de
SDCardis gekoppeld.
- init(*args, **kwargs) None¶
Herinitialiseert de SD-interface vanaf nul. Accepteert dezelfde argumenten als de constructor. Handig om een hot ingebrachte kaart opnieuw te detecteren op boards zonder card-detect-signaal, aangezien
present()anders bij het construeren wordt vastgelegd. Alleen mimxrt-port.
- deinit() None¶
Deïnitialiseert de SD-interface en geeft de SDMMC/USDHC-controller en de IO-pinnen die het in beslag nam vrij. Het
SDCard-object wordt onbruikbaar totdatinit()opnieuw wordt aangeroepen. Gebruik het voordat je de kaart vanaf een andere interface opnieuw flasht, of om de voeding naar de sleuf uit te schakelen in een batterijgevoede toepassing. Alleen mimxrt-port.