いつの間にか2年間も放置していたネタ。
中華SDトランスポート。前回はたしか水晶発振器をNDKに変更して水晶発振器への電源供給を超ローノイズにしのでしたか?忘れてる。
放置していたのはこの改造したら再生音にプチプチとノイズが混入するようになってしまい、直すのが面倒でそのまま放置に至っていた・・・というオチでした。コレを直すより新しい基板でやり直した方が早いかも?
最近は、高価なネットワークHUBだとか、高価なLANケーブルだとか、高価な光変換機器だとか、ネットワークオーディオ界隈が賑やかです。でも自分はどうしてもそっち方面には馴染めない。ケーブルもHUBも使いたくない。シンプルな方が好き。単なる妄想ですがAmazonMusicやQobuzなんかのストリーミングをビットパーフェクトでSDカードにバッファーしてからLANケーブル引っこ抜いて此のSDカードから再生を始めたら、ネットワークレスの超ローカル再生みたいな。
.
そんな思いからふたたび記憶を呼び覚まして、中華SDトランスポートの音質の謎について考えてみることに。この2年間でAIという便利ツールが出来たので海外の英語ソースの技術情報にもアクセスしやすくなりました。早速懸案であったクロックのSTM32でのルーティング?について。
おさらいすると、中華SDトラポは水晶発振器の出力をDACのMCKに直接接続しています。PLLとかを介さないダイレクト。他方でどうやってSTM32と同期とっているのかが謎?でした。STM32のシステムとしては24MHzのクロックがちゃんと居ます。これとの同期です。
基板上、水晶発振器左から 48kHz用(48kHz×1024=49.152MHz)、 44.1kHz用(44.1kHz×1024=45.1584MHz)、 システム用24MHzの計3個の発振器が載っています。
.
不思議だったのはサンプリング用のクロックがSTM32の12番のOCS_INに入っていなかったこと。わざわざ16番のDFSDM1_CKIN4に入力している。
これの意図をGemini君に聞いてみました。
——————————————————————–
その3つの発振器とSTM32H7の連携についてですね!この構成は一般的なマイコンのクロック配置とは異なる、オーディオの音質(低ジッタ)を最優先した非常にユニークな設計になっています。
通常、STM32に外部クロックを入れる場合はOSC_IN(12番ピン)を使いますが、この基板がわざわざDFSDM1_CKIN4(16番ピン)というデジタルフィルタ用の特殊な入力ピンにサンプリングクロックを突っ込んでいるのには、オーディオならではの深い理由があります。
なぜOSC_IN(12番ピン)ではダメなのか?
1. クロック切り替え時の「マイコンのフリーズ・暴走」を防ぐため
お気づきの通り、この基板は再生する音源(44.1kHz系 / 48kHz系)に合わせて、GPIOなどで発振器のスタンバイ状態を切り替えています。
もしこの切り替わるクロックをメインシステム用のOSC_INに入れてしまうと、曲が変わってクロックが切り替わる一瞬の「無信号状態(あるいはクロックが不安定になる瞬間)」が発生した際、マイコンのメインシステム全体がパニックを起こします。その結果、マイコン自体がフリーズしたり、意図しないリセットがかかったりする致命的なバグに繋がります。
2. ジッタ(内部ノイズ)の混入を最小限に抑えるため
マイコン内部の通常のクロックルート(RCC)に音楽用クロックを通してしまうと、CPUや他のペリフェラルが発するデジタルノイズを拾い、波形がなまって「ジッタ」が生まれます。これはオーディオの音質劣化に直結します。
16番ピン(DFSDM1_CKIN4)に接続する技術的意図
1. 「オーディオ用マスタークロック」としてダイレクトに扱える
STM32H7の仕様上、DFSDM1_CKIN4 や I2S_CKIN といった特殊ピンから入力された外部クロックは、内部のマルチプレクサ(切り替え器)を介して、オーディオ専用のペリフェラル(SAIやDFSDMなど)へ極小ジッタのままダイレクトにバイパスできる専用ルートが用意されています。 これにより、発振器が持つ本来のピュアなクオリティのままDAC側へMCLK(マスタークロック)やデータ(I2Sフォーマット)を同期させて送り出すことができます。
2. メインシステム(24MHz)との完璧な役割分担
基板上にある「システム用24MHz」の役割がここで活きてきます。
-
システム用24MHz:
OSC_IN(12番ピン)に入力され、メインPLLで400MHz〜480MHzに増幅されてCPUを動かします。これにより、SDカードの読み込みや画面表示、選曲処理などを常に安定して行います。 -
音楽用クロック(45.1584MHz / 49.152MHz): 16番ピンから入り、CPUの動作速度とは完全に独立して、音楽データのオーディオ同期(SAI/I2S出力)のためだけに贅沢に使われます。
つまり、「マイコンがどんなに忙しく働いてシステムクロックが揺らいでも、DACへ送る音楽用クロックだけは100%ピュアな状態を維持する」という、オーディオファースト・システムセカンドの非常に理にかなった、こだわり抜かれた設計思想(ルーティング)によるものです。
STM32H7内部のクロックルーティング(想像図)
STM32H7の「複数のPLL」と「柔軟なマルチプレクサ(MUX)」をフル活用した構成です。
【外部回路】
22.5792MHz (44.1k系) ─┐
├─(切り替え)─> [16番ピン: DFSDM1_CKIN4]
24.576MHz (48k系) ─┘ │
│ (マイコン内部へ)
───────────────────────────────────────┼────────────────────
【STM32H7 内部】 │
├──> [DFSDM ペリフェラル]
│ (ジッタゼロのマスタークロックとして直撃)
│
┌──────────────────┘
▼
[RCC_D1CCIPR / PLLSRC] (クロックソース切り替え)
│
├──> [PLL3 / SAI PLL] ──> [SAI (オーディオI/F)]
│ (音源のサンプリング周波数に完全に同期したMCLK/BCLKを生成)
│
└──> [メイン PLL1] ──> [CPU / システムクロック] (最大480MHz)
(24MHz付近の綺麗な入力をベースに、システム全体も駆動)
このルーティングの技術的ポイント
.
.
まとめ
この既製品は、STM32H7を単なる「制御用マイコン」としてではなく、**「超高精度なデジタルオーディオ・クロックマネージャー」**として限界まで使い倒しています。
GPIOで発振器のスタンバイを制御し、切り替わったクロックを16番ピンから吸い上げ、DFSDM/SAIを完璧に同期させつつ、その余り(?)でCPUも超高速駆動させる。まさに音質派のエンジニアがこだわり抜いた、美しい設計思想が透けて見えますね!
——————————————————————–
Gemini回答ここまで
なんとなくマトモな答えが返って来ましたが、STM32を操れない自分にとってはまだ何とも言えない回答です。Gemini君が云う24MHzが12番OSC-INに入力されているという話は実際にはまだ確認していないですし。とはいえ自力で学習するうえでの強い味方になりそうな感触は得ています(^^
.
.
【追記】
意図せず?電源を良くしたらプチプチノイズが出るようになった件もGeminiの回答がありました。電源が立派になるとクロックの角が元気になってオーバーシュート気味になっているのかも?と。対策としてダンピング抵抗を付けてみることを提案されました。そんなことあるかなぁ・・・。




コメント ※編集/削除は管理者のみ