USBプロジェクト - ファームウェアに立ち返る (12) [USB]
最後に残ったコントロール書き込み転送のシーケンスを考えます。
シーケンス図
シーケンス図が見るからに忙しそうです。
他のコントロール転送同様にSETUPトランザクションが到着すると割り込みサービスルーチンが応答し、メイン・ルーチンによってポーリングされます。 この後、メイン・ルーチンでSETUPパケットを解析します。
さらに、ホストからはDATA-INトランザクションが到着します。 EP0-INは、いつSETUPトランザクションが到着しても対応できるように、このDATA-INトランザクションも割り込みで応答します。
このように、次々と割り込みサービスルーチンがデータを受け取るため、デバイスの都合でデータを送出していたほかのコントロール転送とは違い、あまり時間的な余裕がありません。
トランザクション単位で受信すると
このシーケンス図では、トランザクションごとにメイン・ルーチンがデータを受け取っています。 このため、一回の転送に対して何度もメイン・ルーチンの手をわずらわせる事になります。 そこで、バッファに1転送分のデータを受け取らせる処理を割り込み処理ルーチンに記述し、メイン・ルーチンには、転送の終了だけを知らせる方式も考えてみました。
この場合、1転送分のデータを入れておくためのバッファを用意しなくてはなりません。 RAMをふんだんに使えるほど容量は多くないので、アプリケーションで使用するバッファにそのまま書き込むとします。 すると、SETUPの構文解析が終わってから、DATA-INトランザクションが終了するまでの間にバッファへのポインタを引き渡さなくてはなりません。 これは、時間的に厳しい方式であると思います。
コントロール書き込みは、無くてもいいか。いいよね。
以前、Tsuneoさんに指摘されたように、エンド・ポイントEP2を追加するとコントロール書き込み転送をサポートしなくてもHIDデバイスとして機能させることができます。 そこで、コントロール書き込み転送については、「考えるだけにして、実装しない」という事にしようと思います。
さあ、役者はそろった。
付録 : USBプロジェクト索引
- USBプロジェクト - ファームウェアに立ち返る (1)
- USBプロジェクト - ファームウェアに立ち返る (2)
- USBプロジェクト - ファームウェアに立ち返る (3)
- USBプロジェクト - ファームウェアに立ち返る (4)
- USBプロジェクト - ファームウェアに立ち返る (5)
- USBプロジェクト - ファームウェアに立ち返る (6)
- USBプロジェクト - ファームウェアに立ち返る (7)
- USBプロジェクト - ファームウェアに立ち返る (8)
- USBプロジェクト - ファームウェアに立ち返る (9)
- USBプロジェクト - ファームウェアに立ち返る (10)
- USBプロジェクト - ファームウェアに立ち返る (11)
- USBプロジェクト - ファームウェアに立ち返る (12)
- USBプロジェクト - ファームウェアに立ち返る (13)
- USBプロジェクト - HIDデバイス(1)
- USBプロジェクト - HIDデバイス(2)
- USBプロジェクト - HIDデバイス(3)
- USBプロジェクト - 複合デバイスを考えた
- USBプロジェクト - HIDデバイス(4)
- USBプロジェクト - HIDデバイス(5)
参考文献
USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)
- 作者: インターフェース編集部
- 出版社/メーカー: CQ出版
- 発売日: 2006/07
- メディア: 単行本
USBターゲット機器開発のすべて―各種USBコントローラの使い方と基本ソフトウェアの作成法 (TECHI―Bus Interface)
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2005/08
- メディア: 単行本
コメント 0