シリアルフラッシュＲＯＭ対応のローダプログラムを追加する場合の説明（ブートモード１／３用)
Ｒｅｖ１．３０ ２０１２／１０／４
ＤＥＦバージョン１１．００Ａより
ＤＥＦバージョン１２．１０Ａ変更
ＤＥＦバージョン１２．２０Ａ変更【対象ＣＰＵ】
１．ＲＯＭレス品種が対象になります。
（ＳＨ７２６２／４／６／７）【機能】
１．サンプルで「ＡＴ２５ＤＦ０４１Ａ」の対応ソフトを用意してあります。
（ルネサスＣのみ対応）【ＳＨ７２６２／４】
２．サンプルで「ＳＳＴ２５ＶＦ０１６Ｂ／Ｍ２Ｐ１６」の対応ソフトを用意してあります。
（ルネサスＣのみ対応）【ＳＨ７２６６／７】
３．ＳＨ７２６２／４／６／７【ＲＳＰＩ０】に接続されたシリアルフラッシュＲＯＭが対象になります。
４．ＨｅｗにてＦｌａｓｈＲＯＭの品種追加が出来るよう対応する。
５．シリアルＦｌａｓｈＲＯＭ仕様にあわせたバイトリードをプログラミングするだけで追加が可能になります。

【品種追加前の準備】
１．ＡＨ７０００コントロールソフトのインストールＤＩＲにあるワークスペースを開きます。
（追加例）[1-1]＜デフォルトディレクトリ＞"c:¥Program Files¥Aone¥DEF¥rom-custom¥SH7264"＜ワークスペース＞"SH7264.hws"

２．プロジェクト名「_ＮｅｗＳＦ＿Ｌｏａｄｅｒ」をアクティブプロジェクトに設定します。
[1-2]＜_ＮｅｗＳＦ＿Ｌｏａｄｅｒ＞をマウスクリックし、右クリックのポップアップメニューから選択します。

３．
「プロジェクトタイプの作成」をします。
[1-3]
Ｈｅｗメニュー
＜プロジェクト＞－＜プロジェクトタイプの作成＞をクリックします。

４．新規プロジェクトタイプで使用する名前を指定します。
[1-4]

名前は、重複しないようにして下さい。
例として「ＮｅｗＳＦ＿Ｌｏａｄｅｒ＿７２６４」としておきます。

＜－「次へ」をクリックします。

[1-5]＜－完了をクリックします。

この操作で「品種追加前の準備」は完了です。

【新規シリアルＦｌａｓｈＲＯＭ用ローダの追加】
１．新規シリアルＦｌａｓｈＲＯＭ用ローダを追加するため、「プロジェクトの挿入」をします。
[2-1]

Ｈｅｗメニュー
＜プロジェクト＞－＜プロジェクトの挿入＞をクリックします。

[2-2]「新規プロジェクト」を指定して、「ＯＫ」をクリックします。

[2-3]１）プロジェクトタイプに作成した「ＮｅｗＳＦ＿Ｌｏａｄｅｒ＿７２６４」を指定します。
２）プロジェクト名を指定します。FlashROM 名を追加した「ＡＴ２５ＤＦ０４１Ａ＿Ｌｏａｄｅｒ」にします。

＜－「ＯＫ」をクリックします。

２．新規シリアルＦｌａｓｈＲＯＭ用ローダの定義およびプログラムを作成します。
[2-4]

品種追加用ファイル「sflashrom.c」を開きます。

