2010年5月16日日曜日

SH-2A基板 「ROM化ユーザ・プログラム書き込み用プログラム」を試しました。 (その2)

「ROM化ユーザ・プログラム書き込み用プログラム(以降 SPIwreterUserDI)」により、いままで作成した、付属SH-2A基板 自作テストプログラムの書き込みを行いました。

◎自作テストプログラムのROM化対応について。
 ○ SPIwreterUserDIのドキュメント(README.TXT)で指示されているROM化作業
  (「付属SH-2A基板特設ページ」
   /「付属SH-2A基板関連のダウンロード・データ」
    /「ROM化ユーザ・プログラム書き込み用プログラムをアップロードしました」
   から入手した SPIwriteUser.zip >> CQ Connect) 

  ・出力ファイルをバイナリに変更
   [ビルド]/[SuperH RISC engine Standard toolchain]
    [最適化リンカ]/[出力]で  「バイナリ」を選択
  ・vecttbl.cの修正
   割り込みベクタテーブル(INT_Vectors[])
    // 8 Reserved
   (void*) Dummy, を (void*) RESET_Vectors, に修正

 ○ Interface_Sample2のドキュメント(README.TXT)で指示されているROM化作業
  (「付属SH-2A基板特設ページ」
   /「付属SH-2A基板関連のダウンロード・データ」
    /「タイマ割り込みLED点滅制御サンプル・プログラムの改定版を用意しました」
   から入手した Interface_Sample2.zip) 

  ・resetprg.c で レジスタバンクの初期化処理を追加
    #include  "typedefine.h" を #include  "iodefine.h" に置き換える。

   INTC.IBNR.WORD = 0x4000; を set_fpscr(FPSCR_Init); と  _INITSCT();の間に追加する。


◎自作テストプログラムのROM化 結果
 ・GPIOテストプログラム(ほぼサンプルプログラム)
   動作:  4つのLEDを交互に点滅
   サイズ: 6912バイト
   ==> 成功
 ・モノクロLCDテストプログラム
   動作: LCD SG12864 の 表示 (自作フォント表示)
   サイズ: 33260バイト
   ==> 成功/失敗 (単純にROM書き込みを繰り返すのですが。成功したり、失敗したり。稼動までに異常に時間がかかったり。。。。)
 ・キー入力+モノクロLCD テストプログラム
   動作: LCD SG12864 の 表示 (自作フォント表示)
       キー入力により、表示文字を変化させる。
   サイズ: 33988バイト
   ==> ほとんど失敗 10回の試行中 成功2回、成功の場合も一旦USBケーブルを外すと動作せ
ず。


まだ、Interface誌の付属SH-2A基板関連の公開情報(本誌、およびダウンロードファイル)の読み落としがあるのでしょう。あとは、暇をみて、ぼちぼちと。。。。。


******************

最後に jujurouさんのコメントに感謝します。

4 件のコメント:

  1. 「モノクロLCDテストプログラム」「キー入力+モノクロLCDテストプログラム」共に32KByte(32768Byte)を超えてます。README.TXTでは後半32KByteと書いてあるので、ブート・ローダが32KByteまでしか転送してくれないのではないでしょうか?

    自分のプログラムがなかなか進まないのにデシャバッてすみません。
    明日は我が身と思い、つい解析してしまうのです…。

    返信削除
  2. juj*r*u さん コメントありがとうございます。

    はい、仰るとおり、以下の方法で対処しています。

    SPIwreterUserDIのソースの内、
     ・serial_flash.h のセクタサイズ、セクタ数を書き換える。(M25P40用に) 
     ・main.c main()内の、シリアルフラッシュROM 転送関数 write_prog_data(一部改)で転送サイズを480KBに拡張する。
    (おかげで、書き込み時間がかかってしまっています。)

    今回の付属SH-2A基板、十分に活用できたら、私にとって強力なアイテムとなると思っています。

    お互いに知恵を出しながら、この基板を攻略していけたらと思います。

    返信削除
  3. SPIwreterUserDIはあくまでもシリアルFlashへ書き込むためのソースコードなので、その部分ではないです。

    公開されていないブートローダ側の転送サイズの事です。
    リセットスタート後、高速RAMへブートローダが転送され、実行、このブートローダがシリアルFlashのユーザ領域の内容をRAMへ転送するのだと思いますが、このサイズが32KByte固定になっているのではないかと思ってます。

    何処かにブートローダが転送するサイズを指定する場所があったか、今、手元に資料がないので後で確認してみます。

    返信削除
  4. juj*r*u さん、更なるご指摘ありがとうございます。

     なるほど、ブートローダーの縛りがある可能性があるということですね!
     
     自分に都合よく、Interface誌の記事等を読んでいたようで、ご指摘の可能性について思い至らなかったようです。

    今後とも、ご教示いただけたらと幸いと思います。

    返信削除