ロード トップ 参照元 逆検索 検索 ヘルプ

[logo] 電子工作/USBN9603


SuzTiki:電子工作

USBN9603 というチップは、USB の制御用チップとしてとても有名らしい。 秋月で 600円ぐらい で手に入り入手性が良い。 このチップは、24Mhz のクリスタルが必要。

このチップを PIC や H8 で制御するための情報は あちこちにある。

USB加速度センサマウスのページは H8 使って実際にデバイスを作っている のでとても参考になる。

ほんとうは、ステートマシンで 制御回路を作ってみたかったのだが、 できたとしても、小規模の CPLD には入らないようだ。 ここでは、ステートマシンというのを視野に入れつつ H8/3664 で制御することを 考えてみたい。

実現したい機能は、USB を通して JTAG and/or SPI を扱えるもの。 JTAG でプログラミングした後は ホストとの通信経路にも使いたいので、 JTAG and SPI の 2 チャンネル?

ボードは、秋月の H8/3664(小:1600円)と USBN9603 を DIP に変換したものを C 基板に載せて使うことを考える。

6/30 方針変更

7/4 さらに変更


USBN9603 の詳細を知る。


DMA モード

こんなかんじか。


              +-----------------+
              |                 |
 DRQ ---------+                 +-------------------

~DACK -------------+                           +---------------
                   |                           |
                   +---------------------------+

~RD   -----------------+  +---------------------------
                       | ↑
                       +--

 D7-D0 ------------------<D>---------------------------

 CFGCLK ---------------------_-_-_-_-_-_-_-_-----

 CFGDATA -------------------<><><><><><><><>-----

                  |----------------------------|
                     DMA モード

DMA での転送はもっとも単純。普通は、INTR が立ったら、 (レジスタをみて)イベントを解析して それに対応する 処理を行うことになる。

それに先だって レジスタを読む、レジスタに書くという手順について レジスタは 0x00 から 0x3f まで(64個)

  • レジスタに書く

    なかなか面倒だ。

    結局 大きく4 つの状態にわけて、

                            <-> INIT モード
              IDLE モード   <-> INTR モード
                            <-> DMA モード
    

    というかんじで状態遷移するのがよさそうだ。

    INTR モード

    他にもあると思うけども、最低しなければならないことはこんな感じ?

    Set Adress

    Get Device Descriptor

    初期化

    やるべきことは、

    ぐらい?


    このあたりのコードをみていて linux の /proc/bus/usb/devices の読み方 が少しわかったのでめも。

    ってかんじ。

    ここまでわかるとなおさら疑問がいろいろ出て来るなぁ。

    なんかこんな感じのバランスで設計されている。

    じゃあ、自分で JTAG の デバイスをつくるときはどうしたら良いんだろう?

    シリアルポートそのものにして、データを 送って 、受け取る という 動きをさせれば良いのかなぁ。

    いくら遅くても良いなら、

    という2つぐらいのコマンドがあれば良いような気がする。

    信号線のセットがいくつかあれば良いし、トグルかセットかも 属性にしてしまう。

    さて、これだけで良いのだろうか? JTAG は、ホスト側から一方的に コントロールするだけだが ...なんらかのデバイスをSPI で制御するなら もっと多様な処理が必要だ。

    こういった処理させるのなら、もはや ステートマシンじゃ無理か。

    とにかく、あれだ 汎用 USB シリアル I/O ということにして、 H8 + USBN9603 で作るのをテーマに変更しよう。

    だた、H8 で性能はどうかというのが問題だ。 シリアルから来たデータを処理するのに 0.5M bps でもきついらしい。

    パラレルのデータを扱うが、1 bit づつ処理していくわけだから 0.1M bps も出れば良いほうではないか .. という気がする。

    数Mbps で JTAG なり SPI なりを制御するには、やはり CPLD を使わないと ダメではないか。

    この処理を中心にすえて、それができるように H8の処理なりプロトコルなりを を考えていくことにしよう。

    これだけで、XC9536 では無理そうということが明らかだ。 でも、制御が簡単そうだから XC9572 でできるんじゃないかと思う。
    さて CPLD はどうやって書き込むというと、このチップだけでは無理。 外からプログラミングしてやらないといけない。ただ、H8 使ったときも 条件いっしょだし...
    これで検討してみようかなぁ。
    ちなみにこのチップは、IPI で 800円。


    (最終更新 Thu Mar 30 19:00:30 2006)