klasa SDCard – sterownik karty SD / MMC¶
Klasa SDCard obsługuje gniazdo karty SD / MMC w kamerach OpenMV, które je posiadają. Sterownik implementuje interfejs vfs.AbstractBlockDev, dzięki czemu można go przekazać bezpośrednio do vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Informacja
Oprogramowanie układowe OpenMV automatycznie montuje kartę SD podczas rozruchu, więc większość skryptów nigdy nie tworzy obiektu SDCard bezpośrednio – po prostu odczytują i zapisują dane przez automatycznie zamontowaną ścieżkę. Konstruuj obiekt ręcznie tylko wtedy, gdy potrzebujesz niestandardowego punktu montowania lub surowego dostępu na poziomie bloków przez readblocks() / writeblocks() / ioctl().
W kamerach OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 gniazdo jest obsługiwane przez wbudowany kontroler SDMMC układu STM32 w trybie 4-bitowym SD. W kamerze OpenMV Cam RT1062 gniazdo jest obsługiwane przez kontroler USDHC układu i.MX RT, również w trybie 4-bitowym SD. Na żadnej z obecnych płytek OpenMV nie są potrzebne argumenty multipleksowania pinów – sterownik zna okablowanie płytki.
Niedostępne w kamerze OpenMV Cam AE3 (port alif).
Konstruktory¶
- class machine.SDCard(id: int = 1) SDCard¶
Zwraca singleton
SDCarddla gniazda SD identyfikowanego przezid.idjest akceptowane dla zgodności między portami, ale porty obsługiwane przez OpenMV udostępniają tylko jedno gniazdo; przekaż1lub pomiń ten argument.Na STM32 konstruktor nie przyjmuje żadnych argumentów; na mimxrt argument
idjest akceptowany, ale prawidłowa jest tylko wartość1.Metody¶
- present() bool¶
Zwraca
True, jeśli w gnieździe wykryto kartę, w przeciwnym razieFalse.Na płytkach z sygnałem wykrywania karty metoda odzwierciedla ten sygnał w czasie rzeczywistym, więc można ją odpytywać po skonstruowaniu obiektu
SDCard, aby reagować na włożenie / wyjęcie karty na gorąco. Na płytkach bez sygnału wykrywania karty wartość jest zatrzaśnięta w momencie konstrukcji – zgłasza wynik początkowego sondowania CMD0, które sterownik wykonał podczas tworzenia obiektu, a karta włożona na gorąco później nie będzie widoczna, dopóki obiekt nie zostanie ponownie skonstruowany (lub na mimxrt wywołana zostanie metodainit()).
- info() tuple[int, int, int]¶
Zwraca 3-elementową krotkę opisującą aktualnie włożoną kartę:
[0]num_blocks– całkowita pojemność w blokach 512-bajtowych. Pomnóż przez 512, aby uzyskać surową pojemność w bajtach.[1]block_size– zawsze512dla kart SD. Dołączone, aby wywołujący mogli przenośnie obliczyćnum_blocks * block_size.[2]card_type– typ karty zgłoszony przez magistralę SD podczas inicjalizacyjnego uzgadniania CMD8 / OCR. Typowe wartości to0(SDSC – standardowa pojemność),0x40(SDHC / SDXC – wysoka / rozszerzona pojemność) oraz0x80(MMC).
Przydatne do sprawdzenia, czy karta została rozpoznana, lub do wyświetlenia ilości wolnego miejsca względem całkowitej pojemności.
- power(state: bool, /) None¶
Włącza lub wyłącza szynę zasilania gniazda karty. Oprogramowanie układowe STM32 udostępnia tę metodę, ale żadna obecna kamera OpenMV Cam nie steruje zasilaniem SD, więc wywołanie jest w praktyce operacją pustą. Zachowane dla zgodności z kodem napisanym pierwotnie dla referencyjnych płytek STM32 z głównego repozytorium MicroPython. Tylko port STM32.
- read(block_num: int, /) bytes¶
Odczytuje pojedynczy blok 512-bajtowy z karty i zwraca go jako nowo zaalokowany obiekt
bytes.Jest to przestarzały odczyt pojedynczego bloku dostarczany przez port STM32. Nowy kod powinien zamiast tego używać
readblocks()– ta metoda działa na każdym porcie OpenMV, może odczytać dowolną liczbę kolejnych bloków w jednym transferze i unika alokacji przy każdym wywołaniu, zapisując dane do bufora dostarczonego przez wywołującego. Tylko port STM32.
- write(block_num: int, data: bytes, /) None¶
Zapisuje pojedynczy blok 512-bajtowy na kartę.
datamusi mieć dokładnie 512 bajtów długości.Jest to przestarzały zapis pojedynczego bloku dostarczany przez port STM32; nowy kod powinien zamiast tego używać
writeblocks(), która działa na każdym porcie OpenMV i może zapisać dowolną liczbę kolejnych bloków w jednym wywołaniu. Tylko port STM32.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Odczytuje surowe dane wyrównane do bloków z karty do
buf. Standardowy punkt wejścia urządzenia blokowegovfs.AbstractBlockDevużywany przez warstwę systemu plików.Forma prosta (
readblocks(block_num, buf)): odczytuje całe bloki zaczynając od indeksu blokublock_num.len(buf)musi być wielokrotnością rozmiaru bloku SD (512 bajtów).Forma rozszerzona (
readblocks(block_num, buf, offset)): odczytujelen(buf)bajtów – niekoniecznie całkowitą liczbę bloków – zaczynając od bajtuoffsetw blokublock_num. Używana przez littlefs i inne systemy plików adresowane bajtowo.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Zapisuje surowe dane wyrównane do bloków z
bufna kartę. Standardowy punkt wejścia urządzenia blokowegovfs.AbstractBlockDevużywany przez warstwę systemu plików.Forma prosta (
writeblocks(block_num, buf)): zapisuje całe bloki zaczynając od indeksu blokublock_num.len(buf)musi być wielokrotnością rozmiaru bloku SD (512 bajtów). Każdy objęty blok jest nadpisywany w całości.Forma rozszerzona (
writeblocks(block_num, buf, offset)): zapisujelen(buf)bajtów – niekoniecznie całkowitą liczbę bloków – zaczynając od bajtuoffsetw blokublock_num. Używana przez littlefs i inne systemy plików adresowane bajtowo.
- ioctl(cmd: int, arg: int) int | None¶
Standardowy punkt wejścia sterowania
vfs.AbstractBlockDev. Wywoływany przez warstwę systemu plików podczas montowania/odmontowywania oraz przy każdej synchronizacji. Rozpoznawane wartościcmdto:1– inicjalizacja. Zwraca0w przypadku powodzenia.2– deinicjalizacja. Zwraca0w przypadku powodzenia.3– synchronizacja wszystkich oczekujących zapisów. Zwraca0(sterownik SDMMC zapisuje synchronicznie, nie ma nic do opróżnienia).4– zwraca liczbę bloków na urządzeniu.5– zwraca rozmiar pojedynczego bloku (zawsze 512).6– kasuje blok (operacja pusta na SD, zachowana dla kontraktuvfs.AbstractBlockDev).7– zwraca informację, czy urządzenie obsługuje kasowanie bloków (0 na SD).
Wywołujący bezpośrednio zwykle nie używają tej metody – sterownik systemu plików automatycznie obsługuje wszystkie standardowe kody, gdy
SDCardzostanie zamontowana.
- init(*args, **kwargs) None¶
Ponownie inicjalizuje interfejs SD od podstaw. Przyjmuje te same argumenty co konstruktor. Przydatne do ponownego wykrycia karty włożonej na gorąco na płytkach bez sygnału wykrywania karty, ponieważ
present()jest w przeciwnym razie zatrzaśnięta w momencie konstrukcji. Tylko port mimxrt.
- deinit() None¶
Deinicjalizuje interfejs SD, zwalniając kontroler SDMMC/USDHC oraz piny IO, które zajmował. Obiekt
SDCardstaje się bezużyteczny, dopóki ponownie nie zostanie wywołana metodainit(). Użyj jej przed ponownym zapisaniem karty z innego interfejsu lub aby odłączyć zasilanie gniazda w aplikacji zasilanej z baterii. Tylko port mimxrt.