ファームウェアの動作確認

前回、Armadillo-900でのファームウェアのビルドを行い、インストールに成功しました。今回はファームウェアの動作確認を行います。

ファームウェアの動きを追いかけるため、コンピューテックスのJTAG-ICE PALMiCE4を使用します。PALMiCE4にファームウェアのデバッグ情報を読み込ませることで、Cortex-M33のソースデバッグが可能になります。

PALMiCE4の接続

下図のようにPALMiCE4をArmadillo-900の開発ボードのJTAGピンに接続し、SW3をJTAG側に設定します。

PALMiCE4の接続

CSIDEの起動

次にデバッガソフトCSIDEを起動します。CSIDEはPALMiCE4で動作するソースデバッガです。CSIDEの起動方法について、詳しくは以下のURLより「Armadillo-900セットアップ説明書」がダウンロードできますので、そちらも合わせてご覧ください。

https://www.computex.co.jp/products/palmice4/p4_check_board.htm

CSIDEを起動し、[設定]メニューの[ターゲットシステムの設定]を選択すると、CPUの選択画面が表示されますので、メーカ名は[NXP Semiconductors]、CPUは[i.MX 8ULP]を選択し、[起動する]ボタンをクリックします。

CSIDE起動

次にターゲットシステムの設定ウィンドウが表示されますので、[初期値の設定]ボタンをクリックしてください。

CSIDE起動1

すると初期値の設定が表示されますので[JTAG] タブを選択後、[リセット・パルス幅]を1000msに変更します。

CSIDE起動2

OKボタンをクリックして、ターゲットシステムの設定で[更新]ボタンをクリックします。

CSIDE起動3

これで起動完了です。画面の左下で風車のようにぐるぐる回っているのは各コアの実行状態を表しています。左から2つがCortex-A35、3つ目がCortex-M33に割り当てられています。起動後はすべてのコアがフリーの状態になっており、まだPALMiCE4の制御下にはありません。PALMiCE4がそれぞれのコアにアタッチすることでデバッグが可能になります。

実際には「アタッチ」、「デバッグコア切り替え」、「デバッグ情報のロード」などの操作がありますので、これらの手順を自動化します。

デバッグ手順の自動化

Cortex-M33のデバッグのために以下の手順を自動化します。

  1. ハードウェアの初期化
  2. Linuxカーネル起動待ち
  3. Cortex-M33へアタッチ
  4. デバッグコアをCortex-M33に切り替え
  5. ファームウェアのELFからデバッグ情報をロード

デバッグ手順の自動化を行うには[ロード]ボタンをクリックしてファイルサーバを開きます。

CSIDEツールバー

このウィンドウにはコマンド、スクリプト、ELFファイルなどが登録でき、シーケンシャルに処理を行うことができます。登録した内容は [再ロード]ボタンをクリックするだけで実行できます。

CSIDEファイルサーバ

ファイルサーバの追加ボタンをクリックするとメニューが表示されますので、[コマンドの追加]を選択します。

CSIDEファイルサーバ2

次のウィンドウでは[ハードウェアの初期化]を選択し、[次へ]ボタンをクリックします。

CSIDEファイルサーバ3

プロジェクトロード時にコマンドを実行する、しないの選択画面が表示されますので、[実行しない]を選択してください。以降表示される、この画面に対しては[実行しない]を選択してください。

CSIDEファイルサーバPJ

一つ目の設定が完了すれば、再度、ファイルサーバ画面より、コマンド追加を行います。

CSIDEファイルサーバ4

次はLinuxの起動を待つためのメッセージの表示を行う設定です。

CSIDEファイルサーバ5

[メッセージの表示]を選択して、メッセージ内容として「Linuxカーネルの起動を待ちます。」と入力します。

同様の操作で、次のファイルサーバはシステムマクロの追加を行います。

CSIDEファイルサーバ6

そうすると、システムマクロの一覧が表示されますので、Cortex-M33へのアタッチ(@AttachCortexM33)を選択します。この時、[プロジェクトロード時に実行する]のチェックは外しておきます。

CSIDEファイルサーバ7

これがコアをデバッガの制御下に置くための、アタッチ操作になります。アタッチ後、デバッグ対象コアをCortex-M33に切り替えるためのコマンドを登録します。

CSIDEファイルサーバ8

[デバッグ対象のCPU のみを切り替えます]を選択し、コア番号として2を入力します。コア番号は0から始まり、0と1がCortex-A35、2がCortex-M33に割り当てられています。

CSIDEファイルサーバ9

最後のステップとして、デバッグ情報のロード操作を登録します。デバッグ情報はファームウェアのELFファイルに含まれますので、そのファイルを指定するため[追加]ボタンをクリックします。

CSIDEファイルサーバ10

