2020年4月2日木曜日

EZ-USB FX2LP を動かしてみる (39) 質問への回答

リアル世界の人から質問された.
Q1:「USBのaudio data streamのフレーム区切り、あるいは曲の先頭のマーカーはどのように実装されているの?」

今回はこれに回答したい.(PCM modeについてである.他modeは知らない)

A1:まず説明したいのは、フレーム区切り等のマーカーの仕組みを考えて決めてくれたのは誰なのか?っていうことだ.それを決めたのは、USB Audio Classの仕様を決めた人々、すなわちUSにある(だろう)USB規格制定GPの皆さんだ.ごくろーさん

A1:質問への直接の回答は、「PCM audio data streamにマーカー情報はありません、パリティもありません」である.昔のCMで「ファンデーションは使ってません」というのがあったのを思い出したのはわたしだけとは限るまい.

A1追記USB Device Class Definition for Audio Data Formats Release 1.0  に気になる記述がある.google翻訳を転記しとく.デリミタについて述べているのでおやっ?と思いはするが、フレーム同期とは違うことをやりたいみたいだ.
2.1 Transfer Delimiter
アイソクロナスデータストリームは本質的に連続していますが、パケットごとに送信される実際のバイト数は、ストリームのライフタイム全体で変化する可能性があります(たとえば、レート調整の目的で)。
パイプを閉じずに(したがってUSB帯域幅を放棄せずに)アイソクロナスデータストリームの一時停止を示すには、帯域内転送区切り文字を定義する必要があります。
この仕様では、2つの状況を転送区切り文字と見なしています。
1つ目は長さ0のデータパケットで、2つ目は特定のUSBフレームにアイソクロナス転送がないことです。
両方の状況は同等と見なされ、オーディオ機能は同じように動作することが期待されています。
ただし、2番目のタイプは、アイソクロナスUSB帯域幅を消費しません(つまり、帯域幅はゼロ)。
どちらの場合も、この仕様では、転送区切り文字をUSB経由で送信できるエンティティと見なしています。

-----
Q2:マーカー情報が存在しないなら、どうやってフレーム区切りを決めているのか?

A2:データの最初のBYTEが先頭なのだよ.後続フレームは先頭から起算した位置でブツ切りしてくれよな、と先生は仰っている.

-----
Q3:データロストやFIFOアンダーフローしたら、ど、どうすんですか?

A3:ノイズの爆音でスピーカーがぶっ壊れる、エイメン

A3:データロストのとき.
データロストとはパケットエラーを指すのだろう.EZ-USBのfirmware上では、パケットエラー割り込みがかかるようにするんだと思う.そして、USB bus stallで「オレ死んだ」とPCに申告するんじゃないかな? ここはまだ実装してないのでよくわかってない.

A3:FIFOアンダーフローのとき.
これはすでに実装してある.
FPGAのロジック回路は、EZ-USBのFIFOに積まれた音楽データを読み、フレームをブツ切りし、LE→BE変換し、シリバラ変換しI2S仕様で出力するシーケンサである.
EZ-USBがFIFOアンダーフローフラグを出したら、そのシーケンサが一時停止されるように作ってある.その効用でFIFOアンダーフローフラグが消えたらglitchなしで継げるようになっている.現状それでフレーム同期エラーは生じないようになっている.

-----
Q4:USB規格制定GPの皆さんはどうしてフレームマーカーを仕込まなかったの?

A4:きっと、彼らはコンピュータの専門家であって、通信の専門家ではなかったからじゃないかな?
コンピュータの専門家は、ファイル転送の途中でエラーが生じたらerror abortでご破算という考え方をしたがるんじゃないかな?
通信の専門家は、通信路でエラーが生じるのは当然だと考えるので、error warningを出しはするが、errorをやり過ごしてなんとか正常復帰する仕組みを実装しようとする.
そんな文化的違いではないかと思ふ.
USB audio classの仕様を読んでいると、コンピュータ専門家の矜持を感ずる.

-----
Q5:エラー復帰方法は規格化されてないの?

A5:されていない.
ストレージ規格や通信規格もひっくるめて、エラー処理をどのように行いましょうという着眼点は大抵は書かれていない.
なぜなら、「こんなエラー処理をすれば良さそうだ」を考えるのは読者(=設計者)の仕事なのだ.エラー訂正コードが規格に盛り込まれていても、それを無視した受信装置を作るのは設計者の好きにして良いのである.ゆえにA3はヒラサカの考えなのである.

だから、規格書を読むと悩む.規格制定者の意図を汲む必要がある.また改訂版規格書を読むと、旧版の問題点はここだったのね、と察知できたりする.設計思想がそこに書かれているのだ.思想が書かれているのは哲学書や小説や映画だけじゃないのである.

かしこ

→INDEXページへ

4 件のコメント:

  1. なんだか流しそうめんを想像してしまいました笑
    ダムモードなんてデータ転送とは認めたくないでーす

    返信削除
    返信
    1. わたしは通信屋というかチャネル屋なので、同期issueが大好きなんです.
      PLLとか.ブロックシンクとか.
      なのに、USB streamingときたらもう.プンスカ!

      削除
    2. ヘッドホンなんかしてフルスケールを食らうと耳が壊れるので、データが怪しいときは即ミュートしたほうがよさそうですね。ただDACにコマンドでミュートを投げるのもかったるいですが。

      削除
    3. あ、ヘッドホンだと耳血が出ますね。
      普段ヘッドホン使わないので気づきませんでした。
      FPGAロジック回路としては、パケットエラーが来たらbit clock止めますわ。

      完成したらソース全部公開しますね。

      削除