１）「sflashrom.c」に新規シリアルＦｌａｓｈＲＯＭの情報を定義します。
[2-5｣「SFMAX_SIZE」に使用するシリアルＦｌａ
ｓｈＲＯＭの最大サイズ（バイト）を定義しま

シリアルＦｌａｓｈＲＯＭの各コマンドを定義します。
定義名
コマンド
SF_READ_ARRAY
0x0B
データの読み出し機能

この例は、ATMEL 社の「AT25DF041A」のコマンドです。コマンド仕様は各デバイスメーカーによって異なります。使用するデバイスのデータシートを参照して下さい。

２）「sflashrom.c」に新規シリアルＦｌａｓｈＲＯＭに依存したコマンドプログラムを作成します。
下記の参考プログラム例は、ATMEL 社の「AT25DF041A」用コマンドプログラムです。コマンドパラメータ仕様は各デバイスメーカーによって異なります。使用するデバイスのデータシートを参照してから作成して下さい。

[2-6]
関数「AppInfoRead(...)」は、アプリケーションのローダ情報をシリ
アルＦｌａｓｈＲｏｍの「APP_INFO_TOP(0x2000)」番地より読み出します。
＜引数の仕様＞
Uchar *rdat; // 読み出したデータを格納する先頭アドレス
Ulong rsize; // 読み出しデータのサイズ（バイト）

関数「AppProgRead(...)」は、アプリケーションプログラムをシリア
ルＦｌａｓｈＲｏｍの「APP_PROG_TOP(0x2000)」番地より読み出します。
＜引数の仕様＞
Uchar *rdat; // 読み出したデータを格納する先頭アドレス
Ulong rsize; // 読み出しデータのサイズ（バイト）

関数「sFlashByteRead(....)」は、バイト読み出しします。
＜引数の仕様＞
Ulong adr；// 読み出しするデバイス内の先頭アドレス
Uchar *rdt; // 読み出したデータを格納する先頭アドレス
Ulong rsize; // 読み出しデータのサイズ（バイト）[IoCmdExeRead()¥sh7264_rspi.c] RSPI0 コマンド（リードデータありタイプ）送信関数です。

[2-6-1]ポイント！！
ブートモード１／３の設定のままでデバッグする場合のポイン
トです。
この位置にソフトタイマー(約 4msec)を入れて下さい。

＜理由＞
シリアルフラッシュ ROM に旧バージョンのソフトウェアが書き込みしてある状態で新バージョンのソフトウェアを作成するためにデバッグしている時にデバッガ操作で「RstMon」
Reseet+MoniterStart をした場合、この位置にソフトウェアタイマー(約 4msec)を入れときますとシリアルフラッシュ ROMに登録されているプログラムのロードを防ぐことが出来ます。

＜RstMon の動作説明＞
RstMon をクリックしますと、①ターゲットを Reset します。
②リセット解除後、強制ブレークを発行します。
①から②の間の強制ブレークは、H-UDI(J-TAG)通信でコマンド発行しますので、ブレーク有効になるまでは CPU は動作します。

以上で、関数の作成は終了です。

３．新規シリアルＦｌａｓｈＲＯＭ用ローダプログラムをビルドします。
[2-7]

Ｈｅｗメニュー＜ビルド＞－＜すべてをビルド＞で、「0 Errors 0 Warnings」になったことを確認します。

１）新規シリアルＦｌａｓｈＲＯＭライタ用プログラム作成上のルール[2-8]＜ルール１＞
セクション名「PLoaderTop」の、ロケートは必ず、シリコン内部のブートローダが転送する先頭アドレス「0xFFF80000」に割付けて下さい。
＜ルール２＞
スタックまで含めたオブジェクトサイズは「0x2000」8KB までです。

以上のルールは厳守して下さい。

２）ローダプログラムをデバッグする場合は、セクションの配置換えが必要です。
[2-9]＜デバッグ時＞
セクション名「DVECTTBL」の、ロケートは必ず、シリコン内部のブートローダが転送する先頭アドレス「0xFFF80000」に割付けて下さい。
デバッグが終了しましたら、１）のロケーションに戻して下さい。

【作成したＦｌａｓｈＲＯＭ用ローダプログラムのデバッグ方法】
デバッグ中は、「ブートモ－ド０」にするか、もしくは「ブートモ－ド０」に出来ない回路構成（アドレス・データバスを汎用Ｉ／Ｏに使用）の場合は、プログラムの開始アドレスを「0xFFF8_2000」にロケートしなおし DEF 設定も「0xFFF8_2000」に設定してデバッグして下さい。デバッグ終了後は「0xFFF8_000」に戻して下さい。
理由：「ブートモード１・３」のままですとリセット解除後、ブートプログラムが起動され内蔵高速ＲＡＭの先頭から「0x2000」エリアにローダプログラムがロードされてしまいます。
１．デバッガ用コントロールソフト「ＤＥＦ」にてデバッグする為の設定をします。
[3-1]＜ＣＰＵ設定＞作成した「FlashROM」プログラムをターゲット側の内部ＲＡＭに転送して実行させますので、「ＲＡＭ」にチェック後、先頭アドレスとサイズを指定します。
ＳＨ７２６４の場合
開始 0xfff80000
サイズ 0x10000になります。

作成した「FlashROM」プログラムのデバッグにＢＳＣ設定が必要な場合は、スクリプトファイルを指定します。
ＳＨ７２６４の場合
インストールディレクトリ
"c:¥Program Files¥Aone¥DEF¥rom-custom¥SH7264"に、例として「SH7264-BSC-HSB.log」が用意してありますので、目的ハードにカスタマイズして下さい。

＜－「設定」をクリックします。

[3-2]

ＤＥＦ画面、左下隅の「Start」をクリックします。

２．作成したＦｌａｓｈＲＯＭソフトのデバッグを開始する準備をする。
[3-3]
ＤＥＦメニュー
＜ファイル＞－＜ダウンロード＞
で、ダウンロードします。

インストールディレクトリ
"c:¥Program Files¥Aone¥DEF¥rom-custom¥SH7264"
下の"$(ProjectName)¥Debug"に作成したアブソリュートファイルがありますので指定します。
例）$(ProjectName):AT25DF041A_Loader「AT25DF041A_Loader.abs」[3-4]＜ダウンロードが成功した初期画面＞
PC レジスタ値が先頭アドレス[「0xFFF80100」になっていることが確認出来ます。

SP レジスタ値が内蔵 RAM のボトムアドレスになっていることが確認できます。

＜操作＞「Trace」ショート PB をクリックして、関数「LoaderMain()」まで進めます。

[3-5]
関数「LoaderMain()」に進んでいるのを確認します。

＜操作１＞
変数「AppProgInfo」アプリケーションのローダ情報が正しく読み取れるかを確認するため、評価・変更窓を開きます。
[3-5-1]＜操作２＞「CStep」ショート PB をクリックして、「LoadMain」の「55 行」まで進めます。
[3-6]

＜確認＞
[0]は、シリアルＦｌａｓｈＲＯＭからアプリケーションプログラムをターゲットメモリにロードする先頭アドレスになります。
[1]は、シリアルＦｌａｓｈＲＯＭからアプリケーションプログラムをターゲットメモリにロードする終了アドレスになります。
なお、この数値は「AT25DF041A_Writeer」のテストプログラムで書き込んだデータになります。

[3-7]＜操作１＞
ローダプログラムが正しく読み出せたかを確認するため、ダンプアドレスに「0x1C00_0000」を指定しておきます。

＜操作２＞「CStep」ショート PB をクリックして、「LoadMain」の「58 行」まで進めます。

[3-7-1]＜確認１＞
アプリケーションの転送先の開始アドレスになります。

＜確認２＞
アプリケーションの転送先の終了アドレスになります。

＜確認３＞
アプリケーションのエントリアドレ
ス（開始）になります。

＜確認４＞
アプリケーションのスタックポイン
タ初期値になります。

この数値は「AT25DF041A_Writeer」のテストプログラムで書き込んだデータになります。

[3-8]

関数「LoaderMain()」の「58」行＜操作１＞「CTrac」ショート PB をクリックして、「Loader.src」の「48 行」まで進めます。

[3-9]「Loader.src」の「48」行＜確認１＞
R0 レジスタがアプリケーションのエントリアドレス「0x1C000800」になっていることを確認します。

＜確認２＞
SP レジスタがアプリケーションの初期値「0xFFF90000」になっていることを確認します。

ローダプログラムの確認は終了です。
３．御願い
本説の方法で、フラッシュＲＯＭ用ローダプログラムを追加した場合、必ず、プロジェクトのバックアップすることを御願いします。
今回は「c:\Program Files\Aone\DEF\rom_custom」で作成する例で記述しましたが「\rom_custom」をホルダごと別のディレクトリに貼り付けても作成できます。
つまり、ユーザーアプリのプロジェクトごとに管理するのも一案かもしれません。追加作成したプロジェクトは、ユーザー様の責任のもとで管理願います。
以上で、シリアルＦｌａｓｈＲＯＭ用ローダプログラムの追加作業が終了です。