次の画面でm33-firmware-at.elfファイルを指定します。ATDEとSambaでファイル共有していれば「\\atde9\atmark\imx-boot-2023.04-at5\m33_firmware_at\armgcc\debug」にあるはずです。\\atde9の名前が使用できない場合は直接IPアドレスを指定します。

CSIDEファイルサーバ11

この設定では[デバッグ情報のみのロード]を選択し、[プロジェクトから起動したときにロードする]のチェックを外してください。次に[詳細設定]ボタンをクリックしてデバッグ情報を有効にするコアを指定します。ここでは[Core No.2]にチェックを入れます。

CSIDEファイルサーバ12

今回の場合はCortex-M33のみなので影響はありませんが、この指定を行うことで、デバッグ対象コアごとにデバッグ情報を切り替えることができます。

登録が終了すると最終的な画面は次のようになります。

CSIDEファイルサーバ13

最後に[詳細設定]ボタンをクリックして[デバッグ情報に出力されるスタート・アドレスを無視する]をチェックします。

CSIDEファイルサーバ14

これで登録は終了です。ファイルサーバの[閉じる]ボタンをクリックして、一旦終了します。

コアの同期実行の設定

i.MX 8ULPはCortex-A35とCortex-M33のヘテロジニアスマルチコアですので、コアそれぞれに実行と停止の都合があります。例えば、Linuxが動作する2つのCortex-A35は同時に実行、同時に停止しなければ都合が悪いですし、Cortex-M33の実行停止に関係なくLinuxは動いてほしいはずです。このようなコア独立、あるいは同期の制御が必要となりますので、コアの同期実行の設定を行います。

同期実行の設定画面は、[実行]メニューの[同期実行/ブレークの設定]で開きますので、次のように設定します。

CSIDEコア同期

この設定の意味は、まず上の段でコア0とコア1(つまり二つのCortex-A35です)をグループAとします。そして下の段で、グループAのどの実行制御の機能を同期するか詳細に指定します。例えば、実行は同時に行っても、ブレークは個別に行うような設定も可能です。グループAを同期させる理由としては、二つのCortex-A35がSMP-Linuxで連携して動作しているため、片方だけ止めると何らかの問題が発生するのを防ぐためです。コア2のCortex-M33の設定が不要なのは、単独で実行、停止を行うためです。

この設定は、デバッグ対象のコアに対して有効になります。デバッグ対象のコアがグループAに属していれば、グループAの別のコアに対しても同じ操作が行われる仕組みとなっています。

これですべての設定は完了しましたので、Cortex-M33の動作確認をしてみましょう。

Cortex-M33の動作確認

Armadillo-900のLinuxが起動していることを確認するために、ターミナルソフト「TeraTerm」を起動しておきます。現在はログイン待ち状態になっているので、Enterキーを押せば反応が返ってくるはずです。

次にファイルサーバへ登録した操作を実行します。複雑な操作も[再ロード]ボタンをクリックするだけで実行できます。

CSIDEツールバーReload

ファイルサーバへメッセージ表示を登録した通り、次のメッセージが表示されます。

Linux起動待ち

Linuxの起動が完了することでCortex-M33のデバッグが可能になりますので、ターミナルを見ながらLinuxの起動を待ちます。

Linux起動

ログインが表示されたら、メッセージのOKボタンをクリックします。すると、デバッグ情報がロードされ、Cortex-M33が実行待ちになります。Cortex-M33が止まっている状態ですので、ターミナルにはずらずらとメッセージが表示されます。

Linux起動

これは、Linuxがコア間通信でCortex-M33に何かをさせようとして失敗しているメッセージですので、とりあえず実行ボタンを押せば復帰します。このように、Armadillo-900のLinuxはCortex-M33に依存している機能がいくつかあります。

コードウィンドウでデバッグ

とりあえずCortex-M33でソースデバッグができるかどうかを確認してみましょう。

[表示]メニューからコードウィンドウを開くと、Cortex-M33はどこかのソースで停止しています。このとき、SambaとLinuxのパスの違いで、ソースファイルが見つからないというメッセージが表示されますので、正しいソースファイルを指定します。

Linux起動

正しく停止すれば、 [トレース実行]ボタンをクリックして、正しくソースデバッグできることを確認します。

ご覧のようにCortex-M33はLinux起動後に自動ブートしますので、main関数から追跡することができません。Armadillo-900はこの辺りも含めて作り込まれたシステムですので、ユーザーとしては自分の追加したコードからデバッグができればよい、と考えられなくもないです。どうしてもmain関数からデバッグしたい場合は、while(1)などの無限ループを先頭に書いておき、デバッグが可能になってからその行をスキップさせる方法を使います。

とりあえずここまででデバッグまでの道筋はできましたので、CSIDEを終了してプロジェクトファイル「cside.cpf」に設定を保存します。次回からはcside.cpfをダブルクリックするだけでOKです。

次はファームウェアを変更・拡張するための手順を追います。Cortex-M33に自分のコードを追加して動かしてみましょう。