SSブログ

簡単ファイルシステム評価ボード ALFATを使ってみよう! 其の七 [ALFAT]

※注意!
これからこのブログを書きながら最終的なハードウエアデバック、アプリケーションソフトウエアの構築に入ります。なので、写真や文章と実際の製品では異なる部分が出る可能性が有ります。その点をご了承下さい。

動作確認編4


前回まではシリアル通信のプログラミングを行い、ALFATのコマンドラインインタフェースへアクセスする野望への第一歩を踏み出しました。

今回はH8のI2C機能を有効とし、ALFATとの簡単な通信を行って、ALFATチップにファームウエアのインストールまでを行ってみたいと思います。



ALFATはH8に外付けされる周辺機能デバイスなので、H8とALFAT間で幾つかの信号線を接続する必要が有ります。具体的には

  • I2Cの信号線であるSDA(H8のP56)、SCL(H8のP57)
  • ALFAT側のデータが準備できた事を示すDATARDY、これはH8の割り込み(P14/IRQ0)に接続。負論理。
  • ALFATがアクセスできない状態である事を示すBUSY(H8のP12)。負論理。
  • ALFATをリセットするALFAT_RES(H8のP20)。負論理。
  • です。 I2Cの使い方の詳細は省きます。説明すると長いですから。
    ルネサスにはH8のI2Cの使い方のアプリケーションノートが公開されていますので、これを参考にしてください。
    IOポート等の初期化完了後、I2Cバスを有効にする初期化を行い、H8をI2CバスマスタにしてALFATに対してアクセスして行きます。この時、ALFATのデバイスIDは0xA4となります。
    初期状態のALFATチップにはブートローダーのみ書かれておりファームウエアは書かれていないので、まず初期化済みのSD/MMCカードに、ルートディレクトリにファームウエアのファイルだけを入れた状態で用意しておきます。 ALFATチップのファームウエアはGHI社のサイトからダウンロードしてください。

    電源を落とした状態で上記SD/MMCカードをソケットに挿し、電源を投入し、デバックモニタにALFATのコマンドラインインタフェースを中継するのみのプログラムを転送し、GOコマンドで実行させます。以下がその時のログです。途中は省いています。
    L
      Top Address=E800
      End Address=F881
    : G
    BL  ←ブートローダーの起動。実際には表示されていない
    LQUA  ←HTERMのコンソールからタイプしたファームウエアをロードするコマンド
    W00  ←読み込み開始
    W01
     ・
     ・
     ・
    W92
    W93
    ER 00  ←正常終了
    R  ←HTERMのコンソールからタイプしたファームウエアの実行コマンド
     GHI Electronics, LLC
    ----------------------
        ALFAT(TM) 3.18  ←ファームウエアバージョンの表示
    Z:>A:  ←HTERMのコンソールからタイプしたドライブの切り替え
    
    A:>LF  ←DIRコマンドと同じ(List Fileの略?)
    
    ALFATFWR.GHI  0x00012630 75312  ←ファームウエアファイル
    A:
    
    SD/MMCカードのドライブ番号はAドライブとなります。ユーザーインタフェースは、省略形式のDOSコマンドイメージです。簡単なコマンドだけなので、すぐに使えるようになります。
    今回使用したmainプログラムの一部
      /*SCI3の初期化 38400bpsに設定する。*/
      SCI3Init( 15 );
      /*I2Cの初期化*/
      I2CInit();
      /*ALFATのリセット*/
      cmd_w( alfat_reset );
      /*BOOT LOADERの起動待ち*/
      do { I2CMasterGetc( ALFAT_ADR, &rcv_data );} while( rcv_data != 'B' );
      do { I2CMasterGetc( ALFAT_ADR, &rcv_data );} while( rcv_data != 'L' );
    
      while( 1 )
      {
        if( (c = SCI3Getc()) != EOF )
        {
          if( c == '\r' ) SCI3Puts( "\r\n" );
          else SCI3Putc( c );
          I2CMasterPutc( ALFAT_ADR, c );
        }
    
        if( DATA_RDY == 0 )
        {
          while( DATA_RDY == 0 )
          {
            I2CMasterGetc( ALFAT_ADR, &rcv_data );
            SCI3Putc( rcv_data );
            if( rcv_data == '\r' ) SCI3Putc( '\n' );
          }
          I2CMasterGetc( ALFAT_ADR, &rcv_data );
          SCI3Putc( rcv_data );
        }
      }
    

    nice!(0)  コメント(0)  トラックバック(0) 

    nice! 0

    コメント 0

    コメントを書く

    お名前:[必須]
    URL:
    コメント:
    画像認証:
    下の画像に表示されている文字を入力してください。

    ※ブログオーナーが承認したコメントのみ表示されます。

    トラックバック 0

    この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。