class SDCard – SD / MMC -korttiajuri

SDCard -luokka ohjaa SD / MMC -korttipaikkaa niissä OpenMV-kameroissa, joissa sellainen on. Ajuri toteuttaa vfs.AbstractBlockDev -rajapinnan, joten sen voi välittää suoraan funktiolle vfs.mount()

import machine
import vfs

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

Muista

OpenMV-laiteohjelmisto liittää SD-kortin automaattisesti käynnistyksen yhteydessä, joten useimmat skriptit eivät koskaan luo SDCard -oliota suoraan – ne vain lukevat ja kirjoittavat automaattisesti liitetyn polun kautta. Luo olio käsin vain silloin, kun tarvitset oletuksesta poikkeavan liitospisteen tai raakaa lohkotason käyttöä metodien readblocks() / writeblocks() / ioctl() kautta.

OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 -malleissa korttipaikkaa ohjaa STM32:n sisäinen SDMMC-ohjain 4-bittisessä SD-tilassa. OpenMV Cam RT1062 -mallissa korttipaikkaa ohjaa i.MX RT:n USDHC-ohjain, myös 4-bittisessä SD-tilassa. Nykyisissä OpenMV-korteissa ei tarvita pin-mux-argumentteja – ajuri tuntee kortin johdotuksen.

Ei käytettävissä OpenMV Cam AE3 -mallissa (alif-portti).

Rakentajat

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

Palauttaa SDCard -singletonin SD-paikalle, joka tunnistetaan parametrilla id. id hyväksytään porttien välisen yhteensopivuuden vuoksi, mutta OpenMV:n tukemissa porteissa on käytössä vain yksi paikka; anna arvoksi 1 tai jätä se pois.

STM32:ssa rakentaja ei ota lainkaan argumentteja; mimxrt:ssä id -argumentti hyväksytään, mutta vain 1 on kelvollinen.

Metodit

present() bool

Palauttaa True, jos paikassa on tällä hetkellä tunnistettu kortti, muuten False.

Korteissa, joihin on johdotettu kortintunnistussignaali, metodi heijastaa kyseistä signaalia reaaliajassa, joten sitä voidaan kysellä SDCard -olion luomisen jälkeen reagoidakseen kortin lisäämiseen / poistamiseen käytön aikana. Korteissa, joissa ei ole kortintunnistussignaalia, arvo lukitaan rakentamisvaiheessa – se kertoo tuloksen alkuperäisestä CMD0-tutkinnasta, jonka ajuri teki olion luonnin yhteydessä, eikä sen jälkeen lisättyä korttia havaita ennen kuin olio rakennetaan uudelleen (tai mimxrt:ssä kutsutaan init()).

info() tuple[int, int, int]

Palauttaa 3-tuplen, joka kuvaa tällä hetkellä asetettua korttia:

  • [0] num_blocks – kokonaiskapasiteetti 512-tavuisina lohkoina. Kerro 512:lla saadaksesi raakatavukapasiteetin.

  • [1] block_size – aina 512 SD-korteille. Sisällytetty, jotta kutsujat voivat laskea num_blocks * block_size siirrettävästi.

  • [2] card_type – kortin tyyppi, jonka SD-väylä ilmoittaa CMD8 / OCR -alustuskättelyn aikana. Tyypillisiä arvoja ovat 0 (SDSC – vakiokapasiteetti), 0x40 (SDHC / SDXC – suuri / laajennettu kapasiteetti) ja 0x80 (MMC).

Hyödyllinen tarkistettaessa, että kortti tunnistettiin, tai näytettäessä vapaan tilan lukuja suhteessa kokonaiskapasiteettiin.

power(state: bool, /) None

Kytke korttipaikan virtakisko päälle tai pois. STM32-laiteohjelmisto tarjoaa metodin, mutta mikään nykyinen OpenMV Cam ei katkaise SD:n virransyöttöä, joten kutsu on käytännössä tyhjä operaatio. Säilytetty yhteensopivuuden vuoksi koodille, joka kirjoitettiin alun perin ylävirran MicroPython STM32 -referenssikorteille. Vain STM32-portti.

read(block_num: int, /) bytes

Lukee yhden 512-tavuisen lohkon kortilta ja palauttaa sen uutena varatulla bytes -oliona.

