alif --- Các hàm SoC Alif Ensemble¶
Mô-đun alif cung cấp các chức năng dành riêng cho cổng trên SoC Alif Ensemble, bao gồm một trình bao bọc thiết bị khối cho bộ nhớ flash OSPI trên bo mạch và một trình trợ giúp để xuất thông tin SoC từ các dịch vụ Secure Enclave.
Ví dụ:
import alif
alif.info()
flash = alif.Flash()
Hàm¶
Lớp¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
Tạo một đối tượng thiết bị khối được hỗ trợ bởi bộ nhớ flash OSPI trên bo mạch. Lớp này chỉ khả dụng khi firmware được xây dựng với hỗ trợ OSPI được bật.
Khi được gọi không có đối số, trả về đối tượng singleton mặc định bao phủ vùng filesystem có thể ghi của bộ nhớ flash.
startlà độ lệch byte vào vùng lưu trữ flash. Phải là bội số của kích thước khối flash và nằm trong phạm vi lưu trữ flash. Mặc định là-1nghĩa là bắt đầu tại độ lệch0.lenlà độ dài tính bằng byte của vùng flash được đối tượng này hiển thị. Phải là bội số của kích thước khối flash và không vượt quá cuối vùng lưu trữ flash. Mặc định là-1nghĩa là sử dụng tất cả các byte còn lại từstart.Đối tượng cũng triển khai giao thức bộ đệm, cho phép truy cập ánh xạ bộ nhớ chỉ đọc vào vùng flash qua cơ sở OSPI XIP. Điều này tạo ra một khung nhìn sao chép bằng không của toàn bộ vùng mà không cần thực hiện bất kỳ thao tác đọc flash nào:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
Đọc các byte từ bộ nhớ flash vào
buf. Hai dạng quá tải cung cấp giao diện đơn giản và mở rộng:Dạng đơn giản (
readblocks(block_num, buf)): đọc các khối hoàn chỉnh bắt đầu từ chỉ mục 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 là số nguyên của các khối -- bắt đầu từ byteoffsettrong khốiblock_num.len(buf)không có ràng buộc căn chỉnh.Trả về
0khi thành công hoặc mã lỗi âm. Lưu ý rằng giao thức thiết bị khối MicroPython chuẩn trả vềNone; driveralifcó chủ ý hiển thị mã trạng thái OSPI bên dưới để các bên gọi bỏ quavfscó thể phản ứng với lỗi phần cứng.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
Ghi các byte từ
bufvào bộ nhớ flash. Hai dạng quá tải cung cấp giao diện đơn giản và mở rộng:Dạng đơn giản (
writeblocks(block_num, buf)): ghi các khối hoàn chỉnh bắt đầu từ chỉ mục 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 được xóa tự động trước khi ghi.Dạng mở rộng (
writeblocks(block_num, buf, offset)): ghilen(buf)byte -- không nhất thiết là số nguyên của các 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 có xóa ngầm được thực hiện -- người gọi phải đảm bảo rằng các khối bị ảnh hưởng đã được xóa thông qua lệnh gọiioctl(6, block_num)trước đó.Trả về
0khi thành công hoặc mã lỗi âm (xemreadblocks()để biết lý do).
- ioctl(cmd: int, arg: int) int¶
Thực hiện một thao tác kiểm soát thiết bị khối.
cmdlà một trong các lệnhMP_BLOCKDEV_IOCTL_*chuẩn của MicroPython:1(init) --- trả về0.2(deinit) --- trả về0.3(sync) --- trả về0.4(block count) --- trả về số lượng khối trong vùng.5(block size) --- trả về kích thước khối flash tính bằng byte.6(block erase) --- xóa khối tại chỉ mụcargvà trả về kết quả của thao tác xóa.
Các giá trị
cmdkhác trả vềNone.