openamp --- hỗ trợ chuẩn Asymmetric Multiprocessing (AMP)¶
Module openamp cung cấp cơ sở hạ tầng giao tiếp giữa các bộ vi xử lý chuẩn cho MicroPython. Module xử lý toàn bộ chi tiết của OpenAMP, chẳng hạn như thiết lập bảng tài nguyên dùng chung, khởi tạo các vring, v.v. Module cung cấp API để sử dụng cơ sở hạ tầng bus RPMsg với lớp Endpoint, đồng thời hỗ trợ Quản lý Vòng đời Bộ xử lý (LCM) như nạp firmware, khởi động và dừng lõi từ xa thông qua lớp RemoteProc.
Ví dụ sử dụng:
import openamp
def ept_recv_callback(src, data):
print("Received message on endpoint", data)
# Create a new RPMsg endpoint to communicate with the remote core.
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
# Create a RemoteProc object, load its firmware and start it.
rproc = openamp.RemoteProc("virtual_uart.elf") # Or entry point address (ex 0x081E0000)
rproc.start()
while True:
if ept.is_ready():
ept.send("data")
Hàm¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Đặt hàm gọi lại dịch vụ mới.
Đối số ns_callback là một hàm sẽ được gọi khi bộ xử lý từ xa thông báo các dịch vụ mới. Tại thời điểm đó, bộ xử lý host có thể chọn tạo endpoint được thông báo nếu dịch vụ cụ thể này được hỗ trợ, hoặc bỏ qua nếu không. Nếu hàm này không được đặt, bộ xử lý host nên đăng ký endpoint cục bộ trước, và endpoint sẽ được tự động liên kết khi bộ xử lý từ xa thông báo dịch vụ.
Lớp Endpoint¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Khởi tạo một RPMsg Endpoint mới. Endpoint là kênh giao tiếp hai chiều giữa hai lõi.
Các đối số gồm:
name là tên của endpoint.
callback là hàm được gọi khi endpoint nhận dữ liệu, với địa chỉ nguồn của điểm từ xa và dữ liệu dưới dạng bytes được truyền theo tham chiếu.
src là địa chỉ nguồn của endpoint. Nếu không cung cấp, thư viện sẽ tự động gán địa chỉ cho endpoint.
dest là địa chỉ đích của endpoint. Nếu endpoint được tạo từ new_service_callback, tham số này phải được cung cấp và phải khớp với địa chỉ nguồn của endpoint từ xa. Nếu endpoint được đăng ký cục bộ trước khi thông báo, địa chỉ đích sẽ được thư viện gán khi endpoint được liên kết.
- is_ready() bool¶
Trả về True nếu endpoint sẵn sàng gửi (tức là đã có cả địa chỉ nguồn và địa chỉ đích)
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Gửi tin nhắn đến bộ xử lý từ xa qua endpoint này.
Các đối số gồm:
buffer là payload của tin nhắn (bất kỳ đối tượng nào hỗ trợ giao thức buffer, ví dụ
bytes,bytearray, hoặcstr).src là địa chỉ nguồn endpoint của tin nhắn. Nếu không cung cấp, sẽ dùng địa chỉ nguồn mà endpoint đang liên kết.
dest là địa chỉ đích endpoint của tin nhắn. Nếu không cung cấp, sẽ dùng địa chỉ đích mà endpoint đang liên kết.
timeout chỉ định thời gian tính bằng mili giây để chờ bộ đệm trống. Theo mặc định, hàm sẽ chặn (blocking).
Lớp RemoteProc¶
Cảnh báo
Trên STM32H7, lõi AMP thứ hai là Cortex-M4 không thể dừng và khởi động lại tại chỗ. Do đó, việc gọi RemoteProc.stop() hoặc RemoteProc.shutdown() trên nền tảng đó sẽ thực hiện reset toàn bộ hệ thống thay vì dừng từng lõi riêng lẻ.
- class openamp.RemoteProc(entry: str | int)¶
Đối tượng RemoteProc cung cấp hỗ trợ Quản lý Vòng đời Bộ xử lý (LCM), chẳng hạn như nạp firmware, khởi động và dừng lõi từ xa.
Đối số entry có thể là đường dẫn đến ảnh firmware, trong trường hợp đó firmware sẽ được nạp từ tệp vào bộ nhớ đích, hoặc là địa chỉ điểm vào, trong trường hợp đó firmware phải được nạp sẵn tại địa chỉ đã cho.