Tämä on STM32-portin mukana tuleva vanhentunut yhden lohkon luku. Uuden koodin tulisi käyttää sen sijaan metodia readblocks() – se toimii jokaisessa OpenMV-portissa, voi lukea minkä tahansa määrän peräkkäisiä lohkoja yhdellä siirrolla ja välttää kutsukohtaisen varauksen kirjoittamalla kutsujan antamaan puskuriin. Vain STM32-portti.

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

Kirjoittaa yhden 512-tavuisen lohkon kortille. data -arvon on oltava täsmälleen 512 tavua pitkä.

Tämä on STM32-portin mukana tuleva vanhentunut yhden lohkon kirjoitus; uuden koodin tulisi käyttää sen sijaan metodia writeblocks(), joka toimii jokaisessa OpenMV-portissa ja voi kirjoittaa minkä tahansa määrän peräkkäisiä lohkoja kutsua kohti. Vain STM32-portti.

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

Lukee raakaa lohkokohdistettua dataa kortilta puskuriin buf. Vakiomuotoinen vfs.AbstractBlockDev -lohkolaitteen sisäänkäynti, jota tiedostojärjestelmäkerros käyttää.

Yksinkertainen muoto (readblocks(block_num, buf)): lukee kokonaisia lohkoja alkaen lohkoindeksistä block_num. len(buf) -arvon on oltava SD-lohkokoon (512 tavua) monikerta.

Laajennettu muoto (readblocks(block_num, buf, offset)): lukee len(buf) tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusta offset lohkon block_num sisällä. Käyttävät littlefs ja muut tavuosoitettavat tiedostojärjestelmät.

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

Kirjoittaa raakaa lohkokohdistettua dataa puskurista buf kortille. Vakiomuotoinen vfs.AbstractBlockDev -lohkolaitteen sisäänkäynti, jota tiedostojärjestelmäkerros käyttää.

Yksinkertainen muoto (writeblocks(block_num, buf)): kirjoittaa kokonaisia lohkoja alkaen lohkoindeksistä block_num. len(buf) -arvon on oltava SD-lohkokoon (512 tavua) monikerta. Jokainen kohdelohko ylikirjoitetaan kokonaan.

Laajennettu muoto (writeblocks(block_num, buf, offset)): kirjoittaa len(buf) tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusta offset lohkon block_num sisällä. Käyttävät littlefs ja muut tavuosoitettavat tiedostojärjestelmät.

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

Vakiomuotoinen vfs.AbstractBlockDev -ohjauksen sisäänkäynti. Tiedostojärjestelmäkerros kutsuu sitä liitos-/irrotusvaiheessa ja jokaisella synkronoinnilla. Tunnistetut cmd -arvot ovat:

  • 1 – alustus. Palauttaa 0 onnistuessaan.

  • 2 – alustuksen purku. Palauttaa 0 onnistuessaan.

  • 3 – synkronoi kaikki vireillä olevat kirjoitukset. Palauttaa 0 (SDMMC-ajuri kirjoittaa synkronisesti, ei mitään tyhjennettävää).

  • 4 – palauttaa laitteen lohkojen määrän.

  • 5 – palauttaa yhden lohkon koon (aina 512).

  • 6 – tyhjentää lohkon (tyhjä operaatio SD:llä, säilytetty vfs.AbstractBlockDev -sopimuksen vuoksi).

  • 7 – palauttaa, tukeeko laite lohkon tyhjentämistä (0 SD:llä).

Suorat kutsujat eivät yleensä käytä tätä metodia – tiedostojärjestelmäajuri lähettää kaikki vakiokoodit automaattisesti, kun SDCard on liitetty.

init(*args, **kwargs) None

Alustaa SD-rajapinnan uudelleen alusta alkaen. Hyväksyy samat argumentit kuin rakentaja. Hyödyllinen kortin uudelleentunnistamiseen käytön aikana lisätyllä kortilla korteissa, joissa ei ole kortintunnistussignaalia, koska present() on muuten lukittu rakentamisvaiheessa. Vain mimxrt-portti.

deinit() None

Purkaa SD-rajapinnan alustuksen vapauttaen SDMMC/USDHC-ohjaimen ja sen varaamat IO-nastat. SDCard -oliosta tulee käyttökelvoton, kunnes init() kutsutaan uudelleen. Käytä sitä ennen kortin uudelleenflashausta toisesta rajapinnasta tai katkaistaksesi virran paikasta akkukäyttöisessä sovelluksessa. Vain mimxrt-portti.