Hewからの接続時にIDコードを入力するダイアログが現れて困った件。

firmware

ソースコードはあるから、既存製品のE2PROMに書かれた値を確認してほしいとの依頼があり、引き受けましたが、いざE8a エミュレータを接続すると、IDコード確認画面が出てきて困りました。
その時の対処方法を記述します。

最初に実行したこと

・依頼先にIDコードを聞く。
・書いたプログラマーに IDコードを 聞く。
結論から言うと、誰に聞いても昔のことで不明でした 。

初期値の入力

資料を調べると、ID未設定時の初期値が”FFFFFFFFFFFFFF“と判明。
結論から言うと、初期値に”FFFFFFFFFFFFFF“を入力しても受け付けてくれませんでした。

Flash Development Toolkitでの接続確認

Flash Development ToolkitでMotファイルを読み込むと、メッセージウィンドウ欄にIDコードが出ることが判明しました。

表示されているIDコードの”00000000000000“を入力して、エミュレータは無事起動しました。

原因調査

ルネサスの資料

下記ルネサスのスタートアッププログラムの説明を見ると、3ページ目の”4.1固定ベクタテーブルの設定”と 8ページ目の”4.10 IDコード書き込み”にIDコードが記載されている。
High-performance Embedded Workshop スタートアッププログラムの説明
また、E8aエミュレータの使用上の注意事項の38ページには”表7.6 IDコード格納領域”が記載されている。
FFFDFh IDコード 1バイト目
FFFE3h IDコード 2バイト目
FFFEBh IDコード 3バイト目
FFFEFh IDコード 4バイト目
FFFF3h IDコード 5バイト目
FFFF7h IDコード 6バイト目
FFFFBh IDコード 7バイト目
E8aエミュレータの使用上の注意事項

実際のプロジェクト

今回依頼されたソースには”fvector.c“がない。
Flash Development Toolkitでmotファイルを読み込むと、該当領域は”0x00“になっている

新規のプロジェクト作成で試してみる

・作成方法1
プロジェクトタイプで”Application”を選択した場合は、”fvector.c“は作成されず、代わりに”sect30.inc“にIDコード”FFFFFFFFFFFFFF“が記載される。

;---------------------------------
; fixed vector section
;---------------------------------
  .section  fvector,ROMDATA
  .org    0fffdcH
UDI:          .lword    dummy_int
OVER_FLOW:    .lword    dummy_int
BRKI:         .lword    dummy_int
ADDRESS_MATCH:.lword    dummy_int
SINGLE_STEP:  .lword    dummy_int
WDT:          .lword    dummy_int
DBC:          .lword    dummy_int
NMI:          .lword    dummy_int
RESET:        .lword  start
;=================================
; ID code & ROM code protect
;---------------------------------
; ID code check function
  .id "#FFFFFFFFFFFFFF"

・作成方法2
プロジェクトタイプで”c source startup Application”を選択した場合は、”fvector.c“は作成され、”fvector.c“にIDコードが記載される。

#pragma sectaddress     fvector,ROMDATA 0xfffdc
#pragma interrupt/v _dummy_int  //udi
#pragma interrupt/v _dummy_int  //over_flow
#pragma interrupt/v _dummy_int  //brki
#pragma interrupt/v _dummy_int  //address_match
#pragma interrupt/v _dummy_int  //single_step
#pragma interrupt/v _dummy_int  //wdt
#pragma interrupt/v _dummy_int  //dbc
#pragma interrupt/v _dummy_int  //nmi
#pragma interrupt/v start
_asm("  .id ""\"#FFFFFFFFFFFFFF\"");

・今回のソースと比較

;===============================================================
; fixed vector section
;---------------------------------------------------------------
;-----  fuction define (user)  -----
  .glb    _int_WDT
;-----------------------------------
.section  fvector,ROMDATA
.org  0fffdcH
UDI:            .lword  dummy_int
OVER_FLOW:      .lword  dummy_int
BRKI:           .lword  dummy_int
ADDRESS_MATCH:  .lword  dummy_int
SINGLE_STEP:    .lword  dummy_int
WDT:            .lword  dummy_int
DBC:            .lword  dummy_int
NMI:            .lword  dummy_int
; .org  0ffffcH
RESET:
  .lword  start
  ;
  ; ID code check function
  ; .id "CodeChk"

.id CodeCheck“の記載がないため、IDコードが”00000000000000”となっていると思われる。
コ ード生成日が2008年10月のため、当時はIDコードが自動生成されなかったではないかと思われる。
.id “#FFFFFFFFFFFFFF“を記載しコンパイルしたMotファイルを、Flash Development Toolkitで読み込むとIDコードが”FFFFFFFFFFFFFF“なりました。

コメント