今回は音楽データがリニアPCMの場合のS/PDIFのFrameのフォーマットについて説明します。
リニアPCMを伝送する場合の基本単位(Sub Frame)は前回(#23)の図-2のように、32bitの長さで構成されています。先頭の4bitは同期検出用のSyncコードで、’B’,’M’,’W’の三種類があります。これらは4bit長ですが、リニアPCMのデータ部に合わせて2倍のビットレートに展開されるため(BMCでエンコードされるという訳ではありません)、表-1のようなビットパターンになります。
ちょっと見るとBMCエンコードされているように見えますが、’0’あるいは’1’が3個連続している部分が含まれています。BMCエンコードを行ったデータは’0’もしくは’1’は2個しか連続しない(データが’0’の場合)という約束になっていました。S/PDIFのレシーバは、この3個の’1’もしくは’0’が連続しているのを目ざとく検出してSub Frameの始まりと種類を検出しているということになります。 当然、先行するSub Frameの最後が’1’の場合や’0’の場合は’1’が3個以上続いたり、’0’が3個以上続いたりしてしまわないよう、論理をひっくり返します。つまり、直前のSub Frameの最後が’1’ならSyncコード(プリアンブル)を’000’で始め、’0’なら’111’で始めるよう決められています。このあたりは表-1を参照してください。
Syncコード(プリアンブル)の次はAudio Sampleデータフィールドです。bit4からbit27までの24bitの長さがあります。I2Sから入力されBMCエンコードされたbit列がここにはめ込まれます。本blogの#20(2008年4月4日掲載)の図-1をもう一度参照してください。I2Sでは最長24bitまでのAudio SampleデータがMSB(最上位bit、b23)を先頭にして、順番に送り出され、LSB(b0)が最後に送り出されます。ところが前回(#23)の図-2を参照してください。この順番はLSB(b0)が先で、MSB(B23)が最後というように逆順に並べ替えられています。また、16bit長のデータは図-1のように右詰めで送り出されますので、Sub Frameのb4からb11までの8bitはダミーとなり’0’でパディングされます。b4からb7までの4bitはAUX bitとして使用される場合もあります。
図-1 Sub FrameのAudio Sample データフィールドのフォーマット
注) 16bit data, 20bit data, 24bit dataのbit番号はI2S入力のSDATAに合わせています。
Audio Sampleデータフィールドに続くb28,29,30,31の4bitはフラグやステイタスを表すbitとして表-2のように使用されています。
表-2 Sub Frameのb28からb31まで、V,U,C,P bitの意味。
注) UおよびCbitはFrame#0から#191までのbitをつなげて192bit長のbit列データとして使用されます。
bit31のP bitは送信側でbit4からb30までのbit列のParity bitです。受信側では受信したbit4からbit30までのbit列のParityを計算し、このP bitの値と一致するかどうか比較します。一致しなければ、通信の途中でどこかのbitが化けたということになります。再送を要求するか、無視してそのまま続行するかは上位のプロトコルで決められますが、現状のAudio伝送では無視して続行するしかありません。ただし、これはSync Codeが正しく検出できた場合の話で、同軸ケーブルを使用した場合は、送受信のレベルが低いのでノイズの影響を受けやすく、Sync Codeに同期できず、Sub Frame自体を検出できない場合があります。アナログ信号の場合、ノイズがのっても場合によっては「味付け」になりますが、Digital伝送の場合はノイズによってデータそのものが検出できないことがあるので、エラー訂正や再送プロトコルのない伝送には注意が必要です。
bit29のU bitはUserが自由に使用できるbitです。ほとんどの場合、未使用(’0’)ですがCDプレイヤからのS/PDIF出力ではCDのSub-Qデータを送り出すために使用されている場合があります。この場合は、192個のFrameを構成するSub FrameのU bitを順番に並べて全体で192bit長のbit列をつくります。ひとつのFrame内に2個のSub FrameがあるからU bitの数は192×2で384ではないのか、と思いますが、同一Frame内のSub Frameは同じU bit(C bitも)を持っているので192個で間違いではありません。Sub-QデータというのはCDプレイヤで表示されるTrack番号や時間、現在演奏中の位置を示す時間データなどです。このデータは当然I2Sには全く含まれていませんので、CDメカの制御回路から直接取り出す必要があります。
bit30のC bitも同じようにFrame#0から1bitずつ取り出して並べるとチャンネルステイタスと呼ばれるデータを再現することができます。実際は先頭のFrame#0から#31までに含まれている32bitに意味があり、EIAJで各bitの意味が規格化されています。C bitに関しては次回説明いたします。