клас Flash – доступ до вбудованої флеш-пам’яті

Клас Flash забезпечує прямий, блоковий доступ до зовнішнього QSPI-чіпа флеш-пам’яті RP2040. Драйвер реалізує інтерфейс vfs.AbstractBlockDev, тому його можна передавати до vfs.mount() для налаштування власних конфігурацій файлової системи.

Більшість скриптів зберігають дані через автоматично змонтовану файлову систему за шляхом / і ніколи не створюють Flash безпосередньо. Створюйте екземпляр вручну, якщо вам потрібно:

  • Змонтувати нестандартну файлову систему (наприклад, обгорнуту в vfs.VfsFat) на власному розділі.

  • Читати або записувати регіони мікропрограми або блоки заводських даних, що не належать файловій системі.

  • Реалізувати власний формат зберігання даних у флеш-пам’яті, що обходить рівень файлової системи.

Конструктори

class rp2.Flash Flash

Повертає одиночний об’єкт блокового пристрою Flash, підкріплений QSPI-чіпом флеш-пам’яті RP2040. Перший видимий блок розташований одразу після регіону мікропрограми, тому викликачі бачать лише придатну для файлової системи область чіпа.

Методи

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

Читає байти з флеш-пам’яті в buf. Стандартна точка входу блокового пристрою vfs.AbstractBlockDev, яку використовує рівень файлової системи.

Проста форма (readblocks(block_num, buf)): читає цілі блоки починаючи з блокового індексу block_num. len(buf) повинно бути кратним розміру блоку флеш-пам’яті.

Розширена форма (readblocks(block_num, buf, offset)): читає len(buf) байтів – не обов’язково ціле число блоків – починаючи з байтового зміщення offset всередині блоку block_num. Використовується littlefs та іншими файловими системами з побайтовою адресацією.

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

Записує байти з buf у флеш-пам’ять. Стандартна точка входу блокового пристрою vfs.AbstractBlockDev, яку використовує рівень файлової системи.

Проста форма (writeblocks(block_num, buf)): записує цілі блоки починаючи з блокового індексу block_num. len(buf) повинно бути кратним розміру блоку флеш-пам’яті. Кожен задіяний блок автоматично стирається перед записом.

Розширена форма (writeblocks(block_num, buf, offset)): записує len(buf) байтів – не обов’язково ціле число блоків – починаючи з байтового зміщення offset всередині блоку block_num. Неявне стирання не виконується – викликач повинен забезпечити стирання задіяних блоків за допомогою попереднього виклику ioctl(6, block_num).

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

Стандартна точка входу управління vfs.AbstractBlockDev. Викликається рівнем файлової системи під час монтування/розмонтування та при кожній синхронізації. Підтримувані значення cmd:

  • 1 – ініціалізація. Повертає 0 при успіху.

  • 2 – деініціалізація. Повертає 0 при успіху.

  • 3 – синхронізація очікуючих записів. Повертає 0.

  • 4 – повертає кількість блоків флеш-пам’яті, видимих файловій системі.

  • 5 – повертає розмір блоку в байтах (як правило, розмір сектора флеш-пам’яті, 4096).

  • 6 – стирає блок за індексом arg. Необхідно перед використанням розширеної форми writeblocks.

  • 7 – повертає, чи підтримує пристрій команду стирання блоку (1 на RP2040).

Прямі викликачі зазвичай не використовують цей метод – драйвер файлової системи автоматично розподіляє стандартні коди після монтування Flash.