こんにちは、
すでに別の投稿で同様のトピックを部分的に取り上げましたが、新しいトピックで追加情報を取得するように求められました。
greenVIP デモを使用/変更してカスタム プロジェクトを作成しようとしています。
これまで私が理解したことはこれだけですので、何か間違っている点がありましたらご指摘ください。
私の理解では、ブート シーケンスは次のようになります。
何か重要な手順を見逃していませんか?
こんにちは、 HiddenSquidさん
ご質問と詳細情報をありがとうございます。
カスタム プロジェクトを作成するために、greenVIP デモを使用/変更しようとしていることは承知しています。したがって、アプリケーションについては、S32ZE_GreenVIP_1.x.1/doc/UG_S32ZE_GreenVIP.pdf を参照できます。
ブートローダ アプリケーションは、S32Z2 デバイス上の GreenVIP の両方の種類 (SMU_LA|SMU_LAV) に統合されています。BootROM はステージ 1 ブートローダとして機能し、プライマリ アプリケーション (SMU_LA|SMU_LAV) をロードします。これに続いて、ブートローダがステージ 2 で制御を引き継ぎ、セカンダリ アプリケーション (RTU_0 コア、RTU_1 コア、FLEXLLCE など) をロードします。
次の図のように、S32Z2 デバイス上の SMU_LA に対して GreenVIP がサービス モードで起動しています。
1.bootCFG ピンが正しい位置にある場合、bootROM チップは外部フラッシュのアドレスであるアドレス 0x0 からコードの実行を開始します。
>>>BootROM は、外部フラッシュの 0x0 の位置から直接「命令を取得して実行」するわけではありません。電源投入後、チップはまず内部 ROM 内の BootROM を実行します。BootCFG/スイッチの設定に基づいてブートメディア(QSPI/SD/eMMCなど)を選択し、ブートメディア上のブートヘッダー/IVTを読み取って後続のアクションを決定します。
2. アドレス 0x0 には、BLOB の一部である IVT (イメージ ベクター テーブル) があり、DCD、ブート テーブル、およびブート コアの定義を指します。
S32 Design Studio IVT ツールには、DCD とアプリケーション ブートローダーをロードするオプションがあります。アプリケーション ブートローダとは何ですか? また、アプリケーション ブートローダに RAM 開始ポインタとエントリ ポインタを提供する必要があるのはなぜですか?これは単にブート テーブルの別名ですか、それともブート テーブルはどこで、どのように構成できるのでしょうか?
>>>アプリケーション ブートローダーは、第 1 段階のアプリケーション イメージです。S32Z/E + greenVIP の場合、通常は SMU/M33 側のブート マネジメント プログラムです。BootROM はそれを RAM に移動し、エントリ ポイントにジャンプします。
IVT ツールには、「BLOB のエクスポート」と「IVT イメージ」のエクスポートのオプションもあります。違いは何ですか、または BLOB には何が含まれていますか?
>>> IVT の機能は、「ポインタ テーブル」として機能し、BootROM による解析に使用される DCD、アプリケーション ブートローダ、およびその他のイメージ ブロックを取得する場所を BootROM に指示することです。
BLOB は IVT に基づいており、関連するイメージはメモリ/アライメントに従って単一の書き込み可能な全体イメージ (ブート メディアに直接書き込むことができる) に物理的に組み立てられます。
3. 次に、DCD (デバイス構成データ) セクションが 0x0000_0100 で実行され、各コアのメモリ アクセスとクロックを構成することになります。
S32 DS には DCD ツールもあり、WRITE コマンドと CHECK コマンドを追加または編集できます。ペリフェラルレジスタを設定するためのものだと正しく理解してよろしいでしょうか?実際にすべてのレジスタを DCD で初期化できますか? また、どのレジスタを DCD で変更する必要があり、どのレジスタを実行時に変更できるかをどのように判断すればよいですか?
独自のコードを起動しようとしている場合、どのような条件で設定すればよいのでしょうか?
>>> DCD の役割は、BootROM ステージで実行される「ペリフェラル/ストレージ サブシステムの初期初期化スクリプト」のセットです。代表的な機能には、SRAM/DDR の初期化、QSPI パラメータの設定、必要な特定のクロック/リセットなどがあり、後続のアプリケーション イメージを正しく転送して実行できるようにします。DCD は、「BootROM の後、アプリケーション イメージの前」に準備する必要があるハードウェア条件を最小限に抑えることを目的としており、より高レベルのペリフェラルの初期化 (ドライバ、複雑なタイミング モジュールなど) は、アプリケーション ブートローダー/アプリケーション内で実行する必要があります。
4. 次に、0x0010_0000 にあるブート テーブルが実行され、すべてのコア コードを RAM にロードします。
これを確認してください。また、上ですでに質問したように、ブート テーブルはどこで構成できますか?
>>> SMU が BootROM によって起動された後、ブートローダはブート テーブルに従って RTU のすべてのイメージをロードおよび/または起動します。ブート テーブル構成の詳細については、UG_S32ZE_GreenVIP.pdf の「3.4 ブート テーブルのコンパイル」を参照してください。
5. さらに、私が理解している限り、greenVIP の大きな利点の 1 つは、デターミニスティックであり、オートモーティブ グレードのセーフティが検証可能またはすでに検証されているマルチコア ブートアップ シーケンスを備えていることです。間違っていたら確認または訂正をお願いします。これは、M33 ブート コアのコードも変更すべきではない、または変更できないという意味ですか?
>>>GreenVIP (S32Z/E 車載統合プラットフォーム) は、お客様が最小限の労力で S32Z/E ファミリ上でアプリケーションの開発を開始できるようにする機能的なソフトウェア プラットフォームを提供することを目的としています。各単一アプリケーション (vECU) のスタンドアロン開発とそれらの統合が可能になります。GreenVIP プラットフォームは、独自のデバイス機能を活用した S32Z/E の適切な使用方法を示すことを目的としています。M33 をソフトウェア レベルで適用する場合は、お客様が変更を加えることができます。これはソフトウェア レベルの開発アプリケーションです。当社が提供するgreenvipは、お客様が参照および使用するためのものであり、お客様の迅速な発展を促進します。
6. さらに、各コアのバイナリがブートシーケンス中にフラッシュからRAMにコピーされるだけの場合、カスタムプロジェクトでgreenVIPアーキテクチャを使用する目的は、greenVIPユーザーガイドの表11(各パーティションのフラッシュアドレス)で指定された適切なフラッシュアドレスに独自のコードバイナリをフラッシュすることだけでしょうか?つまり、例えばRTU_0_C0でコードを実行したい場合、バイナリをアドレス0x0024_0000にフラッシュするということですか?
>>>GreenVIP アプリケーションの場合、バイナリをアドレス 0x0024_0000 にフラッシュすると、RTU_0_C0.bin をこのアドレスにフラッシュするときに、SMU ブートローダによって自動的に RAM にコピーされます。ただし、エントリ/開始アドレスが同じ場合にのみ開始できます。
この情報がお役に立つことを願っております。
BR
ジョーイ
こんにちは@Joey_z 、
回答ありがとうございます。これは概念的には大いに理解するのに役立ちますが、実用的な観点からは少し困惑しています。
int main(void)
{
SwPartId = PART_ID;
/* Monitoring initialization (SwPartId, osTaskID_First, osTaskID_Last, osTaskID_Reset) */
Monitoring_Init(SwPartId, OsTaskASW_1ms, OsTaskASW_1000ms, OsTaskASW_1000ms);
EcuM_Init(); /* start OS never returns */
return 0;
}しかし、 EcuM_Init()の定義/内容が見つからないため、行き止まりになってしまいます。マルチコア ブート プロセス アーキテクチャの説明は、具体的にはどこにありますか? また、どこで見つけることができますか?
お時間を割いていただき、ありがとうございます!
こんにちは、 HiddenSquid
ご返信と情報ありがとうございます。
1.S32 Design Studio 用の同等の構成ツールはありますか? また、この問題にはどのように対処すればよいですか?
>>>5.12 ブート サービスの章を参照してください。ブート サービス (ブートローダー) は、SMU tresos プロジェクトで構成可能なコンポーネントとして提供されます。このコンポーネントは、複数の実行環境、アプリケーションソース、アプリケーションの構成を可能にします。
画像の断片。GreenVIP パッケージの場合、ブートローダー アプリケーションには Tresos のみを使用できます。
2.「BLOB は IVT に基づいています」というのは、IVT が BLOB の一部であるという意味ですか、それとも BLOB のコンパイル プロセスが IVT に基づいているという意味ですか。
>>>IVT/DCD/アプリケーション ブートローダーは BLOB に含まれています。
3. しかし、EcuM_Init() の定義/内容が見つからないため、行き止まりになってしまいます。マルチコア ブート プロセス アーキテクチャの説明は、具体的にはどこにありますか? また、どこで見つけることができますか?
>>> GreenVIP の場合、ブートローダ アプリケーションをロードして Tresos でコードを生成し、EcuM_Init() 情報を見つけてください。GreenVIP パッケージはマルチコアなので、これも参照してみてください。
BR
ジョーイ