class SDCard – SD / MMC kart sürücüsü

SDCard sınıfı, böyle bir yuvaya sahip OpenMV kameralardaki SD / MMC kart yuvasını sürer. Sürücü vfs.AbstractBlockDev arayüzünü uygular, böylece doğrudan vfs.mount() fonksiyonuna geçirilebilir:

import machine
import vfs

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

Not

OpenMV aygıt yazılımı (firmware) SD kartı önyükleme sırasında otomatik olarak bağlar, bu nedenle çoğu betik hiçbir zaman doğrudan bir SDCard oluşturmaz – yalnızca otomatik bağlanan yol üzerinden okuma ve yazma yapar. Bir tanesini yalnızca varsayılan olmayan bir bağlama noktasına ya da readblocks() / writeblocks() / ioctl() aracılığıyla ham blok düzeyinde erişime ihtiyacınız olduğunda elle oluşturun.

OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 üzerinde yuva, STM32’nin yonga üstü SDMMC denetleyicisi tarafından 4 bitlik SD modunda sürülür. OpenMV Cam RT1062 üzerinde yuva, yine 4 bitlik SD modunda i.MX RT’nin USDHC denetleyicisi tarafından sürülür. Mevcut hiçbir OpenMV kartında pin-mux argümanlarına gerek yoktur – sürücü kartın kablo bağlantısını bilir.

OpenMV Cam AE3 (alif portu) üzerinde sunulmaz.

Yapıcılar

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

id ile tanımlanan SD yuvası için SDCard tekil nesnesini (singleton) döndürür. id, portlar arası uyumluluk için kabul edilir ancak OpenMV tarafından desteklenen portlar yalnızca tek bir yuva sunar; 1 geçirin veya bunu atlayın.

STM32 üzerinde yapıcı hiçbir argüman almaz; mimxrt üzerinde id argümanı kabul edilir ancak yalnızca 1 geçerlidir.

Yöntemler

present() bool

Yuvada şu anda bir kart tespit ediliyorsa True, aksi takdirde False döndürür.

Bir kart algılama sinyalini kablolayan kartlarda bu yöntem o sinyali gerçek zamanlı olarak yansıtır; böylece SDCard nesnesi oluşturulduktan sonra sıcak takma / çıkarmaya tepki vermek için yoklanabilir. Kart algılama sinyali olmayan kartlarda değer, oluşturma sırasında tutturulur (latch) – nesne oluşturulduğunda sürücünün yaptığı ilk CMD0 yoklamasının sonucunu bildirir ve sonradan sıcak takılan bir kart, nesne yeniden oluşturulana kadar (ya da mimxrt üzerinde init() çağrılana kadar) görünmez.

info() tuple[int, int, int]

Şu anda takılı olan kartı tanımlayan 3 öğeli bir demet döndürür:

  • [0] num_blocks – 512 baytlık bloklar cinsinden toplam kapasite. Ham bayt kapasitesini elde etmek için 512 ile çarpın.

  • [1] block_size – SD kartlar için her zaman 512. Çağıranların taşınabilir bir şekilde num_blocks * block_size hesaplayabilmesi için dahil edilmiştir.

  • [2] card_type – CMD8 / OCR başlatma el sıkışması sırasında SD veri yolunun bildirdiği kart türü. Tipik değerler 0 (SDSC – standart kapasite), 0x40 (SDHC / SDXC – yüksek / genişletilmiş kapasite) ve 0x80 (MMC) şeklindedir.

Kartın tanınıp tanınmadığını doğrulamak ya da toplam kapasiteye göre boş alan değerlerini görüntülemek için kullanışlıdır.

power(state: bool, /) None

Kart yuvasının güç hattını açar veya kapatır. STM32 aygıt yazılımı (firmware) bu yöntemi sunar ancak mevcut hiçbir OpenMV Cam, SD güç beslemesini geçit (gate) altına almaz, bu nedenle çağrı pratikte bir işlem yapmaz. Başlangıçta yukarı akış MicroPython STM32 referans kartları için yazılmış kodlarla uyumluluk için tutulmuştur. Yalnızca STM32 portu.

read(block_num: int, /) bytes

Karttan tek bir 512 baytlık blok okur ve bunu yeni ayrılmış bir bytes nesnesi olarak döndürür.

Bu, STM32 portuyla birlikte gelen eski tek blok okuma yöntemidir. Yeni kod bunun yerine readblocks() kullanmalıdır – o yöntem her OpenMV portunda çalışır, tek bir aktarımda istenen sayıda bitişik bloğu okuyabilir ve çağıran tarafından sağlanan bir arabelleğe yazarak çağrı başına ayırma maliyetinden kaçınır. Yalnızca STM32 portu.

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

Karta tek bir 512 baytlık blok yazar. data tam olarak 512 bayt uzunluğunda olmalıdır.

Bu, STM32 portuyla birlikte gelen eski tek blok yazma yöntemidir; yeni kod bunun yerine her OpenMV portunda çalışan ve çağrı başına istenen sayıda bitişik bloğu yazabilen writeblocks() kullanmalıdır. Yalnızca STM32 portu.

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

Karttan ham, blok hizalı veriyi buf içine okur. Dosya sistemi katmanı tarafından kullanılan standart vfs.AbstractBlockDev blok aygıtı giriş noktası.

Basit biçim (readblocks(block_num, buf)): block_num blok indisinden başlayarak tam blokları okur. len(buf) SD blok boyutunun (512 bayt) bir katı olmalıdır.

Genişletilmiş biçim (readblocks(block_num, buf, offset)): block_num bloğu içinde offset baytından başlayarak len(buf) bayt okur – bunun tam sayıda blok olması gerekmez. littlefs ve diğer bayt adreslenebilir dosya sistemleri tarafından kullanılır.

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

buf içindeki ham, blok hizalı veriyi karta yazar. Dosya sistemi katmanı tarafından kullanılan standart vfs.AbstractBlockDev blok aygıtı giriş noktası.

Basit biçim (writeblocks(block_num, buf)): block_num blok indisinden başlayarak tam blokları yazar. len(buf) SD blok boyutunun (512 bayt) bir katı olmalıdır. Etkilenen her blok tümüyle üzerine yazılır.

Genişletilmiş biçim (writeblocks(block_num, buf, offset)): block_num bloğu içinde offset baytından başlayarak len(buf) bayt yazar – bunun tam sayıda blok olması gerekmez. littlefs ve diğer bayt adreslenebilir dosya sistemleri tarafından kullanılır.

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

Standart vfs.AbstractBlockDev denetim giriş noktası. Dosya sistemi katmanı tarafından bağlama/ayırma zamanında ve her eşitlemede çağrılır. Tanınan cmd değerleri şunlardır:

  • 1 – başlat. Başarı durumunda 0 döndürür.

  • 2 – başlatmayı kaldır (deinitialise). Başarı durumunda 0 döndürür.

  • 3 – bekleyen yazmaları eşitle. 0 döndürür (SDMMC sürücüsü eşzamanlı yazar, boşaltılacak bir şey yoktur).

  • 4 – aygıttaki blok sayısını döndürür.

  • 5 – tek bir bloğun boyutunu döndürür (her zaman 512).

  • 6 – bir bloğu siler (SD’de işlem yapmaz, vfs.AbstractBlockDev sözleşmesi için tutulmuştur).

  • 7 – aygıtın blok silmeyi destekleyip desteklemediğini döndürür (SD’de 0).

Doğrudan çağıranlar normalde bu yöntemi kullanmaz – SDCard bağlandıktan sonra dosya sistemi sürücüsü tüm standart kodları otomatik olarak sevk eder.

init(*args, **kwargs) None

SD arayüzünü sıfırdan yeniden başlatır. Yapıcıyla aynı argümanları kabul eder. present() aksi takdirde oluşturma sırasında tutturulduğundan (latch), kart algılama sinyali olmayan kartlarda sıcak takılan bir kartı yeniden tespit etmek için kullanışlıdır. Yalnızca mimxrt portu.

deinit() None

SD arayüzünü başlatmayı kaldırır (deinitialise); SDMMC/USDHC denetleyicisini ve sahiplendiği IO pinlerini serbest bırakır. init() yeniden çağrılana kadar SDCard nesnesi kullanılamaz hale gelir. Kartı başka bir arayüzden yeniden yazmadan önce ya da pil ile çalışan bir uygulamada yuvanın gücünü kesmek için kullanın. Yalnızca mimxrt portu.