Rev 1.00.00

ROM レス品種にて、外付けパラレル FlashROM 品種を追加する場合の説明（パケット通信対応版）
１．対象 MCU・ROM レス品種が対象です。(SH7262 / 7264 / 7266 / 7267 / 7268 / 7269)
２．機能
・Hew4 にてパラレル FlashROM の品種追加が出来るよう対応する。
・FlashROM 仕様にあわせたセクターイレーズとバイト書き込みをプログラミングするだけで追加が可能になるよう対応する。
・FlashROM 対応ソフトをターゲットの内臓 RAM に流し込むために、H-debugger と通信させるポートを MCU 品種ごとに用意する。
３．品種追加前の準備
３－１）AH8000 コントロールソフト(DEF8K)のインストール DIR にあるワークスペースを開く。
(SH7268 での追加例)<default directory>"c:¥Aone¥DEF8K¥rom-custom¥SH7268"

1３－２）プロジェクト名「NewFROM」をアクティブプロジェクトにする。

３－３）「プロジェクトタイプの作成」を指定する。

2３－４）追加 FlashROM の新プロジェクトタイプを作成する。

新プロジェクトタイプ名を指定
タイプ名に関しては必要に応じて自由に名前を付けて下さい。

3

４．パラレル FlashROM 品種の追加
４－１）新規プロジェクトの挿入

4新規プロジェクト名

新規作成したプロジェクトタイプ

5４－２）新規プロジェクトに追加する FlashROM 品種の定義およびプログラムを作成する。
１）「FromTemp.c」を開く

２）「FromTemp.h」の#define を定義する。

１：バッファ書き込みモードの設定
０：シングル書き込みモードの設定最大セクター数を定義する。

6

３）パラレル FlashROM のセクター情報を定義する。
必ず先頭に定義する。
(SECTOR_MAX | EXP_PACKET)EXP_PACKET を OR 定義することにより拡張パケット通信が有効になる。

変数「SectorTopAdr[]」に、セクター（ブロック）数ごとの先頭アドレスを定義する。

最後にフラッシュＲＯＭの最終アドレス＋１したアドレスを定義する。

7

４）「オープン」関数を作成する。

関数「FromOpen()」は、ターゲット RAM に、ダウンロード時の最初に 1 回コール(Call)する。このプログラム例は、「FRQCR」の設定と「キャッシュ無効」を定義している。
必要無い場合は、「return(Ok);」のみ記述する。

５）「クローズ」関数を作成する。

関数「FromClose()」は、フラッシュ ROM に全データ書き込み終了後の最後に 1 回コール(Call)する。
必要無い場合は、「return(Ok);」のみ記述する。

8

６）「セクターイレーズ」関数を作成する。

関数「FromSectorEraseProc(UCHAR *cmd)」には、セクターごとのイレーズプログラムを記述する。デバッガとの通信完了後、サムチェック正常の場合、この関数をコール(Call)する。
（サム異常時はコールなし）＜引数の仕様＞
char cmd[];
cmd[0] == '%' // ヘッダー
cmd[1] == 0 // 予備
cmd[2] == 4 // コマンドサイズ cmd[3]->[Sum]までのサイズ
cmd[3] == 'D' // コマンド
cmd[4] == 0xn // 消去するセクター番号の H 数 最大 HIGH(1024)
cmd[5] == 0xn // 消去するセクター番号の L 数 最大 LOW(1024)
cmd[6] == 0xn // サム cmd[3]->[5]の加算値＜備考＞
全イレーズ処理にしたい場合は、セクター番号ゼロ「０」のときのみ実施して、他ののセクターの場合は、「return(Ok);」にすれば代用できる。

9７）「ワードプログラム（書き込み）」関数を作成する。
（１）コマンドパラメータの算出と準備

書き込み長の算出
書き込みアドレスの算出

書き込みデータのトップアドレスをセット

