2363471_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2363471_ja-JP

2363471_ja-JP

RW612非セキュアフラッシュ設定によりリセット機能が破損する

こんにちは、

FRDM-RW612上でARM TF-MとZephyr(NXPダウンストリームv4.3.0)を使用している際に、奇妙なバグが発生しています。フラッシュメモリの一部領域を、セキュリティ保護機能のないLittleFSファイルシステムに使用したいと考えています。NXPのガイド(リンク)に従ってNS領域を追加したところ、ファイルシステムにその領域を正常に使用でき、Zephyr/FS APIやアクセスに関する問題も発生しませんでした。

私の問題は、CONFIG_FLASH KConfigオプションを有効にすると、ボードをリセットできなくなることです。tfm_platform_system_reset()、NVIC_SystemReset() を呼び出したり、物理的なリセットボタンを押したりしても、プロセッサがロックされてしまい、実際にはボードがリセットされなくなります。

デバッガーを使ってステップ実行したところ、デバッガーが切り離される直前に実行された最後の行は core_cm33.h:2683 でした。(__NVIC_SystemReset内):

SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk );

リセット後にデバッガを接続すると、GDBはアドレス0x20005840のプログラムが永久に停止すると報告します。

非常に基本的なプログラムで同じことを試してみましたが、Zephyrのhello worldプログラムにCONFIG_FLASHを追加しても、リセットが同じように失敗します。


どんなご協力でもありがたいです。ありがとうございます!

Re: RW612 Nonsecure Flash Setting Breaks Reset Functionality

こんにちは、@jm-streametric さん。お元気でお過ごしでしょうか。

この動作をより詳細に分析するために、ハローワールドのサンプルで行ったテストにおいて、追加した設定はCONFIG_FLASHのみであることを確認してもらえますか?それとも、ガイドから作成した設定(CONFIG_TFM_CUSTOM_DATA_IMPORT_REGION=y)を使用して、追加したNS領域も有効にしていますか?

私はZephyr(v4.3.0 ダウンストリーム)のhello worldサンプルをCONFIG_FLASH設定のみを追加して実行しようとしましたが、ボードをリセットすることができました。

Re: RW612 Nonsecure Flash Setting Breaks Reset Functionalityこんにちは、ローマンさん。
投稿でボードを指定する際に誤りがありました。RW610を搭載したカスタムボードを使用していますが、フラッシュ構成はFRDM-RW612と全く同じです。CONFIG_FLASH=y に設定しても開発ボードをリセットすることはできますが、私のカスタムボードでは、以前の投稿で説明した問題が発生します。

TF-MとZephyrのリポジトリをFRDM-RW612のデフォルトに設定しても、CONFIG_FLASH=yの場合(カスタムデータ領域の有無に関わらず)、ボードをリセットできないという問題が発生します。RW610とRW612の間には、フラッシュメモリやFlexSPIに問題を引き起こす可能性のある違いはありますか?それとも、私のボードに別の問題があるのでしょうか?
Re: RW612 Nonsecure Flash Setting Breaks Reset Functionality

こんにちは、ジェイクさん。ご説明ありがとうございます。

RW610とRW612の違いは、RW610が802.15.4プロトコルをサポートしていないため、FlexSPI周辺機器との違いはないという点です。

これらの機能をテストする際に、FRDM-RW612ファイルを使用しているかどうか確認していただけますか?それとも、Zephyrでボード用のディレクトリを独自に作成しましたか?

また、リセット機能を使わずにサンプルを正しく実行することは可能でしょうか?それとも、MCUはどこかの時点でハードフォルトを起こすのだろうか?

Re: RW612 Nonsecure Flash Setting Breaks Reset Functionalityこんにちは、ローマンさん。

私のボードは同じフラッシュICを使用しているため、フラッシュ機能のテストには未修正のFRDM-RW612ファイルを使用しています。私のボードには様々な**ペリフェラル**が搭載されており、それぞれにオーバーレイを適用していますが、今回のフラッシュテストケースではそれらのオーバーレイは適用しません。

フラッシュメモリは正常に動作しており、カスタムリージョン内のフラッシュデータにも問題なくアクセスできます。カスタム領域外のフラッシュにアクセスするとエラーが発生しますが、これは想定内の動作です。唯一うまくいかないのは、物理的に、またはtfm_platform_system_reset()を使用してボードをリセットしようとすると、上記のようにボードがロックされてしまうことです。

ありがとう
Re: RW612 Nonsecure Flash Setting Breaks Reset Functionality

ジェイクさん、情報ありがとうございます。

つまり、プロジェクトに「CONFIG_FLASH=y」設定を追加すると、アプリケーションは通常どおり実行できるが、リセット操作を行うとプログラムがアドレス0x20005840で無限ループに陥る、ということでしょうか?

リセット原因が登録されているかどうかを確認するために、リセットステータスレジスタ( SYS_RST_STATUS )をご確認いただけますでしょうか?さらに、セキュリティ保護機能のないバージョンのボードで全てのテストを実施しましたか?

FRDM-RW612ボードをお持ちでしたら、カスタムボードでのテストに追加しているのと同じ設定で、この現象が発生するかどうかをテストして教えていただけますでしょうか?

