SSブログ

USBプロジェクト - ファームウェアに立ち返る (12) [USB]このエントリーを含むはてなブックマーク#

1475712

最後に残ったコントロール書き込み転送のシーケンスを考えます。

シーケンス図

UsbControlWriteTransferSequence.png

シーケンス図が見るからに忙しそうです。

他のコントロール転送同様にSETUPトランザクションが到着すると割り込みサービスルーチンが応答し、メイン・ルーチンによってポーリングされます。 この後、メイン・ルーチンでSETUPパケットを解析します。

さらに、ホストからはDATA-INトランザクションが到着します。 EP0-INは、いつSETUPトランザクションが到着しても対応できるように、このDATA-INトランザクションも割り込みで応答します。

このように、次々と割り込みサービスルーチンがデータを受け取るため、デバイスの都合でデータを送出していたほかのコントロール転送とは違い、あまり時間的な余裕がありません。

トランザクション単位で受信すると

このシーケンス図では、トランザクションごとにメイン・ルーチンがデータを受け取っています。 このため、一回の転送に対して何度もメイン・ルーチンの手をわずらわせる事になります。 そこで、バッファに1転送分のデータを受け取らせる処理を割り込み処理ルーチンに記述し、メイン・ルーチンには、転送の終了だけを知らせる方式も考えてみました。

この場合、1転送分のデータを入れておくためのバッファを用意しなくてはなりません。 RAMをふんだんに使えるほど容量は多くないので、アプリケーションで使用するバッファにそのまま書き込むとします。 すると、SETUPの構文解析が終わってから、DATA-INトランザクションが終了するまでの間にバッファへのポインタを引き渡さなくてはなりません。 これは、時間的に厳しい方式であると思います。

コントロール書き込みは、無くてもいいか。いいよね。

以前、Tsuneoさんに指摘されたように、エンド・ポイントEP2を追加するとコントロール書き込み転送をサポートしなくてもHIDデバイスとして機能させることができます。 そこで、コントロール書き込み転送については、「考えるだけにして、実装しない」という事にしようと思います。


さあ、役者はそろった。

付録 : USBプロジェクト索引

参考文献

USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)

USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)

  • 作者: インターフェース編集部
  • 出版社/メーカー: CQ出版
  • 発売日: 2006/07
  • メディア: 単行本

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。