USB HUB デモシステムの製作 2013.5.12

    [Japanes][English]

    1.概 要

     先に公開したUSBのHUBドライバーを内蔵したUSBホストモジュールを使ったデモシステムを作成したので紹介する。

    デモシステム構築に使った
    PIC32MX基板SBDBT32

     デモシステムの構築には、ランニングエレクトロニクス社から 販売されている 「SBDBT32」基板を使った。

     この基板には、PIC32MX695F512H が搭載されており、USBのAコネクタが付属しているので、USBのホスト システムを作成するのに便利な基板である。外部インタフェースも、プログラマーの接続とRS232Cのみの10ピンとシンプルである。

     これに、USB2.0仕様のセルフパワーの4ポートHUBを接続し、UVCクラスのWebカメラ、Wheel付きのマウス、USBメモリディスクを接続する。

     デモシステムを動かすには、更に、RS232Cにより、SBDBT32 と Windowsパソコンとを接続する。パソコン上では、ハイパーターミナルまたはテラタームを 115.2Kbpsで動かしておく。

     デモシステムでは、マウスの動作確認やUSBメモリ内のファイルの操作、さらに、Webカメラからの画像をUSBメモリに書き込んだり出来る。


    2.動かし方

    2−1.デモシステムの構築

     以下のプロジェクトファイルをダウンロードし、MPLAB IDE にてコンパイルした後、Pickit3 などのプログラマーを使って、出来上がったバイナリ(HEXファイル)を、 SBDBT32 に書き込む。

     デモシステムの動作では、プログラム内で、malloc() 関数によるメモリ確保を随所で行っているので、MPLAB のリンカオプションの Heap Size の指定が必要だ。 今回は、右に示したような設定で動かしている。

     ちなみに、Heap Size を 15,360 バイトに設定したら、カメラ画像のメモリディスクへの書き込み途中でメモリ不足となり動作不安定となった。

     なお、SBDBT32のブートローダーでは書き込むことが出来ないし、一旦、このデモシステムを書き込むとブートローダーは使えなくなるので、心して対処して頂きたい。

     SBDBT32への書き込み方法など、詳細については、ランニングエレクトロニクスの サポートページを参照して欲しい。




     主なプログラムファイルは、次のとおりである。

      ソースファイル説 明
      main.cデモプログラム
      usb_config.cUSBシステム設定
      usb_host.cHUBドライバー内蔵USBホストドライバー
      usb_host_hid.cHIDドライバー
      usb_host_hid_parser.c
      usb_host_msd.cMSDドライバー
      usb_host_msd_scsi.c
      usb_host_uvc.cUVCドライバー
      usb_mouse.cmouseドライバー
      FSIO.cFATファイルシステム


    2−2.デモシステムの起動とデバイスの接続

    メモリ(カードリーダー)とカメラとマウスを
    HUBを使ってPICに接続
    パソコンのターミナルから操作

     デモシステムが書き込まれたSBDBT32とパソコンを接続し、SBDBT32に+5Vの電源を供給するとデモシステムが起動する。 パソコンのターミナルに、次のようなメッセージが表示されれば起動成功である。

      *** USB multiple device accessing demo program *****
       wait for webcamera & mouse & memory disk attached.


    次に、SBDBT32のUSBポートにHUBを接続する。HUBを接続しただけでは、画面表示は何も変わらないが、続けて、HUBのポート1にマウスを接続すると、 次のようなメッセージが出力される。

      mouse attached.
       address=2

     ここで、マウスを一旦外して、その後、マウスをHUBのポート4に繋ぎ変えると、次のようなメッセージが出力される。

      mouse detached.
      mouse attached.
       address=5

     以下続けて、USBメモリをHUBのポート1に、UVCクラスのWebカメラをHUBのポート3に接続すると、次のようなメッセージが出力され、デモシステムが操作出来るようになる。

      memory disk atached.
       address=2
      camera atached.
       address=4

      *** Demonstration program Menu *********************
      m:Mouse read test.
      d:Memory disk test.
      v:List camera control current value.(Wheel Button)
      i:List camera supported image format and image resolution.(Left Button)
      c:Capture camera image data and write it to memory disk.(Right Button)
      =>


     今回の紹介では、上記のような接続としたが、実際には、カメラ、マウス、メモリは、HUBのどのポートに接続してもよい。ただし、3つのデバイスが接続されないと、 デモシステムの操作は出来ないようにプログラムしている。


    2−3.デモシステムの操作

     以下の操作メニューに従って操作する。

      *** Demonstration program Menu *********************
      m:Mouse read test.
      d:Memory disk test.
      v:List camera control current value.(Wheel Button)
      i:List camera supported image format and image resolution.(Left Button)
      c:Capture camera image data and write it to memory disk.(Right Button)
      =>

     キーボードをタイプして、m を入力すると、マウスのテストを行うことが出来る。また、d を入力すると、 USBメモリ内のファイル操作を行うことができる。


    2−3−1.マウスの動作テスト

     マウスのテストでは、マウスのボタンの状態を画面に表示する。m を入力した後、手元のマウスの ボタンを押したり離したり、左右前後にぐるぐる動かすと、画面に次のようなメッセージが表示される。何かキーをタイプすれば、操作メニューに戻ることができる。

      left button on.
      right button on.
      wheel button on.
      move to up.
      move to down.
      move to right.
      move to left.
      move to right up.
      move to right down.
      move to left up.
      move to left down.
      wheel up.
      wheel down.


    2−3−2.メモリディスクのファイル操作

     操作メニューにて、d を入力すると、ファイル操作のためのサブメニューが、次のように表示される。

      *** Memory Disk Test Menu ************************
      m: make the directory in current directory.
      r: delete the directory in current directory.
      c: change the current directory.
      l: list file in current directory.
      w: text write to a file.
      t: read text from a file.
      v: file binary dump.
      d: delete the file.
      f: format a memory disk.
      q: quit and return to main menu.
      =>

     特に説明するまでも無い内容である。動かして試して見て欲しい。なお、ファイル名は、ロングファイル名はサポートせず、8.3形式に限定している。大文字、小文字の区別もなく、ファイル名は、全て大文字となる。 必要なら、システムを再構築して欲しい。

     q を入力すれば、操作メニューに戻ることが出来る。


    2−3−3.カメラの操作

     次に、以下のWebカメラに関する操作について説明する。

      v:List camera control current value.(Wheel Button)
      i:List camera supported image format and image resolution.(Left Button)
      c:Capture camera image data and write it to memory disk.(Right Button)

     カメラに関する操作の選択については、キーのタイプの他、マウスのボタンでもできるようになっている。

     v を入力するか、マウスのWheelボタンを押すと、カメラのコントラストなどの現在値、最小値、最大値 が表示される。

      Exposure Time(Absolute):
        Cur 338
        Min 1
        Max 10000
      Input Select:
        Cur 0
      Brightness:
        Cur 128
        Min 0
        Max 255
      Contrast:
        Cur 32
        Min 0
        Max 255
      Saturation:
        Cur 32
        Min 0
        Max 255


    i を入力するか、マウスの左ボタンを押すと、カメラがサポートする画像フォーマットとリゾリューションの一覧が表示される。

      Supported Format (Number is 1): YUY2
       Resolution:
        160x120 176x144
      Supported Format (Number is 2): MJPEG
       Resolution:
        640x480  160x120  176x144
        320x176  320x240  352x288
        432x240  544x288  640x360
        752x416  800x448  800x600


    c を入力するか、マウスの右ボタンを押すと、カメラから画像データの取得を開始し、1フレームの画像データを取得する毎に、 メモリディスクに、その画像データを書き込む。

     画像データの取得ならびに書き込み中は、SBDBT32基板のLEDが点滅する。何かキーをタイプするか、マウスのボタンを押しておくと、 データ取得を停止し、操作メニューに戻る。

     動作中の画面表示は、次のようになる。

      Capture image format is MJPEG and resolution is 640x480.
      Capture Start!

      何かキーをタイプまたはマウスのボタンを押すと
      Capture Stop!

     取得画像フォーマットは、MJPEG のみとしており、MJPEG フォーマットをサポートしないカメラでは、次のようなエラーメッセージを表示する。

     Can't capture image, This camera doesn't support MJPEG image format.

    また、デフォルトのリゾリューションは、640x480としている。


    (画像の確認)

     USBメモリに書き込まれた画像データは、CAPTURE.DAT という名前のファイルに格納されている。このファイルに格納されたMJPEG画像は、 ランニングエレクトロニクスのSBDBT32のサポートページで紹介されている Windows用プレイヤー「MJPEGPlayerForUVC.exe」を使ってパソコン上で確認できる。

    C525で撮った風景
    CAPTURE.avi(189MB)

     なお、USBメモリへの画像データの書き込みは、64バイトパケットのバルク転送で行っていることと、採用したファイルシステム(microchipのFSIO.c)の 処理が遅く、1フレームの画像データの書き込みに約350msecの時間を要しており、結果として、USBメモリに書き込まれた画像は、 3fps程度の動画像となっている。

     そのため、30fps で動画再生するように作られている MJPEGPlayerForUVC.exe で再生すると、およそ10倍ほどの高速で再生される。

     このプレイヤーは、AVIファイルの出力も出来る優れものだ。ロジクールのWebカメラ「C525」を使って、自宅の窓から撮ったものを右に掲載しておく。 高速再生されているのが判るかと思う。



    3.最後に

     以上、HUBを使って、PICマイコンに複数のUSBデバイスを接続する例を紹介した。PICのUSBは、フルスピードであり、余り高速な処理を行わせるには 無理があるが、処理速度の許される範囲であれば、本例のように複数のデバイスを同時に接続して制御できる。各自で色々と面白い電子工作に挑戦されて見てはと思う。