関数「FromWriteProc(UCHAR *cmd)」には、128~512 バイト(64~256 ワード)ごとの書き込みプログラムを記述する。受信完了後、サムチェック正常の場合、この関数をコール(Call)する。
（サム異常時はコールなし）＜引数の仕様＞
char cmd[];
cmd[0] == '%' // ヘッダー
cmd[1] == len(H) // コマンドサイズ cmd[3]->[8+n]までのサイズ(H) 6 + n(128/256/512)
cmd[2] == len(L) // コマンドサイズ cmd[3]->[8+n]までのサイズ(L)
cmd[3] == 'W' // コマンド
cmd[4] == 0xn // 書き込みアドレス(HH)
cmd[5] == 0xn // 書き込みアドレス(MH)
cmd[6] == 0xn // 書き込みアドレス(ML)
cmd[7] == 0xn // 書き込みアドレス(LL)
cmd[8] == 0xn // 書き込みデータ[0]cmd[8+n]== 0xn // 書き込みデータ[n] 固定 余分エリアは(0xff) n=128 / 256 / 512
cmd[9+n]== 0xn // サム cmd[3]->[8+n]の加算値10

（２）書き込みプログラムを作成

バッファ書き込みモード

シングル書き込みモード

ベリファイ処理11８）「フルステータスチェック」関数を作成する。

Erase 処理のフルステータス
チェック

Write 処理のフルステータス
チェック

関数「FullStatusCheck(USHORT *adr,USHORT data,UCHAR cmd」には、フラッシュROM 特有のステータスチェックプログラムを記述する。この関数は、上記の作成関数からのみコール(Call)される。よって、内部処理は自由に記述可能です。

＜引数の仕様＞
Ushort *adr; // 処理しているフラッシュ ROM のアドレス
char cmd; // 処理しているコマンド// “D” = イレーズコマンド// ''W' = 書き込みコマンド＜備考＞
関数「FromErrorSet(..)」は、関数デバッグ時のエラー情報を見るための一例としての関数です。仕様に関してはルールが無いので、自由に作成して下さい。

12９）作成したパラレル FlashROM プログラムをビルドする。
（１）セクションの確認＜ルール１＞
セクター情報定義のセクション名「SectTbl」の、ロケートは必ず、実行プログラムアドレス(TopAdr)の「+0x800」に割付る。
＜ルール２＞
セクション「SectTbl」のデータ配置にルールがある。
const
long SectorMax;// セクター数
constlong SectorTopAdr[SectorMax+1];// セクター毎 Top アドレス
この順番に配置されることが条件になる。
＜ルール３＞
最大セクター(ブロック)数は、「1024」です。
＜ルール４＞
スタックまで含めたオブジェクトサイズは「0x4000」16KB までです。
＜ルール５＞#define OK
0#define NG
0xee
数値変更しないで下さい。

// 変更不可// 変更不可＜ルール６＞
下記 4 関数は、名称・引数・戻り値等の仕様変更は不可です。
1)int
FromOpen(void);
2)int
FromClose(void);
3)int
FromSectorEraseProc(UCHAR *cmd);
4)int
FromWriteProc(UCHAR *cmd);以上のルールは厳守して下さい。

13

（２）ビルドの実施「0 Errors, 0 Warnings」を確認する。

14

５．パラレル FlashROM プログラムのデバッグ方法
５－１）デバッグの準備のため「main.c」を開きビルドする。

「FROM_TEST」のコメントを外して、＜ビルド＞―＜ビルド＞でビルドする。

「0 Errors, 0 Warnings」を確認する。

デバッガ使用の通信ポートと、FlashROM プログラム使用の通信ポートと兼用させているため、通常のデバッグ操作でのデバッグは出来ません。
対策として、上記「#define FROM_TEST」のコメントを外すことにより、通信ポートを使用せず、内部メモリ操作のみで各関数のテストできるように用意してあります。

15

５－２）
「DEF8K」の「CPU 設定」にデバッグ環境を設定する。

作成した「FlashROM」プログラムは、ターゲットの内臓 RAM に転送して実行させますので「RAM」側を指定して先頭終アドレスとサイズを指定する。
SH7268 の場合
開始 0xfff8_0000 サイズ 0x10000になる。

