openamp
-- 標準非対称マルチプロセッシング(AMP)の提供¶
openamp
モジュールは、MicroPython 向けの標準的なプロセッサ間通信インフラストラクチャを提供します。このモジュールは、OpenAMP の詳細すべてを処理します。たとえば、共有リソーステーブルの設定、vrings の初期化などです。また、RPMsg バスインフラストラクチャを Endpoint
クラスと共に使用するための API を提供し、ファームウェアの読み込みやリモートコアの起動と停止など、プロセッサのライフサイクル管理(LCM: Life Cycle Management)サポートも、 RemoteProc
クラスを介して提供します。
使用例:
import openamp
def ept_recv_callback(src, data):
print("Received message on endpoint", data)
# リモートコアと通信するための新しい RPMsg エンドポイントを作成します。
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
# RemoteProc オブジェクトを作成し、そのファームウェアを読み込んで起動します。
rproc = openamp.RemoteProc("virtual_uart.elf") # Or entry point address (ex 0x081E0000)
rproc.start()
while True:
if ept.is_ready():
ept.send("data")
関数¶
- openamp.new_service_callback(ns_callback)¶
新しいサービスコールバックを設定します。
ns_callback 引数は、リモートプロセッサが新しいサービスを公表したときに呼び出される関数です。その時点で、ホストプロセッサは、この特定のサービスがサポートされている場合は公表されたエンドポイントを作成するか、サポートされていない場合は無視できます。この関数が設定されていない場合、ホストプロセッサはまずローカルにエンドポイントを登録する必要があり、リモートがサービスを公表したときに自動的にバインドされます。
Endpoint クラス¶
- class openamp.Endpoint(name, callback, src=ENDPOINT_ADDR_ANY, dest=ENDPOINT_ADDR_ANY)¶
新しい RPMsg Endpoint を構築します。エンドポイントは、2つのコア間の双方向通信チャネルです。
引数は次のとおりです:
name はエンドポイントの名前です。
callback は、エンドポイントがリモートポイントのソースアドレスとバイトで渡されたデータを受信したときに呼び出される関数です。
src はエンドポイントのソースアドレスです。提供されていない場合、ライブラリによってエンドポイントに割り当てられます。
dest はエンドポイントの宛先アドレスです。エンドポイントが new_service_callback から作成される場合、これを提供する必要があります。また、リモートエンドポイントのソースアドレスと一致する必要があります。エンドポイントがローカルに登録され、アナウンス前に作成された場合、宛先アドレスはエンドポイントがバインドされるときにライブラリによって割り当てられます。
- Endpoint.deinit()¶
エンドポイントを破棄し、そのすべてのリソースを解放します。
- Endpoint.is_ready()¶
エンドポイントが送信可能な場合(つまり、ソースアドレスと宛先アドレスの両方がある場合)は True を返します。
- Endpoint.send(src=-1, dest=-1, timeout=-1)¶
このエンドポイントを介してリモートプロセッサにメッセージを送信します。
引数は次のとおりです:
src はメッセージのソースエンドポイントアドレスです。提供されていない場合、エンドポイントがバインドされているソースアドレスが使われます。
dest はメッセージの宛先エンドポイントアドレスです。提供されていない場合、エンドポイントがバインドされている宛先アドレスが使われます。
timeout は、フリーバッファを待機する時間をミリ秒で指定します。デフォルトでは、この関数はブロッキングされます。
RemoteProc クラス¶
- class openamp.RemoteProc(entry)¶
RemoteProc オブジェクトは、ファームウェアの読み込み、リモートコアの起動と停止など、プロセッサのライフサイクル管理(LCM)サポートを提供します。
entry 引数は、ファームウェアイメージへのパスである場合、ファームウェアがファイルからターゲットメモリにロードされます。また、エントリーポイントアドレスである場合、ファームウェアはすでに指定されたアドレスにロードされている必要があります。
- RemoteProc.start()¶
リモートプロセッサを起動します。
- RemoteProc.stop()¶
リモートプロセッサを停止します。正確な動作はプラットフォームに依存します。たとえば、STM32H7 では、Cortex-M4 コアを停止して再起動できませんので、この関数を呼び出すと完全なシステムリセットが行われます。
- RemoteProc.shutdown()¶
シャットダウンはリモートプロセッサを停止し、そのすべてのリソースを解放します。正確な動作はプラットフォームに依存しますが、通常はリモートコアへの電力供給やクロックを無効にします。この関数はまた、最終処理としても使われます(つまり
RemoteProc
オブジェクトの廃棄時に呼び出されます)。STM32H7 では、Cortex-M4コアを停止して再起動できないため、この関数を呼び出すと完全なシステムリセットが行われます。