Last Update : 2008/Feb/14
SDCC Know How
目的
サンプルコード
Tools
使い方
Know How
お願い
謝辞
<<戻る

    EZ-USB, FX, FX2 は非常にポピュラーです。その理由は USB 経由でファームウェアを流し込むことが出来るので、極めてお手軽に開発することが出来ることにあるのでしょう。ただ、開発そのものはあまりお手軽ではありません。EZ-USBシリーズのデバイスは Cypress が製造・販売しています。Cypress のEZ-USBシリーズの開発キットのサンプルファームウェアの開発には Keil社の 8051 のコンパイラが利用されています。開発キットには試用版のコンパイラが付属しています。ただ、この試用版コンパイラはファームウェアはサイズが 4KB の制限があります。


  • 目的

     商用版のコンパイラがある一方で、フリーのコンパイラもあります。SDCC はその代表的なもので、8051 に限らず最近では PIC などにも利用されています。当然、EZ-USB シリーズのコントローラは 8051 なので開発には SDCC が利用できます。ただ、Cypressから提供されている USB 実現のためのフレームワークはそれなりに大きいので、ポートするのが大変でした。また、各個人がやる場合は「車輪の再発明」に陥りがちです。

     FX2の開発をWEBで公開されている fenrir 氏がサンプルコードを公開してくれたおかげで自由に使えるようになりました。また、その掲示板でのやりとりは開発の際のトラブル解消方法を共有することが出来ました。

     この手のプログラムは一度動作してしまえば、あとは少しずつ改造・拡張が出来ますが動かすまでが本当に大変です。本稿ではその動かすまでの時間を極力短縮して、あまった時間を本来の開発に使いたいと考えています。


  • サンプルコード

    注意
     下記のサンプルコードは bulkloop のポートを元に行いました。リナムレーションまでの動作確認しか出来ていないものもありますので、各自で十分にテストを行ったうえでご利用ください。なお、SDCCは 2.7.0 を使っています。

    • FX2

       オプティマイズからリリースされているFX2のキットのためのサンプルプログラムです。このFX2のキットは価格も手ごろで非常に使いやすいのです。

      • bulkloop

        最も基本的なサンプルプログラムです。これを改造されて自作の機器に使われている方も多いと思います。

      • FX2FW

        先のボードをリリースしているオプティマイズが提供しているファームウェアのサンプルコードです。 少し高速なアプリケーションになると、こちらのサンプルを使う方も多いかもしれません。GPIF/FIFO を使う際には福音になるでしょう。

      • tcxmaster

        FX2 の単体での TS キャプチャのファームウェアです。

    • カメレオンFX2

      カメレオンUSBは非常に便利なツールでしたがやはりUSB2.0で使いたいものです。その声に答えてリリースされたかどうか定かではありませんが、非常に使いやすいボードが出ました。それがカメレオンFX2です。

      • spd_chk

        オプティマイズがリリースしているこちらのアプリケーションの SDCC へのポートになります。Keil コンパイラで生成されたオリジナルのファームウェアを SDCC で生成した本ファームウェアにリプレースすることにより、ファームウェアが転送速度にどのように影響を及ぼすかを調べることが出来ます。

      • cap_sts

        カメUSBのキラーアプリケーションがロジアナだったとすると、カメFX2のキラーアプリケーションはこれでないかと考えています。このファームウェアに限り、開発者に簡単なテストをしてもらいました。

    • ファイルのダウンロード

      ここからダウンロードしてください。


  • Tools

    • Cypress EZ-USB 開発キット

      Cypress 社が提供している EZ-USB FX2 用の開発キットです。開発を行う前にこちらをダウンロードして、インストールしておくとドライバのインストールのときにトラブルが少なくてすみます。詳しいインストールはこちらを参照してください。

    • SDCC

      SDCC はフリーのコンパイラです。ここから各プラットフォーム対応のものをダウンロードできます。インストーラが付いている Windows 用のものがお手軽で便利です。UNIX系の環境でしたら、ソースコードからも簡単にビルドして利用することが出来ます。

    • make

      UNIX 環境で動作させている場合は特にインストールの必要はないと思います。Windowsでの開発の場合は、gmake を探してきてインストールする必要があります。Windows単体で動作するものがよいでしょう。こちらのブログが参考になります。

    • バイナリ変換ツール

      ファームウェアはインテルヘックスで出力されるます。バイナリに変換するとアプリケーションコードの読み取りが楽になりますので、非常に便利ですし、容量も小さく出来ます。バイナリ変換には環境に合わせて下記のツールを使います。

      • Windows

        Cypress のツールと一緒にインストールされる Hex2Bix を使います。

      • UNIX 系 OS

        UNIX 系の OS では objcopy を使います。

        どちらのツールも make からの呼び出しで起動するようにパスが通っているかどうかは最低限、確認しておいてください。make から呼び出されますので、通常は特に意識しなくても使えると思います。

    • バイナリ→Cソースコード変換ツール

      以前のバージョンの Cypress のツールであったように記憶していますが、最近のツールでは含まれていないようです。ファームウェアとホストソフトウェアを一体化して配布したい時に非常に役立つツールです。

      • Windows

        コンパイル環境が標準ではないので、バイナリを準備しました。

      • UNIX 系 OS

        UNIX 系 OS ではコンパイル環境が整備されていることが多いので、ソースコードをダウンロードして各自コンパイルしてご利用ください。

      • 使い方
        1. firm.c の作成

          hex2bin で finename.bix を作成しておき、bin2c のパスを通した上で下記のコマンドを入力してください。

          bin2c filename.bix

          カレントディレクトリ上に firm.c が出来上がります。

        2. ホストソフトウェアへの組み込み

          ホストソフトウェアは以下のようにして組み込みます。

           
           extern unsigned char firmware[] =
           #include "firmware.c"
           
           
          この配列を FX2 のファームウェア転送コマンドで転送すれば OK です。


    • 使い方

      1. ファイルの展開

        ダウンロードして、適当なディレクトリに展開します。

         
      2. ライブラリの構築

        ファームウェアのビルドに先立ち、ライブラリを構築します。   

           
        • lib に移動します。  
        • ビルドします。(下記参照)  

      3. ファームウェアのビルド

        • Windows  

             copy Makefile.windows Makefile [Enter]
             make [Enter]
             

           
        • UNIX 系 OS  

               cp Makefile.unix Makefile [Enter]
               make [Enter]
               

      4. ファームウェアのダウンロード
        • Windows

          インストールした Cypress のツール、CyConsole EZ-USB からダウンロードします。

        • UNIX 系 OS

          ツール構築中


    • Know How

      • リナミュレーションがうまくいかない

        →Device Descriptor のアライメントがずれている(偶数番地から始める必要があります)場合があります。fw.c 中の最後にある void resume_isr(void) interrupt WKUP_VECT をいじくるとうまくいく場合があります。

         fw.c
         void resume_isr(void) interrupt WKUP_VECT
         {
            EZUSB_CLEAR_RSMIRQ();
        
            // alignment end of fw.c
            _asm;
            .even
         //   nop; // comment out this if needed
            _endasm; 
         }
        
         
        この nop をそのままにしたり、コメントアウトしたりしてアライメントを調整します。


    • お願い

         
      • 開発者の皆様  

        • トラブル対応

          開発は緒に就いたばかりなので、予期せぬトラブルがあるかもしれません。なにか問題点がありましたら、掲示板に書き込んでください。そちらの内容も反映させたいと思います。

        • 今後

           SDCCでのファームウェア開発なら容量いっぱいまで使えると思いますので、雑誌付録のFPGA ボードなどとの組み合わせでさらに強力なものが出来ると思います。実際にやられている方もいらっしゃいますね。

         
      • オプティマイズ

         このキットBコネクタが標準タイプなのが難点です。ミニBコネクタも取り付けられるように切に希望します。


    • 謝辞

      先達に感謝します。

         
      • fenrir氏

        Keil コンパイルから SDCC へのベースポーティング

      • オプティマイズ

        キット、サンプルプログラムの提供

      • myst

        Windows 用 Makefile のアドバイス

      • K.K.

        bin2c の制作と寄贈


頁の先頭
織田裕一へメール


Copyright (C) 1998 - 2008 TeamKNOx