以下のとおり、押さえておけば、
usbの説明書を読まなくても、十分実用になると思います。
1.ディスクリプタ
・USBは、ご存知のとおり、ハブ(タコ足プラグ)を利用でき、
一度に、複数の機器と接続できます。
このように接続して通信するには、
接続された機器から、その機器の情報を埋め込まなければならず、
そのしくみが、ディスクリプタといいます。
PCは、PIDなどから、通信する相手を特定します。
2.エンドポイント
・fx2lpは、データ転送のためのメモリバッファ(エンドポイント)が設けられており、
PCは、直接には、そのメモリバッファへデータを転送し、
その転送以後については、基本的には、転送されたデータを直接処理することはできません。
PCは、メモリバッファへデータを転送したら(out転送という)、
メモリバッファが一部空になるまで、待つ処理がなされます。
・通常、「PC→fx2lp→外部のマイコン」という構成となっており、
fx2lpは、外部のマイコンとデータをやり取りするもので、外部のマイコンの出先機関という
役割を果たします。
・上記のメモリバッファは、PCからみて、エンドポイント(終着地)と称されるが、
終着地というより、上記のとおり、出先機関、ないしデータの交換所という役割です。
・このメモリバッファは、FIFO(ファーストイン、ファーストアウト)のメモリで、
最初に転送されたデータが、先に転送される。
つまり、PCから転送されたデータは、バッファ容量が満たされるまで、まず蓄えられ、
最初に転送されたデータが、外部のマイコンへ真っ先に転送される。
バッファの一部が転送されると、
すでに転送されたバッファ領域のデータは、意味を成さないから、
「空」になったとして扱い、
その空になったバッファの部分へ、PCからデータを転送する。
・このようにすることで、メモリバッファは、外部マイコンへ転送している間、
別のメモリ領域を用いて、同時に、PCからデータの転送を受け付ける。
・これによれば、
メモリバッファが、全部空になったのち、改めて、データを受け付ける間欠転送と異なり、
連続的に、データを転送できる。映像、音声のストリームのためには、これが必須になる。
・似たような概念で、マルチバッファ(ダブルバッファ、トリプルバッファ、クワッドバッファ、・・・)といって、
複数のバッファを用意しておき、その一部が転送済み(空)になると、
その空領域にデータを転送する。
CYPLESSのez-usbは、これを自動的に行う仕組みを備えている。
・転送方式としては、
コントロール転送、インタラプト転送、アイソクロナス転送、バルク転送がある(以下で説明)。
・エンドポイントは、通常、複数設けられ、上記バッファの領域が区分けされて設けられている。
・in転送とout転送があり、in転送は、外部マイコンからPCへ、
アウト転送は、PCから外部マイコンへの転送を、いう。
各エンドエンドポイントは、in転送とout転送のいずれかに、設定する必要があり、
それゆえ、場合により、複数のエンドポイントが必要となる。
・エンドポイント0、1は、コントロール転送、インタラプト転送に用いられ、
指示する旨のデータを与えると、
usb専用マイコン(fx2lp)には、
割り込み(インタラプト、何らかの状態が生じたことを検知して、特定の処理をさせる)が働き、
予め、fx2lpにセットされたプログラム(ファームウェア)により、
特定のサブルーチンを実行させることができる。
エンドポイント0、1では、少量のパケットデータ(64k)のみ、送ることができる。
・fx2lpにおいて、エンドポイント2、4、6、8は、ストリーム等の大量のデータの転送を行うことができ、
バルク転送では、1回(0.125msごと)当たり、512kバイトのデータを
1とまとまりのデータ(パケット)として、送れる。
バルク転送は、ハードディスクのように、一度にどかっとデータを送るのに適しており、
かつ、データの正確性を担保する仕組みが設けられている。
アイソクロナス転送では、必ず一定の間隔で送ることが予定された、送信方法であって、
必ずしも、データの正確性は担保されない。
それゆえ、一部のオーディオメーカーは、
次第に、アイソクロナスより、バルク転送を利用するよう、考えているようである。