Re: RW612 Nonsecure Flash Setting Breaks Reset Functionality

こんにちは、ローマンさん。

つまり、プロジェクトに「CONFIG_FLASH=y」設定を追加すると、アプリケーションは通常どおり実行できるが、リセット操作を行うとプログラムがアドレス0x20005840で無限ループに陥る、ということでしょうか?

はい、その通りです。ボードの電源を一度切ってから入れ直す以外に、プログラムを再起動する方法がありません。


リセット原因が登録されているかどうかを確認するために、リセットステータスレジスタ( SYS_RST_STATUS )をご確認いただけますでしょうか?

現在、zephyrのサンプル「hello_world」を使ってこれらのテストを試しています。CONFIG_FLASH=y の有無に関わらず、またカスタムボードでも実際の FRDM-RW612 でも、SYS_RST_STATUS の値を取得できませんでした。物理的なリセットボタン(SOC上のPDnに接続)を押したり、printf文の後にtfm_platform_system_reset()を呼び出したり、NULLポインタにアクセスしてハードフォルトを発生させたりしてみましたが、いずれもリセットステータスレジスタに値が表示されませんでした。

リセット前、リセット後のアドレス 0x20005840 のループ内、およびリセット後の BL2 ステージでサンプリングを試しましたが、SYS_RST_STATUS が 0 であるかどうかは関係ありませんでした。チェック方法が間違っているかどうかわかりませんが、GDB (west attach 経由) を使用してデバッグし、 p *((PMU_Type*)0x40031000u)を印刷して PMU ブロック内の値を取得しました。参考までに、サンプリングしたときの SYS_RST_EN レジスタは常に 0x39 でした。


さらに、セキュリティ保護機能のないバージョンのボードで全てのテストを実施しましたか?

はい、ビルドフォルダを削除してからwest build -b frdm_rw612/rw612/nsを実行することで、これらのテストをすべてクリーンにビルドします。


独自のボードでテストするために追加している設定と同じ設定で、この動作が発生するかどうか教えてください。

私の設定のほとんどは、Flexcommポート上のペリフェラルに関するものです。この問題に関する私のテストでは、TF-Mプロファイルに加えた変更点のみを残しました。TF-M FWUパーティションを使用して無線ファームウェアアップデートを実行できるように、私はTF-Mのラージプロファイルではなくミディアムプロファイルを使用しています。そのため、ZephyrのKConfigオプションを3つ追加しました。

CONFIG_TFM_PROFILE_TYPE_AROTLESS=y
CONFIG_TFM_SFN=y
CONFIG_TFM_ISOLATION_LEVEL=1

そして、TF-Mモジュールフォルダで編集したのは、modules/tee/tf-m/trusted-firmware-m/platform/ext/target/nxp/frdmrw612/config.cmakeにある以下のプロファイル設定だけです。

set(TFM_PROFILE "profile_medium_arotless" CACHE STRING "TF-Mプロファイル")

これは「profile_large」から変更されたものです


ご協力ありがとうございました。他に何か情報が必要な場合はお知らせください。

Re: RW612 Nonsecure Flash Setting Breaks Reset Functionality

ジェイクさん、質問に答えていただきありがとうございます。

FRDM-RW612でテストしたとのことですが、このボードでもリセット動作を再現できますか?あなたの設定とTF-Mのビルド変更(TF-Mプロファイル)を追加して試してみましたが、それでもあなたの動作を再現できませんでした。

もしこの現象を再現できるのであれば、FRDM-RW612でその動作を再現するために実行した詳細な手順を共有していただけますでしょうか?

Re: RW612 Nonsecure Flash Setting Breaks Reset Functionalityこんにちは、ローマンさん。
基板の回路図が間違っていたこと、そして私が使用していたフラッシュチップがFRDM-RW612のようなW25Q512ではなく、実際にはW25Q01だったことが分かりました。W25Q512を基板にはんだ付けしたところ、問題なくリセットできるようになりました。先ほどはお時間を無駄にしてしまい、申し訳ありませんでした。

私のチップに対応するようにフラッシュメモリの設定を再構成する方法に関する資料はありますか?flash_config.c に fc_flexspi_nor_config_t 構造体が見つかりました。これはW25Q512用に設定されているのですが、新しいチップに対応するために変更する必要がある箇所を具体的に説明したドキュメントやガイドはありますか?
Re: RW612 Nonsecure Flash Setting Breaks Reset Functionality

こんにちは、ジェイク。気にしないでください。根本原因を教えてくれてありがとう。

残念ながら、フラッシュメモリの再構成に関する具体的なガイドはありません。ただし、異なるフラッシュを使用する場合にどのような変更が必要になるかについては、RD-RW612-BGAボードのディレクトリ構造、またはIRIS-W1-EVKボードのディレクトリ構造(u-Blox社製)を参考にすることができます。これらのボードはどちらもFRDMボードとは異なるフラッシュICを搭載しています。

TF-Mの場合、RD-RW612-BGA非セキュアバージョンのボードのディレクトリも存在し、これも必要な変更の参考として利用できます。

お役に立てば幸いです!

Tags (1)
No ratings
Version history
Last update:
2 weeks ago
Updated by: