2010年4月29日木曜日

SH-2A基板用HEWモニタプログラムを外付けシリアル・フラッシュROMに書き込む。



手持ちのシリアル・フラッシュROM(M25P40 512Kバイト)を SH-2A基板(Interface 2010.06付属)のブート用に使いたいと思い、HEWモニタプログラムの書き込みに挑戦しました。











概要

SH-2Aマイコン基板実装SPIシリアル接続フラッシュROM アップデート・ファイル
[アップデートプログラム(SPIwriterAll) ]==(SPI Ch0)==> [基板上のシリアル・フラッシュROM(M25P05-A)]

[アップデートプログラム(SPIwriterAll)改 ]==(SPI Ch1)==> [外付けシリアル・フラッシュROM(M25P40)]
に改造


手順

 1.Interface誌 Webサイトの
   [付属SH-2A基板特設ページ]/[付属SH-2A基板関連のダウンロード・データ]/[付属SH-2Aマイコン基板回路図などをアップロードしました]
    で SH-2Aマイコン基板実装SPIシリアル接続フラッシュROM アップデート・ファイル(2010年4月24日版)
      で ROM_UpDate0424.zip を取得した。

 2.アップデートファイルの解析。
   内容: アップデートプログラム(SPIwriterAll) +  HEW モニタプログラム(書き込みデータ) の構成
  1)アップデートプログラム(SPIwriterAll / main.c)
   ポインタ 0x1C080000 以降のデータをSPI Ch0 のシリアル・フラッシュROMのアドレス 0x00000000 以降に 64Kバイト書き込む。
  2)ポインタ 0x1C080000 について。
    アップデートプログラム(SPIwriterAll)のリンクマップ(SPIwriterAll.map)をみる、マッピングリスト末尾は 1c07ffff となっている。  
     ==> これが、main.cでの HEW モニタプログラム のポインタ 0x1C080000 の 起源?
 (デバッグでの注意点)
     ==> main.cでの HEW モニタプログラム のポインタ(0x1C080000)と HEW ダウンロードモジュールのオフセット設定と、が一致していること。 

 3.アップデートプログラムの改造
  1)フォルダ ROM_Update を ROM_Createに複写 これ以降 ROM_Createでの作業
  2)プログラムソース(serial_flash.c)の修正
    SPI Ch0を Ch1に置き換える。 
   ①関数 io_init_rspi(void) の修正
    ・ポートレジスタの設定 SPI Ch1 用に
     PG20:MISO1 PG19:MOSI PG18:SSL10 PG17:PSPCK1
    ・SPI CH1レジスタの稼動
     スタンバイコントロールレジスタ5のMSTP50(SPI Ch1用)に0設定
    ・SPI Ch1レジスタの設定
     SPI Ch0に対応する一連のレジスタ群用に宣言された構造体RSPI0の使用をCh1用のRSPI1に変更
   ②関数 io_cmd_exe() の修正
    ・SPI Ch1レジスタの設定
   ③関数 io_cmd_exe_rdmode()の修正
    ・SPI Ch1レジスタの設定
   ④関数 io_cmd_exe_rdmode_cpu_l()の修正
    ・SPI Ch1レジスタの設定
   ⑤関数 io_cmd_exe_rdmode_dma_l()の修正
    ・SPI Ch1レジスタの設定
    ・DMAの設定 
      DMA 拡張リソースセレクタ0 の設定 0x52 を 0x56 (DMAC Ch0のMIDの変更)
      DMA ソースアドレスレジスタの設定 SPI Ch0のデータレジスタ(RSPI0.SPDR.BYTE)のポインタをSPI Ch1のデータレジスタ(RSPI1.SPDR.BYTE)のポインタに変更
   ⑥関数 io_wait_tx_end() の修正
    ・SPI Ch1レジスタの設定

  3)ヘッダーファイル serial_flah.hの修正
    M25P05-AとM25P40の差分を反映させました。
    ・セクタサイズ 0x8000を0x10000に
    ・セクタ数 2を8に

  4)HEWでビルドする。

 4.シリアル・フラッシュROM M25P40(512Kバイト)の接続
   付属SH-2A基板 CN3 Pin 21,22,23,33(SPI Ch1)に M25P40 を接続

 5.HEW モニタプログラムの書き込み。

 6.書き込んだシリアル・フラッシュROMを SPI Ch0に繋ぎ直す。
   付属SH-2A基板 CN3 Pin 36,37,38,40 (SPI Ch0)に M25P40 を接続

 7.外部フラッシュメモリによるブート設定
   付属SH-2A基板  JP16パターンカット

 8.HEWモニタプログラムの動作検証
  1)付属SH-2A基板のデモプログラム
    どうも、フラッシュメモリに書き込んだデータに基板上のシリアル・フラッシュROMと同じLED点滅のデモプログラムが書かれているようで、JPP2ショートで、リセット後に基板上のLEDの点滅が始まる。
    念のため、外付けROMを外すと、動かない(LED点滅しない)
  2)HEWでの確認
    Interface誌のサンプルプログラム SH7262_LED のホルダをコピーし、HEWで若干の変更を行った
    (変更内容 ポートBの20,21,22ピン(bit)にそれぞれLEDを接続し、付属基板上のLEDと交互に点滅させる。)
    ビルドし、ダウンロードし、プログラムの動作を確認しました。

※とりあえず、これで、付属SH-2A基板上のシリアル・フラッシュROM(M25P05-A)が潰れても何とかなりそうです。

---以降 HEW開発メモ---
1.割り込み優先レベル15は使えない。
resetprg.c の #define SR_Init 0x000000F0
を#define SR_Init 0x000000E0に修正する必要 (Interface2010.6 P105 ●ステータスレジスタの初期値設定)
(HEWモニタが割り込みを使用しているため。ユーザープログラムで割り込み優先レベル15は使えない。)

2.セクションの設定
 1)スタックサイズ、スタックポインタ  stacksct.h で設定。 スタックサイズ設定値:H'FA00
スタックポインタの設定ファイル 不明
(HEWでは、[プロジェクト]/[構成の編集]/[スタック]

3.HEWでのアプリケーション開発を、既存のプロジェクトのフォルダをコピーして行う場合。一旦「ダウンロードモジュール」を削除し、再登録しなおしたほうがよい。
 Interface2010.6 第3章「開発ツールHEWの使い方。。。」(P109)での「ダウンロードモジュール」の追加で$(CONFIGDIR)\(PROJECTNAME)を使えば問題ないのですが、どうやら「参照」を使って「ダウンロードモジュール」が設定されていた場合、元フォルダのプログラムをダウンロードすることになります。
 (いくら修正しても”元のまま”ということになります。)

0 件のコメント:

コメントを投稿