I2S オーディオ信号というのは、MasterCLK / BitCLK / LRCLK / SDATA の 4 本線で定義されています。が、最低限、BCLK / LRCLK / SDATA の 3 本があれば動きます。Raspberry PI の Audio モジュールからも、この 3 本しか出ません。じゃあ、MCLK ってなんなの・・・・?という疑問がとーぜん出てくるんですが、DAC のデータシートとか見てると、「Δ-Σ変換に使います」とか、「デジタルフィルターに使います」くらいしか書いてない。
でもまぁ、なんか音質に絡みそうなキーワードが入ってるので、繋いでみてもいいんでね??と思った次第です。
なお、PCM5102A では、MCLK (PCM5102A では、SysytemCLK という名前)を GND に落としておくと、PLL を使って MCLK 信号を内部で生成してくれます。
さて、どーやって MCLK を作るかといいますと、BCM2835 は汎用クロック回路を持っているので、これを使って MCLK 相当のクロックを出力してあげようという魂胆。
BCM2835 は汎用クロックを 3 個持っています。が、GPCLK1は、カメラ用クロックとして使われており、CAMERA コネクターにしか繋がってません。GPCLK2 は、Eterhnet のクロックとしてつかっているようで、これは絶対に外せません。というわけで、必然的に GPCLK0 を使うしか手がないのです。GPCLKは、GPIO3 / GPIO20 / GPIO42 から出力できるんですが、Raspberry PI B では、GPIO3 しか GPIO ヘッダーに接続されてません。
というわけで、GPIO3 Pin から MCLK 相当信号を取り出します。なお、オリジナルの Volumio では、GPIO3 は PIC に接続されており、赤外線リモコンの STOP 信号に割り当てられてます。よって、MCLK の利用は、赤外線リモコンと排他です。ここで公開する基板改変、Firmware の適用を行うと、赤外線リモコンは使えなくなります。
まずは、出力する MCLK を DAC Chip の SCLK に接続しましょう。GPIO4 は、GPIO ヘッダーの 7Pin に出ていますかから、
こんな感じにジャンパーを飛ばします。MCLK を使う、使わないを切り替えられるようにピンヘッダーで接続させてます。
次に、対応 Firmware で Raspberry PI を起動します。
上が MCLK の波形、下が LRCLK の波形です。MCLK は BCLK や LRCLK に対して非同期です。同期 CLK を要求する DAC は動かないと思いますので、ご注意を。
あと、この仕組みは、固定分周にしないと動作しません。よって、再生時間は犠牲になります。各サンプリングレートと Bit 長ごとに、実際に出力されるクロック周波数をまとめておきます。
16bit の場合
サンプリングレート | MCLK | LRCLK |
44.1kHz | 11.36MHz | 44.14kHz |
48kHz | 12.50MHz | 48.08kHz |
96kHz | 25.00MHz | 96.45kHz |
192kHz | 50.00MHz | 192.9kHz |
24bit の場合
サンプリングレート | MCLK | LRCLK |
44.1kHz | 8.475MHz | 44.14kHz |
48kHz | 9.259MHz | 48.00kHz |
96kHz | 18.52MHz | 96.45kHz |
192kHz | 38.46MHz | 192.9kHz |
どの信号も、本来必要となるクロック周波数に比べて1%程度高い値になっています。つまり、再生速度がほんのちょっと速くなります。
さて、これは Linux Kernel のソースを弄ってるので、バイナリーを公開したら、欲しい!って人にソースを提供しないといけないんですが、どーしよう・・・・・?ファイル3つなんですが、ディレクトリがばらばらで、列挙するのが辛い・・・・・
とりあえず、欲しいって人は適宜連絡ください。
コメントする