ターゲット側の基板構成による作成した「FlashROM」プログラムのデバッグに BSC 設定が必要な場合は、スクリプトファイルを指定する。
SH7268 の場合"c:s¥Aone¥DEF8K¥rom-custom¥SH7268"に、例として「SH7268-BSC.log」を用意してあるので、目的ターゲット基板にカスタマイズして下さい。

16

５－３）
「DEF8K」でデバッグを開始する。
１）ターゲットと接続する。

②ターゲト基板をリセットする。

①「Start」をクリック

17２）パラレル FlashROM プログラムをダウンロードする。

18

３）「RstMon」をクリックする。

「RstMon」をクリック「void PowerON_Rest_PC」関数の先頭の PC 値になっている事を確認する。

SP 値が内蔵 RAM のボトム位置になっていることを確認する。

「Reg」をクリック

19

４）「main.c::TestMain()」にブレークポイントを設定後、実行する。

①BP1:「stat = FromOpen()」にブレーク設定する。

②BP2:「while(1){}」にブレーク設定する。
エラー発生時ここで停止する。

③「Go」をクリックする。

①「stat = FromOpen()」の位置で停止していることを確認する。
（紫帯が停止している状態）②「CTrac」をクリック

20５）オープン「FrormOpen()」を確認する。

「FromOpen()」関数内に PC 値が移動したことを確認する。

①「main.c」に戻るまで「CTrac」をクリックする。

「main.c」に戻ったのを確認する。

21

６）デバッグを進めるため準備するため「Watch」画面を開く。

①「Watch」をクリックする

デバッグを進めるため、Watch 画面に変数を登録する。
1) CmdStep2) Sector
3) WriteAdr
4) ReadAdr
5) Size6) FromError

関数「CmdWaitT」のコントロールステップ変数
セクターイレーズの進行カウンター
FROM 書き込み中アドレスVerify 中読み出しアドレス
パケットサイズ(128 / 256 / 512)
エラー発生時情報

6 変数を登録します。

22７）セクターイレーズ関数「FromSectorEraseProc(UCHAR *cmd)」を確認する。

①「Go」をクリックする。

①「周期サンプル」にチェックする。

②変数「CmdStep」を数値「1」にする。// ⏎１⏎で設定＜備考＞「main.c」の「CmdWaitT()」関数を参照。
疑似コマンドを作成して「FromSectorEraseProc(UCHAR *cmd)」をコールする。

23

「Sector」はゼロ「0」から登録セクタ数までインクリメントする。

「CmdStep」は、全セクターイレーズが正常終了すると「1」から「0」に変化する。

異常終了すると BP2 で停止する。

【ダンプで確認する。
】FlashROM のアドレス(0x0 ~ 0x1FF_FFFF)

24

８）書き込み関数「FromWriteProc(UCHAR *cmd)」を確認する。
①「周期サンプル」にチェックする。
②「パケットサイズ」を変更する場合に書き換える。(128 / 256 / 512)
③変数「CmdStep」を数値「2」にする。// ⏎2⏎で設定＜備考＞「main.c」の「CmdWaitT()」関数を参照。
疑似コマンドを作成して「FromWriteProc(UCHAR *cmd)」をコールする。

「WriteAdr」は、FlashROM の書き込み先頭アドレス「0x0」から登録最終アドレスまでインクリメントする。

「CmdStep」は、全エリアの書き込みが正常終了すると「2」から「0」に変化する。

異常終了すると BP2 で停止する。
【ダンプで確認する。
】FlashROM のアドレス(0x0 ~ 0x1FF_FFFF)

ゼロ番地以外は、0x80 番地ごとに先頭のアドレス位置を ASCII 文字データを書き、残りは、ゼロから始まるパターンを+1 ごとに埋めている。なお、ゼロ番地から 8 バイト分は、PC/SP レジスタの初期データになるので、誤動作防止のため[0xff]にしている。

25９）パラレル FlashROM 全エリアをベリファイする。

①「周期サンプル」にチェックする。

