皆さん こんにちは STM32マイコン体験 実習 セキュリティ編パート5ですパート5では STM32 CubeMX初期化コード 生成ツールでトラストドーン対応ファームヤープロジェクト の作成を体験しまたトラストドーンの無効化の仕方を 修得します今まではある程度準備された ファームヤープロジェクトをもとに作業していました 演習後では STM32 CubeMXを使って何もないところからトラストドーン対応 ファームヤープロジェクトを作りますまた IAR-EWARMのトラストドーン関連の 設定オプションも学習しますこのスライドはこれから作成する ファームヤーの使用をまとめています緑色のLED一用のピン PC7と タイマー1をセキュア空間で使いますタイマー1の割り込みがセキュア空間 の割り込みベクターテーブルに入るようにします タイマー1の割り込み を利用してLED1ピンの出力を500ミディ秒周期でトグルします 青色のLED2ピンPB7とタイマー2をノーマル空間で使います タイマー2の割り込みがノーマル空間の割り込みベクターテーブルに入る ようにします タイマー2の割り込みを利用してLED2ピンの出力を1秒 周期でトグルします予備で赤色のLED3 PA7をセキュア空間 で使います STM32 CubeMXは初期化コードだけ生成するのでLEDを点滅する 処理をこれから追加していきますこのディレクトリーにあるワークスペース ファイルをEW-ARMで開きます 演習後を始めます このディレクトリー にあるプロジェクトドットEW-WをEW-ARMで開きます 2つのソースファイル と1つのヘッダーファイルにプログラムコードを追加します ノーマルファーメア のメインドットCにはタイマー2の開始 タイマー2の割り込みコール バーク関数の実装 セキュア空間にあるタイマ1を開始するセキュア呼び出し トラストのイリガル割り込みを意図的に発生するテストコード を追加しますセキュアファーメアのメインドットCには タイマ1を開始するセキュア呼び出し関数の実装 タイマ1割り込みコール バーク関数の実装 トラストゾーンイリガルアクセス割り込みコール バーク関数の実装を追加しますセキュア呼び出しヘッダーファイル にタイマ1を開始するセキュア呼び出し関数のインターフェース 宣言を追加します ノーマルファーメアのメインドットCの93行目付近に 右側の一行を追加しますこれはタイマハルドライバーのAPIで これでタイマ2が開始し1ミリ秒前にタイマ割り込みが入るよう になります ノーマルファーメアの224行目から233行目付近に 右側のタイマ2割り込みコールバーク関数の実装を追加します タイマ2割り込みは1ミリ秒前に発生するので割り込みコールバーク で先回カウントすると1秒になりますRGPIOトグルピン関数でLED2の品質力 をトグルしてLED2を点滅しますノーマルファーメアのメインドットCの 94行目付近に右側の一行を追加します これはセキュア空間 で動作するタイマ1を開始するためのセキュア呼び出しです セキュア呼び出して実行する関数は後ほどセキュアファーメアのメイン ドットCに実装を追加しますノーマルファーメアのメインドットCの 99行目にスライド右側のようにテストコードをコメントアウト した状態で追加します演習後が一通り終わった後で不正 アクセスを試す時にコメントを外してノーマルファーメアをビルドしてください セキュアファーメアのメインドットCに2つの関数の実装を追加します 1つ目がタイマ1を開始するセキュア呼び出し関数の実装です 2つ目がタイマ1割り込みコールバーク関数の実装です タイマ1は1ミリ秒ごとに割り込みが発生するのでタイマ1割り込み コールバーク関数も1ミリ秒ごとに呼び出されます 500回呼び出されるとちょうど500ミリ秒なのでその時点でLED1Pの出力をトーグルします セキュアファーメアのメインドットCのコード編集を続けます 330行目にトラストゾンイリーガルアクセス割り込みの コールバーク関数の実装を追加します トラストゾンコントローラー が不正なアクセスを検知すると割り込みが発生してこのコールバーク関数 が呼び出されます不正アクセスを検知したことを分かりやすくする ため赤色のLED3を点灯して無限ループで止まるようにします セキュアファーメアのメインドットCの編集は以上で終了です セキュアNSCリブディレクトリーにあるセキュアNSC.hヘッダーファイル の41行目付きにスライド右側のような関数宣言を追加します これは先ほど セキュアファーメアのメインドットCに追加したセキュア呼び出し 関数のインターフェース宣言になります警告を抑制するためEWARMのIDオプション とデバッカーオプションを調整しますツールズメニューのオプションズを選択します IDオプションズウィンドウが表示されたら左メニューのスタック を選択しますスタックオプション設定画面の上 から3番目スタックポインターノットバリ とアンティルプログラムリーチズのチェックを外します 次にプロジェクト メニューのオプションズを選択しますデバッカーカテゴリーのセットアップ タブを選んでラン2オプションのチェックを外します トラストゾーン 対応ファーメアのキープロジェクトオプションを3つ学習します 1つ目はトラストゾーン対応ファーメアのビルドに必要なオプションです 2つ目はセキュアファーメアと一緒にノーマルファーメアもダウンロード するオプションです3つ目はベクターテーブルの警告 をケアするオプションですセキュアファーメアとノーマルファーメア はそれぞれ固有のベクターテーブルがありEWMはベクターテーブル が2つ以上あると警告を出さめオプションで手当てします セキュア ファーメアプロジェクトを選んで右クリックでポップアップを表示します ポップアップの一番上にあるオプション図を選択します ジェネラルオプション カテゴリーのターゲットタブを選びます トラストゾーン対応ファーメア ではトラストゾーンチェックボックスにチェックを入れてセキュアファーメア の場合はモードをセキュアに設定します ノーマルファーメア の場合はモードをノーセキュアに設定します STM32 Cube MXで生成した トラストゾーン対応プロジェクトでは既に設定済みになっている ので何もしなくて大丈夫です次にテバカーカテゴリーのイメージ ズタブを選択します ダウンロードイクストライイメージにチェック を入れます パステキストフィールドにノーマルファーメアのドットアウト ファイルの取材を入力します オフセットをゼロにします デバックインフォン オンリーのチェックを外します 最後にデバカーカテゴリーのイクストラ オプションズを選択します ユーズコマンドラインオプションズに チェックを入れます コマンドラインオプションズテキストフィールド にこのオプションを記入します以上でオプションの調整は終了 です セキュアファーメアとノンセキュアファーメアの両方を一条にビルド するバッチビルドを準備しますプロジェクトメニューから バッチビルドを選択します バッチビルド設定のポップアップが表示されたら ニューをクリックします バッチビルドの編集ポップアップに切り替わったら まずこれから作るバッチビルドの名前を入力します 使用可能な構成 の中からセキュアファーメアプロジェクトを選択します 最後に右味るシマーク をクリックします 使用可能な構成に残っているノーマルファーメアプロジェクト を選択します 選択したら右味るシマークをクリックします ビルド する構成の箇所に上からセキュアファーメア ノーマルファーメア の順に並んでいれば 設定は問題ありません OKをクリックします 作成 したバッチビルドでセキュアファーメアとノーマルファーメアをビルドして ダウンロードしてデバッグを実行します正しくプログラムコードが追加 できていれば LED1とLED2が異なる周期で点滅します 余力があれば ノーマルファーメアのメインド都市の百業目付近にコメントアウト したタイマー1への区正アクセス操作を有効にしてファーメアをビルド して実行してみてください 以上で演習後は終了です 演習6に移ります 演習6でトラストドーンの無効化を体験します トラストドーン を無効にするにはオプションビットのTZENを0にする必要があります が 簡単に0にできないようになっています ニュークレオ基板を使って TZENオプションビットを0にする操作を体験します 演習6を始める前に 基板のオンボードSTリンクのマスストレージ機能を無効にしておく必要があります まだ無効にしていない場合はSTM32マイコン体験実習 セキュリティ編パート2トラストドーン機能の使用に向けた準備を 主張して必要な操作を施してマスストレージ機能を無効にしてください 1にセットしたTZENオプションビットを0にリセットするには RDPのレベルを1から0にします今の状態では TZENが1でRDPレベル が0になっています まずRDPレベルを1にします その後でRDPレベルを1から0にする操作とTZENを0にする操作を同時に実行します RDPレベルを1から0にした瞬間に内部フラッシュメモリの内容は全て消去されますTZENオプションビットを0にする操作を始める前に準備をしますまずRDPのレベルが0になっているか 確認してください これらのオプションバイトがこの設定になっているか確認してください 基板のCN1USBポートにUSBケーブルが装着されていてPCと接続されているか 確認してください このトラストゾーン対応サンプルファームエアを基板 に書き込んでください LEDが点滅していれば問題なく動作しています マイコン起動時にセキュアファームエアで動作して その後 ノーマルファームエアで動作し続けるファームエアが書き込まれて いないと RDPのレベルを1にした後贅沢が繋がらなくなってしまうため このトラストゾーン対応サンプルファームエアをあらかじめ基板に書き 込んでおきます ここまでできたらSTM32 CUBEプログラマを起動します トラストゾーンを無効にする手順を動画でデモします パート 5ではSTM32 CUBE MXによるトラストゾーン対応ファームエアプロジェクト の作成を体験し トラストゾーンの無効果の仕方を修得しました パート 5は以上で終了です ご視聴いただきましてありがとうございました