PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.10

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆USB(HIDクラス)

USBを通じてパソコンとの間でデータを送受信する方法にいくつかの種類があることがわかりました。
その中で特別のドライバをインストールする必要のないHIDクラスを使うことを考えます。

[第31回]

●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データパケットなのかどうか、ということなのですが、時間が無くなってしまいましたので、その点につきましては、また次回以降に説明をすることにいたします。
CPUをつくろう!第423回(2010.1.25upload)を再編集

PICでUSBを![第31回]
2011.7.10upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る