kelas Flash -- akses ke penyimpanan flash bawaan

Kelas Flash menyediakan akses langsung setingkat blok ke chip flash QSPI eksternal RP2040. Driver ini mengimplementasikan antarmuka vfs.AbstractBlockDev sehingga dapat diteruskan ke vfs.mount() untuk konfigurasi filesystem khusus.

Sebagian besar skrip menyimpan data melalui filesystem yang dipasang otomatis di / dan tidak pernah membuat Flash secara langsung. Buat satu secara manual ketika Anda perlu:

  • Memasang filesystem non-default (misalnya bungkus dengan vfs.VfsFat) pada partisi khusus.

  • Membaca atau menulis wilayah firmware atau blok data pabrik yang tidak dimiliki oleh filesystem.

  • Mengimplementasikan format penyimpanan di-flash khusus yang melewati lapisan filesystem.

Konstruktor

class rp2.Flash Flash

Mengembalikan objek block-device Flash singleton yang didukung oleh chip flash QSPI RP2040. Blok pertama yang diekspos adalah blok tepat setelah wilayah firmware, sehingga pemanggil hanya melihat area chip yang memenuhi syarat untuk filesystem.

Metode

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

Membaca byte dari flash ke dalam buf. Titik masuk block-device vfs.AbstractBlockDev standar yang digunakan oleh lapisan filesystem.

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 merupakan jumlah blok bulat -- mulai dari byte offset di dalam blok block_num. Digunakan oleh littlefs dan filesystem yang dapat dialamatkan byte lainnya.

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

Menulis byte dari buf ke flash. Titik masuk block-device vfs.AbstractBlockDev standar yang digunakan oleh lapisan filesystem.

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 merupakan jumlah blok bulat -- mulai dari byte offset di dalam blok block_num. Tidak ada penghapusan implisit yang dilakukan -- pemanggil harus memastikan blok yang terpengaruh telah dihapus melalui panggilan ioctl(6, block_num) sebelumnya.

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

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

  • 1 -- inisialisasi. Mengembalikan 0 jika berhasil.

  • 2 -- deinisialisasi. Mengembalikan 0 jika berhasil.

  • 3 -- sinkronkan penulisan yang tertunda. Mengembalikan 0.

  • 4 -- kembalikan jumlah blok flash yang terlihat oleh filesystem.

  • 5 -- kembalikan ukuran blok dalam byte (biasanya ukuran sektor flash, 4096).

  • 6 -- hapus blok pada indeks arg. Diperlukan sebelum menggunakan bentuk writeblocks yang diperluas.

  • 7 -- kembalikan apakah perangkat mendukung perintah penghapusan blok (1 pada RP2040).

Pemanggil langsung biasanya tidak menggunakan metode ini -- driver filesystem mengirimkan kode standar secara otomatis setelah Flash dipasang.