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 Thermal và N6 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.AbstractBlockDevcho 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ối0x100. 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 offsetstart(mặc định0) tronglenbyte (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ốiblock_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)): đọclen(buf)byte -- không nhất thiết phải là số nguyên khối -- bắt đầu từ byteoffsettrong khốiblock_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/lentườ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ừ
bufvà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ốiblock_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)): ghilen(buf)byte -- không nhất thiết phải là số nguyên khối -- bắt đầu từ byteoffsettrong khốiblock_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ọiioctl(6, block_num)trước đó. Chỉ được hỗ trợ trên các đối tượng được tạo với đối sốstart/lentường minh.
- ioctl(cmd: int, arg: int) int | None¶
Điểm vào ioctl
vfs.AbstractBlockDevtiêu chuẩn. Xemvfs.AbstractBlockDev.ioctl()để biết danh sách đầy đủ các giá trịcmd.cmd=5trả về kích thước khối flash tính bằng byte;cmd=6xóa khối có chỉ sốarg.