USBは簡単に1本のケーブル(USBメモリーのようにケーブル不要のものもありますが)でいろんな機器を接続するだけですぐ使える状態になるということを目標に規格化されました。USB1.0として公表される前は、MicrosoftのWinHECやintelのIDF、PCIのDeveloper会議などで提唱者のPapertさんがセントロニクスのプリンタケーブル、RS232Cのケーブル、SCSIケーブルなどの束をお坊さんの七條袈裟のように身に纏い、右手には1本のUSBケーブルを持って、「これらすべてのパラレルケーブルがこれ一本になる!」とプレゼンしていました。その時はUSBオーディオなどとは思いもよりませんでした。またAudio Video関係は放送局や録音スタジオ用などを含めてIEEE1394(i-Link)が優勢でしたので、AV分野ではIEEE1394が勝つものと思っていました。たしか当時はMIDI(ASYNCシリアル)をUSB上に移植しようというのがUSB オーディオの始まりだったと記憶しています。
その後、1998年にUSB Device Class Definition for Audio Device 1.0, USB Device Class Definition for Audio Dataformat 1.0, USB Device Class Definition for Audio Terminal Type 1.0が制定され、現在私たちが使っているUSBオーディオの基本形が出来上がりました。これらの規格は2006年5月にそれぞれ2.0に更新されていますが、DolbyやDTS,MP3,AACなど圧縮フォーマットの取り扱いやMulti ChannelのLPCMなどの取り扱いが追加されているだけです。私たちが対象としているLPCM-2ch.に関してはRev.1.0から何も変更されていません。Terminal typeでは1.0の頃からUSB Transport用にS/PDIF outputという種別がありましたので、この種別コードを使用したUSBデバイスをWindowsに接続するとS/PDIFというアイコンが表示されます。
USBポートに何らかのUSB機器を接続すると、OS(WindowsやMacOS、Linuxなど)がUSB機器に対してDevice Descriptorと呼ぶ機器固有の情報を提供するように要求します。その後、その情報を解析しOS内部に登録します。この一連の操作がEnumerationとかConfigurationと呼ばれ、Registryと呼ばれる内部領域に登録されます。このへんがUSB機器にとっての第一関門です。さらにOSはそれぞれのUSB機器に対応したDevice Driverをロードします。ロードする際にはRegistryや*.infと呼ばれる特別な情報ファイルを参照します。USBオーディオ機器の場合はusbaudio.sys(Windowsの場合)というDriverがロードされなければなりません。ここまで到達してはじめてWindowsではデバイスマネージャのデバイス(種類別)表示でUSBコントローラーの下にUSB複合デバイスとして、さらにサウンド、ビデオ、およびゲームコントローラーの下にUSBオーディオデバイス(Windows7、VistaではUSB機器のDevice Descriptorに記述されているモデル名)が黄色の!マークや赤のX印なしで表示されるようになります。ここまで到達するためにはUSB機器側ではOSが発行するRequestに対して応答しなければならないだけではなく、上記の3種の規格書で定義されているDeveice Descriptorの個々の内容に従って間違いなく記述されたDeveice Descriptorを返送しなければなりません。みなさん方は自分でDescriptorを記述することはまずありませんのでこれらの文書は必要はありませんが興味のある方はwww.usb.orgからzipファイルの形でdownloadできますので参照してみてください。TIのPCM2704などを使用してUSB DACを自作される場合はVendor名やModel名などが書き換え可能領域としてユーザーに開放されていますのでこれらの文書を参照されるのもよいと思います。
実際のUSB機器内部のDevice Descriptorを読みだして表示させるユーティリティがMicrosoftから提供されています。本来はWindows DDK(Device Driver Development Kit)に含まれていてMSDNからfreeでdownloadできたのですが今は見当たりません。しかし、usbview.exeで検索するとdownload可能なサイトを見つけることができます。図-1のようにピンクに色が変わっている機器がEnumerationとCondigurationが完了している機器を示します。各機器の詳細な情報を表示させるためにはOptionsタブのConfig Descriptorにチェックマークを付けてFileのRefleshをクリックしてください。図-2は実際にRAL-2496UT1のDevice Descriptorを読みだしたものです。Device Descriptorから読みだされた情報、特にInterface Descriptorはusbaudio.sysやMediaplayer, Quicktime Player, Mixerなどでも参照され、USBから送り出すオーディオデータのサンプリング周波数やbit数が決定されます。
<図-1>usbview の EnumerationとCondigurationが完了している機器
したがって、Deviece Descriptorを見るとそのUSBオーディオ機器が持つ能力をすべて知ることができます。
Device Descriptorは図-2の左側のコメントに示すようなブロックに分かれています。2番目のConnection StatusはDescriptorに記述されているものではなくusbviewが現在の接続状況を表示するために付け足したものです。先頭のDevice Descriptor部はUSB機器すべてに共通でオーディオ機器であろうがHDDであろうがキーボードやマウスでも同じ書式です。idVendor欄のVendor CodeはUSB I/Fによって割り当てられたベンダコードで私たちの会社は1412なので16進の0x0584が記述されています。その次のidProductは私たちが割り当て、USB I/Fに登録します。その下には製造者名、型番などが記述されている場所へのindexが記述されていますのでusbviewが読みだして表示しています。これらの製造者名や型番はWindowsではコントロールパネルやデバイスマネージャで表示されます。上記のようにPCM2704ではこの部分は書き換えることができますので、PCM2704を購入して自分でUSB DACを作られる方は100円くらいの256ByteのSEEPROMを追加して挑戦してみて下さい。USBオーディオデバイスとしてmy nameが表示されるのも楽しいものです。
その次のControl転送、interupt転送用のEndpoint Descriptor 2個(入出力用)はResetなどのCommandやStatusの受け渡しのためにUSB機器が必ず備えていなければならないものです。Configuretaion descriptorも同様で、ここではBus_Poweredという記述子と消費電流の記述子に注目しておいてください。
それに続いていよいよUSB Audio固有のInterface Descriptorが登場しますが、説明は次回以降で..