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

2006年12月21日 (木)

USB入門

USBデバイスを作る5

Usb03

 

 

 

エニュメレーション成功。何とか、辛うじて。

AVRでUSBデバイスを作ろうとしてから2月、やっとPCから
USBデバイスとして認識させる事が出来た。
USBの場合電気的なインターフェイス/プロトコルを実装し
ても、その上層のUSBプロトコルを実装しない限りPCとの
通信は出来ない。

いやぁ、悩ませて貰いました。

ハマッた所

  標準デバイスリクエストのSET_ADDRESを受け取っ
  ても、すぐにアドレスを変更してはいけない。
            ↓
  その後に続くシェイクハンド用入力指示PIDを受信
  出来なくなる。

  CRCの計算はハードウェア計算回路をエミュレート
  する。
            ↓
  良く見ると一般的なCRC計算とちょっと違う。

  GET_DESCRIPTORの前に大量の入力指示PIDを受信
  しても驚かない。
            ↓
  それは、同じロースピードデバイスであるマウスや
  キーボードの為のもの。ちゃんと自アドレスに向け
  てのパケットか確認する。

  バッファが空いているからといって、むやみにデータ
  パケットを受信し、ACKを勝手に返してはいけない。
            ↓
  データパケットはシェイクハンドにも用いられるので、
  得られるはずのデータパケットを受け損なう可能性大。

ほかにも色々あったが、どれもきちんとUSBプロトコルを
理解していないのが一番の原因だった。

時間は掛かったがなんとか動いた。よかった。
やって見れば出来るもんだと、一人で勝手に感動。

しかしAVRって凄い。20MHzのセラロックと抵抗3本だけで、
USBデバイスが出来るかもしれない。しかも、リアルタイムに
データをNRZI変調して送信。受信側もNRZIから復号しながら
データを取り込む(挿入ビットの削除までは出来なかった)
事が出来だけのパワーを持っている。PICでは無理だ。

さて、USBデバイスとして認識させることは出来たが、これだ
けではPCと任意の通信はできない。PC上のドライバが必要
だ。なので、次はデバイスドライバーを書いてみようと思う。
が、デバイスドライバーを書いた経験は無い。いつもの事だ
が出来るかどうか分からないが、取り敢えずやってみよう。

|

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

コメント

Morosanさん、さすがです。
自前でUSBコントローラを作成する試みは他でも
見ていますが、実際に自分でやってみようという
気にはなりませんでした。

 Windowsに標準で組み込まれているドライバに
対応した(HID?)仕様を実現すれば、何らかの
応用は出来そうですが、簡単には行きませんね。

 こういった形でI/Fが書けるなら、USBもTCP/
IPのプライベートアドレスのように、誰でも
私的に使える仕組みを盛り込んでいて欲しか
ったと思いますね。

投稿: senshu | 2006年12月23日 (土) 20時24分

senshuさん、
度々のコメントありがとうございます。

酷く返信が遅れました。申し訳ありません。
少し身辺付近がごたごたしてましたので。

また、少しずつ当ブログの記事を書き始め
たいと思います。もし、まだ当ブログを
ご覧になっていて、気付くことがあれば
コメント下さい。

宜しくお願い致します。

投稿: Morosan | 2007年4月22日 (日) 21時36分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

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

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

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