2301875_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2301875_ja-JP

2301875_ja-JP

S32K364 ブートローダーがアプリケーション (App) へのジャンプに失敗します。

S32K364 のデバッグ中に、ブートローダーがアプリにジャンプできないという問題が発生しました。

統合ブートローダデモ( https://community.nxp.com/t5/S32K-Knowledge-Base/Unified-bootloader-Demo/ta-p/1423099 )のジャンプ方法は以下のように参照されます。

デモでは:

图片1.png图片1.png

アプリのエントリ アドレスは、関数 FLASH_HAL_GetRestHanlderInfo を使用して取得されます。

图片2.png图片2.png

ここで使用されるマクロ定義は次のとおりです。

图片3.png图片3.png

S32K364プロジェクトのリンカースクリプトファイルを確認し、構成を確認しました: APP_VECTOR_TABLE_OFFSET=8192

图片4.png图片4.png


さらに、私のアプリケーション プロジェクトでは、appstart アドレスが 0x00432000 として構成されています。

图片5.png图片5.png

アプリケーションによって生成される HEX ファイルのヘッダー情報は次のとおりです。

图片6.png图片6.png

私が実装したジャンプ コードは次のとおりです。

图片7.png图片7.png

操作に問題があったり、何か見落としがあったりする場合はお知らせください。

ご回答をお待ちしています。


Re: S32K364 Bootloader fails to jump to the application (App).

直接実行すると(デバッグなし)、テストではジャンプが機能するようです。

ご返信ありがとうございます!ところで、あなたの出身地を教えていただけますか?

Re: S32K364 Bootloader fails to jump to the application (App).

ジャンプ後にエラーは発生しませんでしたが、プログラムを一時停止すると、PC レジスタに 0x434a62 が表示されました。アプリのマップ ファイルを確認すると、プログラムが undefined_handler に入り、ここで停止したようです。


图片17.png图片17.png

图片18.png图片18.png

Re: S32K364 Bootloader fails to jump to the application (App).

こんにちは。ご提案どおりにアプリ内の MPU を無効にしました。ジャンプ後にエラー メッセージは表示されませんでしたが、アプリは実行されていないようです。オシロスコープのピンから期待される方形波信号を確認できません。確認用にテスト プロジェクトを添付しました。


Re: S32K364 Bootloader fails to jump to the application (App).

こんにちは@caigangwu

前回の返信で最初の質問に対応しましたが、ブートローダーがアプリにジャンプできない問題は既に解決されているようです。

新しい質問は MPU によって発生したようです。

アプリ プロジェクトを個別にテストしているときにこの問題が発生しましたか?

アプリで MPU を無効にしてから、もう一度試してください。

Senlent_0-1769653704239.pngSenlent_0-1769653704239.png

それでも失敗する場合は、完了したテスト プロジェクトを提供してください。


Re: S32K364 Bootloader fails to jump to the application (App).

ご返信ありがとうございます。送信されたコードを実行しましたが、まだエラーが発生したり問題が発生したりします。

图片11.png图片11.png

  • 障害が発生した場合:

スタックポイント = 0x434000

ジャンプアドレス = 0x434421


图片12.png图片12.png

  • そして、アプリのマップ ファイル内の Reset_Hanlder アドレス:

图片14.png图片14.png

HEX ファイルと MAP ファイルをアップロードしました。添付ファイルから直接表示できます。


この問題はおそらく MPU の設定が必要ですか?ご協力をお待ちしております。


Re: S32K364 Bootloader fails to jump to the application (App).

こんにちは@caigangwu

#AppStartAddress 0x00432000Uを定義します
静的 void (*JumpTpApplication)(void) = NULL;
静的 uint32_t スタックポイント;
void goToApp(void)
{
__asm("cpsid i");
uint32_t ジャンプアドレス = 0 、スタックポイント;
ジャンプアドレス = *(volatile uint32_t *)(AppStartAddress+0x0c+0x04);
stack_point = *(volatile uint32_t *)(AppStartAddress+0x0c);
ジャンプアドレス = *(volatile uint32_t *)(stack_point+0x04);
JumpTpApplication = (void (*)(void))JumpAddress;
 
S32_SCB->VTOR = *(揮発性 uint32_t *)(AppStartAddress+0x0c);
 
__asm volatile("MSR msp, %0\n":: "r" (stack_point));
__asm volatile("MSR psp, %0\n":: "r" (stack_point));
 
ジャンプTpアプリケーション();
}


上記のデモコードを試してみて、それでも失敗する場合は、次の値を共有してください。

ジャンプアドレス、スタックポイント、ジャンプアドレス。

また、アプリのマップ ファイル内の Reset_Hanlder アドレス。

回复: S32K364 Bootloader fails to jump to the application (App).

Reset_Handler のアドレスを取得しました:

图片8.png图片8.png图片9.png图片9.png

より、resetHandle = 0x00434421U を変更します

图片10.png图片10.png

しかし、新たな問題が浮上しました。

图片11.png图片11.png

Re: S32K364 Bootloader fails to jump to the application (App).

こんにちは、@ センレント、

ジャンプが必ずしも成功するとは限らないようです。ジャンプが失敗した場合、デバッガを使ってアタッチしてステータスを確認すると、プログラムが `undefined_handler(0x00434a62)` で停止していることがわかります。ジャンプ前に周辺機器を初期化したり、RAMをクリアしたりしてみましたが、状況は改善しませんでした。何か設定オプションを見落としているのでしょうか?

图片17.png图片17.png


Re: S32K364 Bootloader fails to jump to the application (App).

こんにちは@caigangwu

ジャンプする前に、すべての割り込みを無効にしてテストします。

Re: S32K364 Bootloader fails to jump to the application (App).こんにちは @Senlent、問題は解決しました。ご返信ありがとうございます。
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎02-06-2026 04:24 AM
更新者: