class Flash – yerleşik flash belleğe erişim

Flash sınıfı, STM32 tabanlı OpenMV Cam’ler üzerindeki birincil flash aygıtına doğrudan erişim sağlar.

Çoğu durumda, aygıtta kalıcı veri depolamak için daha üst düzey bir soyutlama kullanmak istersiniz; örneğin Python’un standart dosya API’si aracılığıyla dosya sistemi, ancak bu arayüz dosya sistemi yapılandırmasını özelleştirmek veya uygulamanız için düşük düzeyli bir depolama sistemi uygulamak için kullanışlıdır.

Not

OpenMV Cam H7 Plus, Pure Thermal ve N6, birincil depolama için harici bir SPI/QSPI/XSPI flash yongası kullanır; diğer STM32 tabanlı OpenMV Cam’ler MCU içindeki dahili flash belleği kullanır. Python arayüzü her iki durumda da aynıdır.

Yapıcılar

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

Yerleşik flash için vfs.AbstractBlockDev ile uyumlu bir blok aygıtı oluşturur. İki biçim mevcuttur:

  • Flash() (argümansız): başına sanal bir bölüm tablosu eklenmiş olarak tüm flash belleği sunan eski tekil (singleton) nesneyi döndürür. Gerçek flash verileri 0x100 bloğunda başlar. Bu biçim kullanımdan kaldırılmıştır ve gelecekteki bir MicroPython sürümünde kaldırılacaktır.

  • Flash(start=..., len=...): flash belleğe start bayt ofsetinden başlayarak (varsayılan 0) len bayt boyunca (varsayılan: aygıtın geri kalanı) erişen yeni bir blok aygıtı döndürür. Her iki değer de temeldeki blok boyutunun bir katı olmalıdır (dahili flash için genellikle 512 bayt; harici SPI/QSPI/XSPI parçaları daha büyük bir silme sektörü boyutu kullanır).

Yöntemler

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

Flash bellekten buf içine baytlar okur. İki aşırı yükleme (overload) basit ve genişletilmiş arayüzleri sunar:

Basit biçim (readblocks(block_num, buf)): block_num blok indeksinden başlayarak tam blokları okur. len(buf) flash blok boyutunun 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 – mutlaka tam sayıda blok olması gerekmez. len(buf) üzerinde hizalama kısıtlaması yoktur. Yalnızca açık start / len argümanlarıyla oluşturulan nesnelerde desteklenir, kullanımdan kaldırılan tekil nesnede desteklenmez.

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

buf içinden flash belleğe baytlar yazar. İki aşırı yükleme basit ve genişletilmiş arayüzleri sunar:

Basit biçim (writeblocks(block_num, buf)): block_num blok indeksinden başlayarak tam blokları yazar. len(buf) flash blok boyutunun bir katı olmalıdır. Etkilenen her blok, yazılmadan önce otomatik olarak silinir.

Genişletilmiş biçim (writeblocks(block_num, buf, offset)): block_num bloğu içinde offset baytından başlayarak len(buf) bayt yazar – mutlaka tam sayıda blok olması gerekmez. len(buf) üzerinde hizalama kısıtlaması yoktur ve örtük silme gerçekleştirilmez – çağıran kişi, etkilenen blokların önceki bir ioctl(6, block_num) çağrısı aracılığıyla silinmiş olduğundan emin olmalıdır. Yalnızca açık start / len argümanlarıyla oluşturulan nesnelerde desteklenir.

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

Standart vfs.AbstractBlockDev ioctl giriş noktası. cmd değerlerinin tam listesi için vfs.AbstractBlockDev.ioctl() bölümüne bakın. cmd=5 flash blok boyutunu bayt cinsinden döndürür; cmd=6 arg indeksli bloğu siler.