②変数「CmdStep」を数値「3」る。// ⏎3⏎で設定＜備考＞「main.c」の「CmdWaitT()」関数を参照。
書き込み時に使用した同等の疑似データを作成して全エリアのベリファイを実施する。

「ReadAdr」は、FlashROM の読み出し先頭アドレス「0x0」から登録最終アドレスまでインクリメントする。

「CmdStep」は、全エリアの書き込みが正常終了すると「2」から「0」に変化する。

異常終了すると BP2 で停止する。

26

１０）クローズ「FrormClose()」を確認する。

①BP1:「stat = FromClose()」にブレーク設定する。

②変数「CmdStep」を数値「4」にする。// ⏎4⏎で設定＜備考＞「main.c」の「CmdWaitT()」関数を参照。
疑似コマンドを作成して「FromClose()」をコールする27

①「stat = FromClose()」の位置で停止していることを確認する。
（紫帯が停止している状態）②「CTrac」をクリック「FromClose()」関数内に PC 値が移動したことを確認する。

①「main.c」に戻るまで「CTrac」をクリックする。

28

「main.c」に戻ったのを確認する。

以上で FlashROM プログラムの動作確認は終了です。
１１）異常終了時のエラー情報「long FromError[4]」の参照＜評価・変更窓＞
エラー発生にて異常終了した場合は、変数「FromError[4]」に情報が残しすのでプログラム修正の参考にする。なお、この変数の仕様および名称等に規約は無いので自由に変更して利用して下さい。

29

６．パラレル FlashROM プログラムを正規リリース登録する。
６－１）リリース登録のため Hew4 で「main.c」を開きビルドする。

「FROM_TEST」をコメントにして、＜ビルド＞―＜ビルド＞でビルドする。

「0 Errors, 0 Warnings」を確認する。

30

６－２）
「DEF8K」の「CPU 設定」にリリース環境を設定する。
１）「FROM」を選択する。

２）「参照」をクリックして「FlashFROM プログラム」を登録する。

「FrashROM プログラム」の先頭アドレスとサイズを表示
また、登録した最終セクタを表示する。

指定した「FlashROM プログラム」のHex ファイル名を表示する。

パケット単位は「128/256/512byte」の選択可
31

３）「設定」をクリックする。

32

７．パラレル FlashROM プログラムの最終確認をする。
７－１）ターゲットと接続する。

②ターゲト基板をリセットする。

①「Start」をクリック

33７－２）アプリケーションプログラムをダウンロードする。

① FROM 書き込みプログラムの転送② FROM のセクターイレーズ③ 拡張パケットでの FROM への書き込み34

【ダウンロード正常終了画面】「void PowerON_Rest_PC」関数の先頭で停止していることを確認する。

35

７－３）
「フラッシュ ROM 書き込みツール」で確認する。
＜オプション＞－＜フラッシュ ROM 書き込みツール＞① FROM 書き込みプログラムの転送② FROM のセクターイレーズ③ 拡張パケットでの FROM への書き込み

36

37

７－４）ベリファイで確認する。
１）ターゲットの電源を再投入して接続する。

②ターゲト基板をリセットする。

①「Start」をクリック

ブート完了画面38

２）パラレル FlashROM とベリファイする。

39

【ベリファイ中】【ベリファイ結果】

この結果表示によりパラレル FlashROM にアプリケーションプログラムが正常に書かれていることになる。

40

８．注意事項
・本文書の著作権は、エーワン（株）が保有します。
・本文書を無断での転載は一切禁止します。
・本文書に記載されている内容についての質問やサポートはお受けすることが出来ません。
・本文章に関して、ルネサス エレクトロニクス社への問い合わせは御遠慮願います。
・本文書の内容に従い、使用した結果、損害が発生しても、弊社では一切の責任は負わないものとします。
・本文書の内容に関して、万全を期して作成しましたが、ご不審な点、誤りなどの点がありましたら弊社までご連絡くだされば幸いです。
・本文書の内容は、予告なしに変更されることがあります。

〒486-0852
愛知県春日井市下市場町 6-9-20
エーワン株式会社

https://www.aone.co.jp
41