USB入門
USBデバイスを作る5
エニュメレーション成功。何とか、辛うじて。
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上のドライバが必要
だ。なので、次はデバイスドライバーを書いてみようと思う。
が、デバイスドライバーを書いた経験は無い。いつもの事だ
が出来るかどうか分からないが、取り敢えずやってみよう。
| 固定リンク | コメント (2) | トラックバック (0)



最近のコメント