4. セキュアおよび非セキュア周辺モジュールの定義および使用方法
4.4. セキュア周辺モジュールの使い方
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
下図に、このプロセスのフローチャートを示します。
図4-7. 非セキュアmainルーチンのフローチャート
TC0モジュールとPORT PA07は、非セキュア領域に割り当てられます。非セキュア アプリケーション は、それらに標準周辺モジュールとしてアクセスできます(セキュア領域との相互作用は不要)。
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
4.4.1 非セキュアソフトウェアとの相互作用なしでセキュア周辺モジュールを使う場合
非セキュア領域との相互作用を必要としない周辺モジュールを使う場合、セキュア領域はその周辺モジ ュールを標準周辺モジュールとして扱います。この場合、Cortex-M 向け TrustZone に特別に配慮する必 要はありません。
4.4.2 非セキュアソフトウェアとの相互作用ありでセキュア周辺モジュールを使う場合
セキュア周辺モジュールを使うために非セキュア領域とセキュア領域の間の相互作用を必要とする場合、
セキュア アプリケーションはNSC (Non-Secure callable) APIを提供し、非セキュア領域へコールバック する必要があります。
4.4.2.1 NSC (Non-Secure Callable) API
SG (Secure Gateway) は、NSC領域内に保存されたNSC APIのアドレスをセキュアコードのその他の部
分から切り離します。全てのプロジェクトSG (Secure Gateway) はNSCメモリ内に置かれている事が必 要です。一方、セキュア実行可能コードからの他の全てのコードは、セキュアメモリ領域内に置かれて いる事が必要です。これにより、非セキュア状態からアクセス可能なコードの量を制限できます。この 配置は、ユーザが制御します。
図4-8. NSC (Non-Secure Callable)の仕組み
詳細は「セキュアおよび非セキュア関数呼び出し」を参照してください。
4.4.2.2 非セキュア ソフトウェア コールバック
セキュア プロジェクトは、非セキュア領域から関数を実行するために、ソフトウェア コールバックを定 義して使う必要があります。これが必要になるのは、セキュアコードと非セキュアコード用に別々の実 行可能ファイルを使うからです。
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
図4-9. 非セキュア ソフトウェア コールバックのフローチャート
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
コールバック関数にはBLXNS命令を使います。そのプロセスを、以下の図とコードに示します。
図4-10. 非セキュア ソフトウェア コールバックの仕組み
Note: ポインタの使い方を誤ると、非セキュアコードからセキュア関数の実行が可能となり、セキュリ
ティの脆弱化を招きます。これを防ぐため、ARMは新しい Cortex-M23 TT命令に基づく CMSE関数の セットを提供しています。
1.2 「セキュアコードと非セキュアコードの実行」に示した図では、デバイスのセキュアメモリ属性に基 づいて特定アドレスのセキュア状態をリターンするために、CMSE 関数 cmse_check_pointed_object を 使います。
4.4.2.3 セキュア タイマカウンタ0 (TC0)モジュールの使用事例
以下では、セキュアおよび非セキュア領域でのセキュア TC の使用事例を示します。この事例では、セ キュア プロジェクトはシステムリソースの設定と、TC周辺モジュールの管理を行います。
セキュア プロジェクトは、専用の TC0 API と非セキュア コールバックを非セキュア領域に提供します。
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
下図に、セキュアmain関数のフローチャートを示します。
図4-11. セキュアmainルーチンのフローチャート
TC0モジュールを非セキュア領域から駆動するために、以下のAPIまたはveneerが非セキュア領域に 提供されます。
• tc0_compare_0_interrupt_callback_register(secure_void_cb_t pfunction);
• tc0_overflow_interrupt_callback_register(secure_void_cb_t pfunction);
• tc0_init(void);
• tc0_set_duty_cycle(uint8_t duty_cycle);
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
非セキュア領域は、セキュア領域から提供される API/vennerを介してセキュア TC0 を使い、PA07ピン で PWM信号を生成します。下図に、アプリケーションのフローチャートと、セキュア領域との相互作用 を示します。
図4-12. 非セキュアmainルーチンのフローチャート
AN5365
セキュアおよび非セキュア周辺モジュールの定義および使用方法
図4-13. セキュアTCハンドラのフローチャート