lớp Flash -- truy cập bộ nhớ flash tích hợp

Lớp Flash cho phép truy cập trực tiếp vào thiết bị flash chính trên các OpenMV Cam dựa trên STM32.

Trong hầu hết các trường hợp, để lưu trữ dữ liệu bền vững trên thiết bị, bạn sẽ muốn sử dụng một lớp trừu tượng cấp cao hơn, ví dụ như hệ thống tệp thông qua API tệp tiêu chuẩn của Python, nhưng giao diện này hữu ích để tùy chỉnh cấu hình hệ thống tệp hoặc triển khai hệ thống lưu trữ cấp thấp cho ứng dụng của bạn.

Ghi chú

OpenMV Cam H7 Plus, Pure ThermalN6 sử dụng chip flash SPI/QSPI/XSPI bên ngoài cho lưu trữ chính; các OpenMV Cam dựa trên STM32 khác sử dụng flash nội bộ bên trong MCU. Giao diện Python giống nhau trong cả hai trường hợp.

Hàm khởi tạo

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

Tạo thiết bị khối tương thích vfs.AbstractBlockDev cho flash trên bo mạch. Có hai dạng:

  • Flash() (không có đối số): trả về đối tượng singleton kế thừa hiển thị toàn bộ flash với bảng phân vùng ảo được thêm vào đầu. Dữ liệu flash thực tế bắt đầu ở khối 0x100. Dạng này đã lỗi thời và sẽ bị xóa trong phiên bản MicroPython tương lai.

  • Flash(start=..., len=...): trả về thiết bị khối mới truy cập flash bắt đầu từ byte offset start (mặc định 0) trong len byte (mặc định: phần còn lại của thiết bị). Cả hai giá trị phải là bội số của kích thước khối cơ bản (thường 512 byte cho flash nội bộ; các phần SPI/QSPI/XSPI bên ngoài sử dụng kích thước sector xóa lớn hơn).

Phương thức

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

Đọc các byte từ flash vào buf. Hai dạng nạp chồng hiển thị giao diện đơn giản và mở rộng:

Dạng đơn giản (readblocks(block_num, buf)): đọc toàn bộ khối bắt đầu từ chỉ số khối block_num. len(buf) phải là bội số của kích thước khối flash.

Dạng mở rộng (readblocks(block_num, buf, offset)): đọc len(buf) byte -- không nhất thiết phải là số nguyên khối -- bắt đầu từ byte offset trong khối block_num. len(buf) không có ràng buộc căn chỉnh. Chỉ được hỗ trợ trên các đối tượng được tạo với đối số start / len tường minh, không hỗ trợ trên singleton đã lỗi thời.

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

Ghi các byte từ buf vào flash. Hai dạng nạp chồng hiển thị giao diện đơn giản và mở rộng:

Dạng đơn giản (writeblocks(block_num, buf)): ghi toàn bộ khối bắt đầu từ chỉ số khối block_num. len(buf) phải là bội số của kích thước khối flash. Mỗi khối bị ảnh hưởng tự động được xóa trước khi ghi.

Dạng mở rộng (writeblocks(block_num, buf, offset)): ghi len(buf) byte -- không nhất thiết phải là số nguyên khối -- bắt đầu từ byte offset trong khối block_num. len(buf) không có ràng buộc căn chỉnh, và không thực hiện xóa ngầm định -- người gọi phải đảm bảo các khối bị ảnh hưởng đã được xóa thông qua lệnh gọi ioctl(6, block_num) trước đó. Chỉ được hỗ trợ trên các đối tượng được tạo với đối số start / len tường minh.

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

Điểm vào ioctl vfs.AbstractBlockDev tiêu chuẩn. Xem vfs.AbstractBlockDev.ioctl() để biết danh sách đầy đủ các giá trị cmd. cmd=5 trả về kích thước khối flash tính bằng byte; cmd=6 xóa khối có chỉ số arg.