標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第423回]
●HIDについての疑問点
この週末の3日ほどの間、更新できませんでした。
週末だからといって、遊んでいたわけではありません。
レジャーなど夢のような話で、相変わらず、ずっとUSBと格闘しておりました。
前回、もうわかってしまったようなことを書きましたが、またまたカベにぶつかってしまいました。
WriteFileがうまくいったので、ReadFileも楽勝、と思ったのですけれど、なかなかそうは問屋が卸してくれません。
送信はいいのですがどういうわけか受信は全くだめ、どうやってもread errorになってしまいます。
ま、しかし、このカベもあと1週間ほどもうんうんうなりながら格闘していましたら、きっと崩壊すると思います。
ReadFileについては、ちょっと置くとしまして、送信についても、まだいろいろ疑問が残っています。
HIDについて前回、前々回に書いたことについても、はて?とよくよく考えてみると、はっきりウラを取ったわけではありませんでした。
書いたときにはそれほど気にもしないで書いてしまうのですけれど、あとになってから、だんだんと気になってきたりします。
本当にそうなのか?
いやあ、一度気になると、もう放っておけなくなってしまって、適当にしておけばよいことでも、つい掘り下げていってしまいます。
何がそんなに気になったかといいますと。
まずは第一に、HIDでは1パケットあたり8バイトまたは64バイトしか入れられない、と書きましたが、それは本当なのか?
次に、HIDでは1フレームあたり、データパケットは1パケットしか置けない、と書きましたが、それは本当か?
正直なところ、要は通信できればよいので、そういうこまかいところはどうでもよいことなのですが、この際、できればはっきりしておきたい、と思ってしまいました(やめておけばよいのに…)。
で、インターネットで検索してみたのですけれど、いまいちはっきりしないのですねえ。
確かに、
HIDの場合、1パケットのデータバイト数は、フルスピードでは64バイト、ロースピードでは8バイトである、
と断定しているサイトも2〜3みつかりましたが、その根拠はあきらかではありません。
●USB.ORG
で、ついにUSBの総本山にお参りすることになってしまいました。
USBオフィシャルサイト(http://www.usb.org/home)です。
このサイトのDevelopersのページに、Documentがどっさりあります。
あんまりたくさん有りすぎて、こんなにたくさん読みきれないよぉ。
なんだかわからないけれど、関係のありそうなものを適当にDownloadして、つまみ読みをしながら、さぐりをいれてみました。
まずは、PDF Document HID1_11.pdf(Device Class Definition for Human Interface Devices)です。
こいつは90ページほどのドキュメントで、Report Descriptorについての詳細が主な内容です。
Report Descriptorについては、数字コードの羅列で、なんじゃもんじゃ、という感じだったのですが、その意味するところは多少わかってきたように思います(あくまで多少ですけれど…)。
で、このDocumentを前から順に読んでいきましたら、よよよっ、ヒントになりそうなことが書いてあるページをみつけてしまいました。
Universal Serial Bus Specification のChapter 5を読め、というご託宣です。
さて、そんなものはどこにあるのだろう?
またまたサイトの中を捜し回りました。
とにかくDocumentだらけでよくわかりません。
捜し回った挙句、Developers→Documentのトップで紹介されているUSB2.0 Specificationというのが怪しい、と思ってDownloadしてみました(なんとzipで10.9MBもあるんですよぉ)。
でも、ビンゴ!でした。
解凍するとどっさりPDFが入っています。
そこに、お目当てのUniversal Serial Bus Specificationがありました。
ふえええー。
なんと650ページ!
Chapter1からChapter11まであります。
おお、ここにあるのが、かの有名な、Chapter9なのですね!
のちほどゆっくり読んでみましょうか(うう。たまらん)。
それはとりあえず置くとして、とにかくChapter5を読まなくては。
ううむ。
読んではみたのですけれど、パケットサイズに関して、わかったことと言えば、interrupt転送についてはロースピードでは8バイト以内、フルスピードでは64バイト以内ということだけでした。
インタラプト転送って何だ?
それからロースピードとかフルスピードとかあるけれど?
というようなことについては、また少しずつ説明をしていきます。
ともかくHIDであろうとなかろうと、ここはMax64バイトということのようです。
ああ。どうせあとから説明しなければならないのですけれど、HIDでできるのかどうかわかりませんが、インタラプト転送のほかに、バルク転送というモードがあります。
そちらについても確認をしてみました。
バルク転送の場合は、1パケットあたり、8、16、32、64、の4通りの固定サイズのようです。
うう。HIDとは関係ありませんが、この際ですから、参考までに、アイソクロナス転送のサイズについても、確認を致しました。
アイソクロナス転送の場合には、1パケットあたり最大1023バイトのようです。
なお上記引用文書中、High−speedというのが随所に出てきていますが、これが480MHz(bps)のようです。
ここでは、Full−speed(12MHz)のみ扱いますから、Low−speed、High−speedはともに関係ありません。
とにかく1パケットが最大64バイトということはわかりましたので、次は、果たして、1フレームあたりに1データパケットなのかどうか、ということなのですが、時間が無くなってしまいましたので、その点につきましては、また次回以降に説明をすることにいたします。
2010.1.25upload
前へ
次へ
ホームページトップへ戻る