NXPコミュニティの皆様、こんにちは。
私は現在フラッシュの 0x60000000 に配置されている単一のブートローダを備えたi.MX RT1050プロジェクトに取り組んでいます。基本的に同じブートローダを2 つの異なる場所(工場出荷時および動作中のブート モードなど) から実行し、ブートローダが実行される開始アドレスを実行時に選択できるようにしたいです。
制約と設定:
フラッシュにはブートローダ イメージが 1 つだけ存在します。
実行時に RAMから実行して、異なる開始アドレスを選択したいと思います。
ブートローダは現在、ポジショニング独立 (PIC) ではありません。
ブートローダーを保持するのに十分な RAM (0x80000000、サイズ 2 MB) が割り当てられています。
私は次のようなアプローチを知っています:
ブートローダーをフラッシュから RAM にコピーします。
SCB->VTOR を新しい RAM の場所に設定します。
MSP を新しいブートローダのスタック ポインタに設定します。
RAM 内のリセット ハンドラーにジャンプします。
私の質問は次のとおりです:
i.MX RT1050 は、PIC としてコンパイルされていない場合でも、RAM からブートローダを安全に実行できますか?
ブートローダを位置非依存にするにはどのような変更が必要ですか?
ファームウェア スロットにランタイム選択可能なブートローダー開始アドレスを実装するためのベスト プラクティスはありますか?
あらゆるガイダンス、例、参考資料が非常に役立ちます。
こんにちは@sachin13tさん、
役に立つかもしれない以下のリンクをご覧ください: i.MX RT10xxシリーズにセカンドブートローダーを実装する+
sbl/component/secure/semifunc/hab_rvt.c at master · nxp-mcuxpresso/sbl · GitHub
ポジション独立コードの詳細については、次のリンクを参照してください。
Arm Cortex-M 用の GCC を使用した位置独立コード | Eclipse 上の MCU。
BR、
イサウルO。