class SDCard -- driver kartu SD / MMC

Kelas SDCard mengendalikan slot kartu SD / MMC pada OpenMV cam yang memilikinya. Driver ini mengimplementasikan antarmuka vfs.AbstractBlockDev sehingga dapat langsung diteruskan ke vfs.mount()

import machine
import vfs

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

Catatan

Firmware OpenMV secara otomatis me-mount kartu SD saat boot, sehingga sebagian besar skrip tidak pernah membuat SDCard secara langsung -- mereka hanya membaca dan menulis melalui jalur yang di-mount otomatis. Buat secara manual hanya jika Anda memerlukan titik mount non-default atau akses tingkat blok mentah melalui readblocks() / writeblocks() / ioctl().

Pada OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6, slot dikendalikan oleh kontroler SDMMC on-chip STM32 dalam mode SD 4-bit. Pada OpenMV Cam RT1062, slot dikendalikan oleh kontroler USDHC i.MX RT, juga dalam mode SD 4-bit. Tidak diperlukan argumen pin-mux pada board OpenMV saat ini -- driver mengetahui kabel board.

Tidak tersedia pada OpenMV Cam AE3 (port alif).

Konstruktor

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

Mengembalikan singleton SDCard untuk slot SD yang diidentifikasi oleh id. id diterima untuk kompatibilitas lintas-port, tetapi port yang didukung OpenMV hanya mengekspos satu slot; berikan 1 atau abaikan.

Pada STM32 konstruktor tidak menerima argumen sama sekali; pada mimxrt argumen id diterima tetapi hanya 1 yang valid.

Metode

present() bool

Mengembalikan True jika kartu saat ini terdeteksi di slot, False jika tidak.

Pada board yang menghubungkan sinyal card-detect, metode ini mencerminkan sinyal tersebut secara real time, sehingga dapat di-polling setelah objek SDCard dibuat untuk bereaksi terhadap penyisipan / pencabutan panas. Pada board tanpa sinyal card-detect, nilai dikunci pada waktu pembuatan -- metode ini melaporkan hasil probe CMD0 awal yang dilakukan driver saat objek dibuat, dan kartu yang disisipkan panas setelahnya tidak akan terlihat hingga objek dibuat ulang (atau init() dipanggil pada mimxrt).

info() tuple[int, int, int]

Mengembalikan tuple 3 elemen yang mendeskripsikan kartu yang sedang terpasang:

  • [0] num_blocks -- total kapasitas dalam blok 512-byte. Kalikan dengan 512 untuk mendapatkan kapasitas byte mentah.

  • [1] block_size -- selalu 512 untuk kartu SD. Disertakan agar pemanggil dapat melakukan num_blocks * block_size secara portabel.

  • [2] card_type -- tipe kartu yang dilaporkan oleh bus SD selama handshake inisialisasi CMD8 / OCR. Nilai umum adalah 0 (SDSC -- kapasitas standar), 0x40 (SDHC / SDXC -- kapasitas tinggi / diperluas) dan 0x80 (MMC).

Berguna untuk memeriksa bahwa kartu telah dikenali, atau untuk menampilkan angka ruang bebas relatif terhadap total kapasitas.

power(state: bool, /) None

Mengaktifkan atau menonaktifkan rel daya slot kartu. Firmware STM32 mengekspos metode ini tetapi tidak ada OpenMV Cam saat ini yang mengendalikan suplai daya SD, sehingga panggilan ini pada dasarnya tidak melakukan apa-apa. Dipertahankan untuk kompatibilitas dengan kode yang awalnya ditulis untuk board referensi STM32 MicroPython upstream. Hanya port STM32.

read(block_num: int, /) bytes

Membaca satu blok 512-byte dari kartu dan mengembalikannya sebagai objek bytes yang baru dialokasikan.

