class Flash -- akses ke penyimpanan flash bawaan

Kelas Flash memungkinkan akses langsung ke perangkat flash utama pada OpenMV Cam berbasis STM32.

Dalam kebanyakan kasus, untuk menyimpan data persisten di perangkat, Anda sebaiknya menggunakan abstraksi tingkat lebih tinggi, misalnya filesystem melalui API file standar Python, tetapi antarmuka ini berguna untuk menyesuaikan konfigurasi filesystem atau mengimplementasikan sistem penyimpanan tingkat rendah untuk aplikasi Anda.

Catatan

OpenMV Cam H7 Plus, Pure Thermal dan N6 menggunakan chip flash SPI/QSPI/XSPI eksternal untuk penyimpanan utama; OpenMV Cam berbasis STM32 lainnya menggunakan flash internal di dalam MCU. Antarmuka Python identik dalam kedua kasus.

Konstruktor

class pyb.Flash
class pyb.Flash(*, start: int = -1, len: int = -1)

Buat perangkat blok yang kompatibel dengan vfs.AbstractBlockDev untuk flash on-board. Dua bentuk tersedia:

  • Flash() (tanpa argumen): mengembalikan objek singleton lama yang mengekspos seluruh flash dengan tabel partisi virtual yang ditambahkan di awal. Data flash aktual dimulai pada blok 0x100. Bentuk ini sudah usang dan akan dihapus dalam rilis MicroPython mendatang.

  • Flash(start=..., len=...): mengembalikan perangkat blok baru yang mengakses flash mulai dari offset byte start (default 0) sebesar len byte (default: sisa perangkat). Kedua nilai harus merupakan kelipatan dari ukuran blok yang mendasarinya (biasanya 512 byte untuk flash internal; bagian SPI/QSPI/XSPI eksternal menggunakan ukuran sektor erase yang lebih besar).

Metode

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

Baca byte dari flash ke buf. Dua overload mengekspos antarmuka sederhana dan diperluas:

Bentuk sederhana (readblocks(block_num, buf)): membaca seluruh blok mulai dari indeks blok block_num. len(buf) harus merupakan kelipatan dari ukuran blok flash.

Bentuk diperluas (readblocks(block_num, buf, offset)): membaca len(buf) byte -- tidak harus jumlah blok penuh -- mulai dari byte offset dalam blok block_num. len(buf) tidak memiliki batasan alignment. Hanya didukung pada objek yang dibuat dengan argumen start / len eksplisit, tidak pada singleton yang sudah usang.

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

Tulis byte dari buf ke flash. Dua overload mengekspos antarmuka sederhana dan diperluas:

Bentuk sederhana (writeblocks(block_num, buf)): menulis seluruh blok mulai dari indeks blok block_num. len(buf) harus merupakan kelipatan dari ukuran blok flash. Setiap blok yang terpengaruh dihapus secara otomatis sebelum ditulis.

Bentuk diperluas (writeblocks(block_num, buf, offset)): menulis len(buf) byte -- tidak harus jumlah blok penuh -- mulai dari byte offset dalam blok block_num. len(buf) tidak memiliki batasan alignment, dan tidak ada erase implisit yang dilakukan -- pemanggil harus memastikan blok yang terpengaruh telah dihapus melalui panggilan ioctl(6, block_num) sebelumnya. Hanya didukung pada objek yang dibuat dengan argumen start / len eksplisit.

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

Titik masuk ioctl vfs.AbstractBlockDev standar. Lihat vfs.AbstractBlockDev.ioctl() untuk daftar lengkap nilai cmd. cmd=5 mengembalikan ukuran blok flash dalam byte; cmd=6 menghapus blok dengan indeks arg.