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)を使えば問題ないのですが、どうやら「参照」を使って「ダウンロードモジュール」が設定されていた場合、元フォルダのプログラムをダウンロードすることになります。
(いくら修正しても”元のまま”ということになります。)
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