2414573_ja-JP

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

2414573_ja-JP

2414573_ja-JP

S32K311ブートローダーの移植

現在、S32K312で動作するブートローダープロジェクトをS32K311に移植しています。私はS32 Design StudioとNXP RTD 4.9.0、GCCコンパイラを併用しています。S32K311 / RTD 4.9環境に特有の、ベクターテーブルとリセットハンドラに関連する2つの深刻な問題に遭遇しています。

問題 1: デバッガーのリセット時にすぐに UsageFault が発生します。PEMicro デバッガーを起動すると、main() に到達する前にリセット スクリプト中にコアがすぐにクラッシュします。

スクリプトのリセット(…)が完了しました。
UsageFault: 無効な EPSR.T または EPSR.IT フィールドで実行された命令。
ハードフォールト:障害がハードフォールトにエスカレートしました。


startup_cm7.sを確認しました。および Vector_Table.s。Reset_Handler に .type が欠落していることに気づきましたReset_Handler、%function指令が出され、ELFのエントリポイントが偶数アドレス(例:0x00402421ではなく0x00402420)となり、自然とCortex-M7でARMモードのUsageFaultが発生します。

.type ディレクティブを修正し、ベクター テーブルで LSB が Thumb モードに設定されていることを確認した後でも、PEMicro デバッガーはリセット直後にこの UsageFault を時折スローします。

問題 2: 割り込みが 0x0 (初期化されていない RAM ベクタ テーブル) にジャンプする リセットの問題を正常に回避して main() に到達すると、ハードウェア割り込み (FlexCAN や SWT など) がトリガーされた瞬間にシステムがクラッシュします。PCは0x00000000にジャンプします。

メモリを調査したところ、__interrupts_ram_start (0x20000000) にある RAM ベクタ テーブルが完全に初期化されていない(ゼロで埋められている)ことがわかりました。私たちは以下のことを発見しました。

startup_cm7.s初期化の最後にはVTORを__RAM_INTERRUPT_STARTに設定しますが、ROMからテーブルをコピーすることはありません。
IntCtrl_Ip_Init(&IntCtrlConfig_0)(プラットフォームコンポーネントによって生成)は、INT_CTRL_IP_ENABLE_VTOR_CONFIGが有効であればVTORを設定しますが、デフォルトのベクターテーブルをフラッシュからRAMにコピーしません。
この問題を回避するために、main.c に手動で for ループを記述し、ベクター テーブルを __interrupts_init_start から __interrupts_ram_start に物理的にコピーし、IntCtrl_Ip_InstallHandler() を呼び出す前に S32_SCB->VTOR を更新する必要がありました。

Unified bootloader Demoからベースコードを取得しました

CANのS32K311ブートローダーが移植されて投稿された投稿を知っている人はいますか?


Re: S32K311 bootloader porting

こんにちは、 @ujwal12さん

Cortex-M7の場合、ベクターテーブルのリセットハンドラエントリは、LSBが設定されたアドレスを使ってサムモードを示す必要があります。Reset_Handler記号が関数記号として正しく生成されていないと、リンカーがベクトルテーブルに偶数アドレスを配置し、起動時にUsageFaultが発生することがあります。そのため、一般的にはstartup_cm7.sの変更は推奨しません。または Vector_Table.s。

設計上、S32K3 RTDはRAMベースのリロケーション可能な割り込みベクトルテーブルを使用しています。起動時に、ベクターテーブルがフラッシュメモリからRAMにコピーされ、VTORはRAM上のテーブルを指すように更新されます。

S32K311用ブートローダーのサンプルコードの入手可能性に関してですが、現時点ではS32K311を特に対象とした公式のブートローダーのサンプルコードは存在しません。最も近い参考文献は、 Bootloader to アプリケーション Jump DS3.5 RTD300 S32K312 、すでに使っているUnified Bootloaderデモです。

また、Unified Bootloaderは非公式のNXPデモであり、コミュニティフォーラムでのみ公開されているため、NXPの技術サポートからはサポートされていません。


BR、VaneB

Tags (1)
No ratings
Version history
Last update:
Saturday
Updated by: