2020年1月8日水曜日

EZ-USB FX2LP を動かしてみる (36) windowsからサンプリング周波数指令はどう到来するのか?

昨夜は徹夜しました.

EZUSBをDCCとして使えないだろうか? というのがここんとこの連載テーマ.

課題は様々ですが、今日のお題はこうです.
デバイスディスクリプタに複数のサンプリング周波数を記述するようになっている.なのだが、windowsからの「サンプリング周波数はこれにしてね指令」はどういう経路でどんな形で到来するの?

第35話で公開したディスクリプタを振り返って、bit数とサンプリング周波数がどのように記述されているのかをまずは整理してみたい.
device discriptor    必ず1つだけ存在
  ↓
config discriptor    複数在っても許されるらしいがここでは1つのみ
  ↓
interface discriptor   3個在る(0番コントロール/1番StreamIF/2番HID)
  ↓
interface1番の配下に4つのAlternate Settingが在る   (0番停止/1番16bit/2番24bit/3番32bit)
  ↓
0番以外の各Alternate Setting配下に5個のサンプリング周波数が在る

ちなみに3つのinterfaceはこんな風になっています.

上のディスクリプタ階層構造は、bit数→サンプリング周波数の階層構造になっていますが、これをフラットに記述することも可能と思います.つまり、1+5+5+5=16個のAlternate Setting が平置きされるわけですね.でもそうするとディスクリプタのBYTE数が増えるので敬遠されるのだと思いますけど.

平置きのケースはさておき、階層構造のケースで進みます.

ここで2つの疑問でぇす.
  1)bit数の設定はどうしているか?
  2)サンプリング周波数の設定はどうしているか?
windowsからこれらの指令がUSBデバイスたるEZUSBに飛んでくると思われますが、別ルートなんだろうなと想像されます.

【bit数設定の仕組み】
windowsからこういうsetupが飛んでくる.これが3つのAlternate Settingを選択するよう動けという要求です.標準リクエスト表にあるお馴染みのリクエストです.
01 0B 02 00 01 00 00 00
01      bmRequestType   お決まりの接頭語と思えばいいでしょう
0B      set interfaceの意味=Alternate選択の意味
0002   Alternate2にしてくれの意味
0001   interface1を指している
0000   後続データは無いの意味
人間の言葉に直すとこんなかと.
「windowsは命ずる.interface1をAlternate2にせよ」
これはつまり、
「windowsは命ずる.Stream interfaceを24bitにせよ」
ということかと.

【サンプリング周波数設定の仕組み】
windowsからこういうsetupが飛んできます.しかし標準リクエスト表にはこんなの無いんだぜ.これはAudio Class 1.0 documentの5.2.1.1 Set Requestなのでした.
22 01 00 01 02 00 03 00 00 EE 02
22       bmRequestType     endpointに対する指令の意味
01       SET_CUR     セットしろの意味
0100   01はcontrol selectorで、ここではサンプリング周波数を指してるんだろう
0002   EP2の意味
0003   後続データは3BYTEの意味
02EE00    データ   10進数に直すと192000kHzの意味
人間の言葉に直すとこんなかと.
「windowsは命ずる.EP2を192000にせよ」
これはつまり、
「windowsは命ずる.EP2のサンプル周波数を192kHzにせよ」
ということかと.

わかってしまえばああそうなの?っていうだけですけど、これで徹夜したのよ.だいたいさ、サンプリング周波数がendpoint属性として天下ってくるってのが一貫性に欠けるっつうか、想定外だったなぁ.

以上の知見より、EZUSBのCPU8051がやるべき事はう~んと考えれば決まるじゃろう.

-----
ところで、windowsがEZUSBへ向けて上記のbit数/sampling周波数設定を発するのはどういうtimingなのだろう?

わたしが目撃したのは3つの場面です.

1)この設定をして、適用ボタンを押した瞬間
でもねぇ、この時にEZUSBへ送信されるサンプリング周波数データは何か変.古いデータが送信されるみたいなんだなぁ.まぁいいけど.

2)音楽再生アプリが再生開始した瞬間
この時にEZUSBへ送信されるサンプリング周波数データは正常です.

3)停止時
何も音楽再生してないときにはどうなってるの?というのは知っておくべきかと思います.上で「Alternate Setting0番=停止」と書きました.つまりAlternate0にせよという命令を受け取ったEZUSBは、サンプリング周波数の発振を止めるなどの操作をするべきかと思います.
ちなみにAlternate0にせよという命令はこういうsetupです.
01 0B 00 00 01 00 00 00
01        おまじない接頭語
0B        SET_INTERFACE
0000    Alternate0の意味
0001    interface1の意味
0000    後続データ無しの意味


今日はこれから秋葉原へ行くのでここまでにしとう御座います.

かしこ

→INDEXページへ

5 件のコメント:

  1. 2000円札で高速道路料金を払おうとしたら『見たこと無いお札です』と言われた男2020年1月8日 19:59

    業務連絡

    BD送りました。
    明後日には届くはずです。

    ちなみにコナンを見たことがありません。

    BY The WAY
    スピーカーケーブルを交換して音が変わる(耳で聴いて解るレベル)と思います?

    返信削除
    返信
    1. ほぇ〜BDありがとうございます。

      削除
    2. スピーカーケーブルで音は変わると思います。距離にも寄るでしょうから、1mだと識別困難かもですが、10mも有れば変わっても不思議じゃないかなと思っています。

      オペアンプをNE5532からmusesに変えたぐらいの変化はあるんじゃないかという予想です。
      フィルムコンを安物からWIMAに変えたよりはスピーカーケーブルによる変化はあるんじゃないかという予想です。

      細いケーブルと高価な太いケーブルで何が変わるかというと、ケーブル自体のDC抵抗はダンピング性能にあまり影響しないと思っています。影響大なのはケーブル自体のインダクタンスがそこそこ違うと思うので、インダクタンスで過渡応答に差が出るという仮説です。
      スピーカー自体も複雑なインダクタンスですけど、アンプは一生懸命定電圧駆動に努めてくれています。そこにスピーカーケーブルというインダクタンスがプラスされるのですから、何かしら損をするだろうなぁと思っています。

      インダクタンスを小さくするには、芯線を太くして、かつ被覆を薄くすると理論的には効果的です。そういう志向のスピーカーケーブルがあるのかどうかは知りませんが。

      なお、インダクタンスを抑える工夫が行き過ぎるとキャパシタンスが増えてしまうので、スピーカーケーブルとスピーカーで共振しないかななどと云う別の心配がアタマをもたげます。

      いずれにせよ、聴覚上の差は、素直な音と、キンシャンした音という良くあるパターンになるんじゃないでしょうか?

      以上は空想です。

      削除
  2. SPケーブルの物理的ダンピング特性を良くするためにLCOFC芯線+テフロン皮膜+外側を鉛テープ巻き込みというケーブルを使っていました。ごく当たり前のSPケーブルと比較しましたが、僕の耳では まったく 違いませんでした笑

    返信削除
    返信
    1. そのケーブル、メーター単価おいくらですか? ¥1500とか(汗)

      鉛被覆ってのがあるんですね世の中には.

      削除