Ini adalah pembacaan blok tunggal lama yang disertakan oleh port STM32. Kode baru sebaiknya menggunakan readblocks() -- metode tersebut bekerja pada setiap port OpenMV, dapat membaca sejumlah blok yang berurutan dalam satu transfer, dan menghindari alokasi per-panggilan dengan menulis ke buffer yang disediakan pemanggil. Hanya port STM32.

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

Menulis satu blok 512-byte ke kartu. data harus tepat 512 byte.

Ini adalah penulisan blok tunggal lama yang disertakan oleh port STM32; kode baru sebaiknya menggunakan writeblocks(), yang bekerja pada setiap port OpenMV dan dapat menulis sejumlah blok yang berurutan per panggilan. Hanya port STM32.

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

Membaca data mentah yang sejajar blok dari kartu ke dalam buf. Titik masuk perangkat blok vfs.AbstractBlockDev standar yang digunakan oleh lapisan filesystem.

Bentuk sederhana (readblocks(block_num, buf)): membaca blok penuh mulai dari indeks blok block_num. len(buf) harus merupakan kelipatan ukuran blok SD (512 byte).

Bentuk diperluas (readblocks(block_num, buf, offset)): membaca len(buf) byte -- tidak harus sejumlah blok penuh -- mulai dari byte offset dalam blok block_num. Digunakan oleh littlefs dan filesystem lain yang dapat dialamatkan per byte.

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

Menulis data mentah yang sejajar blok dari buf ke kartu. Titik masuk perangkat blok vfs.AbstractBlockDev standar yang digunakan oleh lapisan filesystem.

Bentuk sederhana (writeblocks(block_num, buf)): menulis blok penuh mulai dari indeks blok block_num. len(buf) harus merupakan kelipatan ukuran blok SD (512 byte). Setiap blok yang terpengaruh akan ditimpa sepenuhnya.

Bentuk diperluas (writeblocks(block_num, buf, offset)): menulis len(buf) byte -- tidak harus sejumlah blok penuh -- mulai dari byte offset dalam blok block_num. Digunakan oleh littlefs dan filesystem lain yang dapat dialamatkan per byte.

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

Titik masuk kontrol vfs.AbstractBlockDev standar. Dipanggil oleh lapisan filesystem pada waktu mount/unmount dan pada setiap sinkronisasi. Nilai cmd yang dikenali adalah:

  • 1 -- inisialisasi. Mengembalikan 0 jika berhasil.

  • 2 -- deinisialisasi. Mengembalikan 0 jika berhasil.

  • 3 -- sinkronkan penulisan yang tertunda. Mengembalikan 0 (driver SDMMC menulis secara sinkron, tidak ada yang perlu di-flush).

  • 4 -- mengembalikan jumlah blok pada perangkat.

  • 5 -- mengembalikan ukuran satu blok (selalu 512).

  • 6 -- menghapus sebuah blok (no-op pada SD, dipertahankan untuk kontrak vfs.AbstractBlockDev).

  • 7 -- mengembalikan apakah perangkat mendukung penghapusan blok (0 pada SD).

Pemanggil langsung biasanya tidak menggunakan metode ini -- driver filesystem mengirimkan semua kode standar secara otomatis setelah SDCard di-mount.

init(*args, **kwargs) None

Menginisialisasi ulang antarmuka SD dari awal. Menerima argumen yang sama dengan konstruktor. Berguna untuk mendeteksi ulang kartu yang disisipkan panas pada board tanpa sinyal card-detect, karena present() jika tidak akan dikunci pada waktu pembuatan. Hanya port mimxrt.

deinit() None

Mendeinisialisasi antarmuka SD, melepaskan kontroler SDMMC/USDHC dan pin IO yang diklaim. Objek SDCard menjadi tidak dapat digunakan hingga init() dipanggil kembali. Gunakan sebelum mem-flash ulang kartu dari antarmuka lain, atau untuk memutus daya ke slot dalam aplikasi bertenaga baterai. Hanya port mimxrt.