openamp --- menyediakan dukungan Asymmetric Multiprocessing (AMP) standar

Modul openamp menyediakan infrastruktur komunikasi antar-prosesor standar untuk MicroPython. Modul ini menangani semua detail OpenAMP, seperti menyiapkan tabel sumber daya bersama, menginisialisasi vring, dll. Modul ini menyediakan API untuk menggunakan infrastruktur bus RPMsg dengan kelas Endpoint, serta menyediakan dukungan Life Cycle Management (LCM) prosesor, seperti memuat firmware dan memulai serta menghentikan inti jarak jauh, melalui kelas RemoteProc.

Contoh penggunaan:

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")

Fungsi

openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None

Menetapkan callback layanan baru.

Argumen ns_callback adalah fungsi yang akan dipanggil ketika prosesor jarak jauh mengumumkan layanan baru. Pada saat itu prosesor host dapat memilih untuk membuat endpoint yang diumumkan, jika layanan tertentu ini didukung, atau mengabaikannya jika tidak. Jika fungsi ini tidak ditetapkan, prosesor host harus terlebih dahulu mendaftarkan endpoint secara lokal, dan akan otomatis terikat ketika prosesor jarak jauh mengumumkan layanan tersebut.

Kelas Endpoint

class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)

Membuat RPMsg Endpoint baru. Endpoint adalah saluran komunikasi dua arah antara dua inti.

Argumen adalah:

  • name adalah nama endpoint.

  • callback adalah fungsi yang dipanggil ketika endpoint menerima data dengan alamat sumber dari titik jarak jauh, dan data sebagai byte yang diteruskan dengan referensi.

  • src adalah alamat sumber endpoint. Jika tidak ada yang diberikan, satu akan ditetapkan ke endpoint oleh pustaka.

  • dest adalah alamat tujuan endpoint. Jika endpoint dibuat dari new_service_callback, ini harus disediakan dan harus sesuai dengan alamat sumber endpoint jarak jauh. Jika endpoint didaftarkan secara lokal, sebelum pengumuman, alamat tujuan akan ditetapkan oleh pustaka ketika endpoint terikat.

deinit() None

Menghancurkan endpoint dan melepaskan semua sumber dayanya.

is_ready() bool

Mengembalikan True jika endpoint siap mengirim (yaitu, memiliki alamat sumber dan tujuan)

send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int

Mengirim pesan ke prosesor jarak jauh melalui endpoint ini.

Argumen adalah:

  • buffer adalah payload pesan (objek apa pun yang mendukung protokol buffer, misalnya bytes, bytearray, atau str).

  • src adalah alamat endpoint sumber pesan. Jika tidak ada yang diberikan, alamat sumber yang terikat pada endpoint digunakan.

  • dest adalah alamat endpoint tujuan pesan. Jika tidak ada yang diberikan, alamat tujuan yang terikat pada endpoint digunakan.

  • timeout menentukan waktu dalam milidetik untuk menunggu buffer bebas. Secara default fungsi ini bersifat blocking.

Kelas RemoteProc

Peringatan

Pada STM32H7, inti AMP kedua adalah Cortex-M4 yang tidak dapat dihentikan dan kemudian dimulai ulang di tempat. Memanggil RemoteProc.stop() atau RemoteProc.shutdown() pada platform tersebut oleh karena itu melakukan reset sistem penuh daripada penghentian per-inti.

class openamp.RemoteProc(entry: str | int)

Objek RemoteProc menyediakan dukungan Life Cycle Management (LCM) prosesor, seperti memuat firmware, memulai dan menghentikan inti jarak jauh.

Argumen entry dapat berupa jalur ke citra firmware, di mana firmware dimuat dari file ke memori targetnya, atau alamat titik masuk, di mana firmware harus sudah dimuat di alamat yang diberikan.

start() None

Memulai prosesor jarak jauh.

stop() None

Menghentikan prosesor jarak jauh. Perilaku tepatnya bergantung pada platform.

shutdown() None

Shutdown menghentikan prosesor jarak jauh dan melepaskan semua sumber dayanya. Perilaku tepatnya bergantung pada platform, namun biasanya menonaktifkan daya dan clock ke inti jarak jauh. Fungsi ini juga digunakan sebagai finaliser (yaitu, dipanggil ketika objek RemoteProc dikumpulkan).