Volumio で無理やり I2S MCLK を出力してみる

| コメント(0) | トラックバック(0)

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 に出ていますかから、

DSCN4590.JPGDSCN4591.JPG

こんな感じにジャンパーを飛ばします。MCLK を使う、使わないを切り替えられるようにピンヘッダーで接続させてます。

次に、対応 Firmware で Raspberry PI を起動します。

DSCN4588.JPG上が 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つなんですが、ディレクトリがばらばらで、列挙するのが辛い・・・・・

とりあえず、欲しいって人は適宜連絡ください。

トラックバック(0)

トラックバックURL: http://horliy.seri.gr.jp/MTcgi/mt-tb.cgi/14

コメントする

このブログ記事について

このページは、ほーりーが2015年2月 1日 14:39に書いたブログ記事です。

ひとつ前のブログ記事は「複式簿記で家計簿をつけて分析してみる話 しょにょ2」です。

次のブログ記事は「Raspberry PI のカーネルクロスコンパイル環境を作る」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。