2012/05/27

USBのEnumeration (1)

LPC2388のUSB Host機能を使おうとしている。
USBメモリはサンプル通りにやって使えたのだが、何が行われて動いているのか全然わかっていない。
LPC2388などのUSB Hostサンプルは、NXPが公開している。
私は楽をしたいので、Interface誌の記事をそのまま使った。

Host_EnumDev()を呼んで、MS_Init()を呼んで、FAT_Init()を呼ぶと、USBメモリが使えるようになっている。
MS_Init()は、MassStorageクラスの初期化だろう。
FAT_Init()は、ファイルシステムの初期化だろう。
Host_EnumDev()がUSB Host機能の初期化部分なので、ここだけ把握しておけば何とかなるんじゃなかろうか。



EnumDev、とあるので、これが「USB Enumeration」というやつだろう。
カタカナだと「エニュメレーション」らしい(Googleは、まず入力した通りに検索してくれないものかね)。
確かに、Tech Villageのサイトに書かれている順番でやっているのだけど、もうちょっと詳細が知りたい。
そういうときは、元資料を探さねば。
http://www.usb.org/developers/docs/
USB.orgのドキュメントページから、USB2.0の仕様書をダウンロード。
(仕様書はときどき更新されているのか、私が昔ダウンロードしたものとファイル名が変わっていた。)
この中の「usb_20.pdf」が基本資料になっている。
私が知りたいことは、9章に書かれていた。



まず、Stateという概念がある。
Attached、Powered、Default、Address、ConfiguredとSuspendedの6つ。
9.1.2節が、Bus Enumerationの説明だ。
USB機器を挿すと、AttachedからPoweredになり、Default、Addressを経由して、ConfiguredまでいくとUSB機器として使えるようになる、ということらしい。
このStateを順番に回すから、enumeration、なのかな。

でも・・・Tech Villageに書いてあることとそんなに変わらない。
私が知りたいことは、もうちょっと実装レベルのことだ。
一番わかりやすかったのは、PICでなんか作るばい、というページ。
たしかに、こういう実装になっているのだ。
初回のGET_DESCRIPTORが8byteしか読んでいないので、気になっていたのだが、そういうものらしい。
では、気にせずこのままいくとしよう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。