こんにちは、NXPチームの皆様、
当社は、HSEのフルブロックA/Bスワップを使用して、S32K312上で堅牢なOTAアップデートアーキテクチャを実装しています。
我々の目標とするアーキテクチャは以下のとおりです。
- S32K312は、2MBのPFlashを2つの1MBの物理ブロックに分割して搭載しています。
- HSE AB_SWAPは、パッシブブロックのアクティベーションサービスを介して使用されます。
- OTAパッケージはModbus/シリアル経由で受信されます。
- ブートローダーは署名付きイメージをパッシブPFlashブロックに段階化します。
- HSEは受動イメージ/SMRを検証します。
- ブートローダーがAP_SWAPを要求します。
リセット後、新しく交換されたバンクは暫定的に起動します。
確認コマンドを実行すると、スワップが永続的に適用されます。そうでない場合は、デバイスはロールバックされます。
当初は、2つのPFlashバンクとは別に、DFlashに1つのグローバルブートローダーを配置しようと試みました。そのブートローダーはOTAを受信し、パッシブPFlashバンクをプログラムし、HSE AP_SWAPを要求し、その後、確認/ロールバックの管理を継続します。
そのアプローチでは、アーキテクチャと実行時の複雑さという問題に直面しました。
1. HSE AB_SWAP は、任意のアプリケーション パーティションではなく、PFlash ブロックの境界全体で動作するようです。
2. 単一のDFlashブートローダーは、スワップ/認証済みバンクイメージの外にあります。
3. アクティブなPFlashバンクは、スワップ後も有効なブート/IVT/リセット構造を必要とします。
4. DFlashがブートローダーの実行時/レコード処理にも関与していた場合、実行時に重大なハザードが発生しました。
5.グローバルDFlashブートローダーがクリーンなフルバンクのHSE AB_SWAP生産設計と互換性があるかどうかは不明瞭になりました。
そのため、当面はPFlashブートローダーを複製したモードに移行しました。
- 各1MBのPFlashバンクには独自のIVT + ブートローダー+アプリケーションが含まれています。
- ブートローダーは、各バンクの底部に予約済みのスロットを持っています。
- アプリケーションはブートローダースロットの後に起動します。
- 署名付きOTAイメージは、ブートローダー+アプリケーションを含むフルバンクイメージです。
- HSE AB_SWAP実行後、新たにアクティブになったバンクは自己完結型でブート可能です。
HSEのフルブロックA/Bスワップには、この方法の方がはるかにクリーンに見えますが、意図された、かつ生産上安全な方法であることを確認したいと思います。これは、工場出荷時のブートローダーの目的を部分的に損なうため、最適とは言えません。
質問:
1.S32K312 HSE AB_SWAPの場合、スワップされたPFlashバンクの外に単一のグローバルDFlash常駐ブートローダーを配置するアーキテクチャは、サポート/推奨されていますか?
2. あるいは、HSE AB_SWAPは、交換された各PFlashブロックが、独自のIVT/ブートローダー/リセットパスを持ち、独立してブート可能であることを実質的に要求/推奨しているのでしょうか?
3.もしDFlashブートローダーが可能なら、SBAF/HSEブートの期待に応えられるように、スワップ後のブートフローはどのように構成すべきでしょうか?
4. S32K3上でDFlashブートローダーがフルブロックHSE AB_SWAPを管理することを示したNXPの参考例はありますか?
5.ロールバックや確認セマンティクスを持つ本番OTAの場合、複製されたPFlashブートローダーモデルの方が安全な設計でしょうか?
コードとIVTをリンカースクリプトを改変することでDFlashにリンクできるという話は見ており(私たちも試しました)、しかし私たちの質問は、HSEのフルブロックA/Bスワップやセキュアブート/SMR検証を使う場合にそれが適切かどうかについてです。
よろしくお願いします。