「Flashドライバ」とは
(以下の内容は、Klaus Emmertの「FLASH Bootloader User Manual Version 2.7」からの抜粋です)
「フラッシュ・ドライバ(実体はフラッシュ・アルゴリズム)は、フラッシュ関数を実行するためのハードウェア依存コードです。通常、フラッシュ・メモリのプログラミングをフラッシュから行うことはできません。そこで、フラッシュ・ドライバをRAMにダウンロードして実行することで、アプリケーションのプログラミングが可能になります。フラッシュ・アルゴリズムをRAMにダウンロードする利点は、プライマリ・ブートローダを再プログラムすることなくフラッシュ・アルゴリズムを更新できることです。ダウンロードが完了すると、アルゴリズムはRAMからクリアされ、アプリケーションの実行中にフラッシュ関数が誤って呼び出されるのを防ぎます。
特別なケースでは、フラッシュ・アルゴリズムはフラッシュ・メモリに保持されており、必要に応じてRAMにコピーされます。もちろん、この構成を使用した場合、フラッシュ・アルゴリズムの変更は不可能になります。さらに、これらの関数が誤って呼び出されることで、フラッシュ・メモリが意図せず消去される危険性があります。これを緩和するための対策としては、例えばXORなどの処理により、対応するプログラム・コードを暗号化することが考えられます」
デモについて
- ソフトウェアは「S32 Design Studio for S32 Platform V3.4」を使用しており、SDKは「RTM 4.0.3」です。
- S32K142-EVBを基にしたハードウェア
- 2つのデモが提供されています。1つは「フラッシュ・ドライバ」の作成用、もう1つはフラッシュ・ドライバのイメージのテスト用です。
·「Flash_Driver_Source_Project」:このルーチンはドライバ・イメージの作成に使用されます。
·「Flash_Driver_Source_Project_Test」:このルーチンはフラッシュ・ドライバ・イメージのテストに使用されます。
·フラッシュ・ドライバのイメージ作成のプロセス
1. 新規プロジェクトを作成し、フラッシュ・コンポーネントを追加します。
提供されたデモを参照し、main.cファイルを修正します。
注1 main.cで関数インデックステーブルを定義
2. リンク・ファイルを修正します。
注2 修正後のS32K142_32_flash.ldファイル
注3 修正後のS32K142_32_flash.ldファイル
3. フラッシュの操作に必要な関数に「attribute」コマンドを追加します。
注4 関数に「attribute」をこのように追加
関数内で別の関数を参照している場合は、参照先の関数にも「attribute」を追加する必要があります。
4. プロジェクトをコンパイルし、xx.map ファイルを確認して、割り当てられたアドレス空間が正しいかどうかを確認してください。
注5 Flash_Driver_Source_Project.mapを確認してください
5. フラッシュ・ドライバを作成します。
注6 フラッシュ・イメージを作成
注7 画像フォーマットを選択
注8 フラッシュ・ドライバ・イメージを作成
「xx.s19」ファイルを新規作成し、0x1fffe000~0x1ffffffffの範囲のデータをこのファイルにコピーします。
注9 必要に応じてリンクの順序を変更
一部の関数が別のファイルに分散している場合は、リンクの順序を変えることで、関数アドレスの割り当てを変更できます。
フラッシュドライバイメージをテストするプロセス
1. フラッシュ・コンポーネントを追加せずに、新しいプロジェクトを作成します。
新しいプロジェクトを作成する必要がありますが、Flash コンポーネントを追加する必要はありません。
2. 前に示したのと同様にリンク・ファイルを修正します。
3. 提供されたデモを参照し、main.cファイルを修正します。
4. プロジェクトをコンパイルし、.mapファイルをチェックして、割り当てられた配列の位置のアドレス空間が正しいかどうかを確認します。
注 10 Function_TABLEがすでに正しい場所に配置されていることを確認してください
5.デバッグセクションに入り、準備したフラッシュドライバーイメージをインポートします。
注12 フラッシュ・モジュールを操作する前にフラッシュ・ドライバ・イメージをインポート
6. フラッシュ・ドライバが正常に動作するかどうかをテストします。
注13 テスト結果を確認してください
こうして、フラッシュ・ドライバ・イメージの作成方法とテスト方法がわかりました。この方法は、フラッシュ操作に関連する関数の作成に限らず、他の関数にも同じように適用できます。ただし、そのようなシナリオを必要とするアプリケーションはほとんどありません。
こんにちは。ご指定の方法で設定しましたが、生成されたマップファイルのアドレスが間違っています。リンクファイルのコンパイル順序を変更するにはどうすればよいですか?
新しいRTD 3.0.0に対応したS32K3XX用の更新版はありますか?