2015年3月アーカイブ

Linux は git で管理されてるわけですが、これを CVS で管理に移そうとすると、問題がでるわけです。

CVS はデフォルトで core という名前のエントリーを無視するようになってます。ところが、Linux Source には、core という名前のディレクトリが含まれていて、その下に C のソースが転がってたりするわけです。

つまり、core とかいう名前のエントリーを無視しないようにするという操作が必要になるのです。

こんなコマンド

cvs import -I'!' -m "COMMENT" MODULE_NAME VENDOR_TAG RELEASE_TAG

-I オプションが Ignore オプションなので、! で否定してやるわけですね。

ほかにもソース中にStatic Linkがあって、これを追えないという問題もあるんですが、とりあえず私は困ってないので放置w

Volumio に 24bbit R-2R 上野 DAC を接続する。と言っても、USB で音源つないで、SPDI/F で接続するわけではない。

手作りアンプの会で頒布された、上野式 24bit R-2R DAC、上野式というと本人が嫌がるので、24bit R-2R DAC と称します。この24bit R-2R DAC は、DAIのモジュールと、DAC モジュールから構成されます。DAI と DAC の接続は、当然ながら、I2S。だったら、今話題の Raspberry PI オーディオと繋がるんでね?

というわけで、繋いで見ました。

DSCN4614.JPG物理的にはつながります。はい

この 24-bit R-2R DAC は、PCM5102A と比べると大きな違いがあります。

  • 24-bit 固定である
  • 実は I2S ではなく、Left Justified というフォーマットである

なので、当然ながら、PCM5102A とまったく同じようには駆動できません。仮に物理的にだけ繋いで音を出してみると、ノイズまみれの音がでてきます。

というわけで、対応 Firmware を作ってみた

Setting 画面の I2S 出力に選択肢が増えてます。2 個目の Hifiberry24 というのが、新規に追加したドライバーなので、こいつを選択してくださいませ。選択後は当然リブートです。

無題.png今までのを踏襲してるので、GPIO4からはMCLKが出てます。再生時間が若干早くなる仕様です。その他、利用は自己責任で!

PCM5102A を動かしてみる

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

PCM5102AというDACチップがあります。Raspberry PI の I2S に DAC を直結しよう!っていうときの、定番チップ。なにが良いかっていうと、MCLK Pin を GND に落とすと、内部の PLL で MCLK を自己生成してくれる。つまり、Raspberry PI みたいに、MCLK 出力をもっていない装置にもつなぎやすい。

なのでまぁ、チップを使ってみようと、データシートを読むわけです。そして、データシートの最後のほう(PDFの27ページ)にある、サンプルアプリケーション回路図。まぁ、この手のチップなんて、このサンプル通りにつくって、ハイ出来上がり。というのが定番コースなんですね。

今回ハマったのは、この回路図の中の Pin 1-5 周り。Charge Pump 関連の部分。PCM5102A 自体は 3.3V 電源一個で駆動できるんですが、オーディオ関連なので普通は内部で正負の 2 電源を必要とします。じゃあ、負電源はどうするのか?石の内部で作るわけです。

電源回路となれば当然出てくるのが、それなりの容量をもったコンデンサ。サンプル回路にも 2.2uF というそれなりのサイズのコンデンサが 2 個乗っています。

2.2uF もの容量を積めといわれれば、ふつーは電解コンデンサを載せたくなるわけで、電解2.2uF を乗せてみました。

そしたら、音が出たときに音が割れる。大きな音が出るときにびりびりと割れるような音になったり、音が一瞬とまったり。ためしに、Pin-5 VNEG にオシロを当ててみたところ、電圧が派手に踊ってました。

どうやら、電解の反応の遅さが効いてしまってるよう。仕方ないので、パラレルに 0.1uF 積層セラミックを追加して解決しました。

DSCN4601.JPG電源のパスコンは積層セラミックを使いましょう。

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

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

このアーカイブについて

このページには、2015年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2015年2月です。

次のアーカイブは2015年4月です。

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