« USB入門 | トップページ | USB入門 »

2006年10月27日 (金)

USB入門

USBデバイスを作る2

ちょっとだけUSBに対する知識を得ることが出来たので、AVRで
実験をしてみる。
USB2.0では3種類のデータ転送スピードがあり、ハイスピード/
フルスピード/ロースピードというふうに区別されていて、それぞれ
の転送スピードは480Mbps/12Mbps/1.5Mbpsと規定されている。
当然AVRを使ってソフトウェアだけで送受信出来る可能性のある
転送スピードはロースピード/1.5Mbpsに限られる。
そこで、ロースピードで送られてくるデータをAVRで受信して見る
事にする。

USBポートには4個の端子が在って、そのうち1本は5Vを供給する
事が出来るVBusで1本がグランド。残りの2本がデータを送受信する
為に使用するD+とD-という信号線になっている。ロースピードで信号
を送受信する為にはD-をプルアップすればいいらしい。
USBホスト側(つまりPC側)はD-がプルアップされているデバイスが
接続されると自動的にロースピードデバイスとして認識する。
そこで、小さく切った基板にUSBコネクタを配置し、D-側をプルアップ
して見た。

Usb02 

 

 

 

 

 

 

これをブレッドボード上のATMega88に接続する。他にAVRのTxD
とRxDにAMD3202を繋ぎRS232Cを経由してPC上でAVRをモニタ
する事にする。

USBホスト側では、USBポートにデバイスが接続されると、まずバス
リセットを行い、それからその接続されたデバイスが何物であるかを
知る為に、そのデバイスを定義しているディスクリプタを要求する。
この動作をエニュメレーションと呼ぶ。また、USBホストとデバイス間
ではパケットを送受信して通信を確立する。そこで、エニュメーレー
ション時にホスト側から送られてくるパケットをAVRで受信してみる。

1.5MHzのタイミングでUSBのD-を読むプログラムを書いて、パケット
を受信すると、

0x4E 0x55 0xA5
0x14 0xD5 0xA8 0xAA 0x55 0x55 0x55 0x95 x0AA 0xE1 0x26

というパケットを数組受信した。これはNRZIという方式で符号化され
ているので、この受信したパケットを復号すると。

0x2D 0x00 0x10
0xC3 0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 0xDD 0x94

になり、これはホストがそのデバイスを定義するデバイスディスク
リプタを要求するパケットであることが解る。なんとか、書き上げ
たパケットの受信部は無事動作しているようだ。

|

« USB入門 | トップページ | USB入門 »

コメント

この記事へのコメントは終了しました。

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/180469/12452502

この記事へのトラックバック一覧です: USB入門:

« USB入門 | トップページ | USB入門 »