Raspberry Pi I2S 出力で外部クロック使用 その2

前回、Raspberry Pi I2S 出力で外部クロックを使用できるようにしましたが
そのままでは44.1kHzの音楽ファイルしか正しく再生出来ません。
ちなみに48kHzな音楽ファイルを再生すると少しスロー再生になります。(´~`)

PLL1707のFS1LOWHIGHにしてやれば 48kHz44.1kHz を切り替えられるので、
i2sドライバ内でGPIOを操作してやればうまくいきそうな感じがしますよねぇ~

MPDの場合、音楽ファイルのフォーマットが変われば bcm2708-i2s.c の bcm2708_i2s_hw_params()関数が呼ばれることがわかっているので、ここにGPIO操作の処理を追加してやります。

bcm2708-i2s.c の適当な場所に
#include <linux/gpio.h>
を追加。
bcm2708-i2s.c の444行目辺りに以下のコードを追加します。
int myerr = gpio_request_one(4, GPIOF_OUT_INIT_LOW, "MyTest");
if (myerr == 0) {
  if (sampling_rate == 48000) {
    gpio_set_value(4, 0);
  } else {
    gpio_set_value(4, 1);
  }
  gpio_free(4);
}
これで音楽ファイルのフォーマットが48kHzの時はGPIO4LOWに、44.1kHzの時はHIGHになります。

あとはRPiのGPIO4とPLL1707のFS1を繋いでやればOKなのですが...
直接繋ぐと私の環境ではノイズだらけに...
配線を遠回りさせてやるとノイズが消えました...
素人にはわけわかめ謎すぎです( ̄~ ̄;)

でもまぁ、これでMPD48kHz44.1kHz混在プレイリストでも問題なく再生できるようになりました。ヽ( ´ー`)ノ
もちろん外部クロックにしているので曲間(フォーマット切り替わり時)でポップノイズみたいなのは出ません。




どうもPLL1707の出力にバッファを付ければ配線を遠回りさせなくてもノイズがでないもよう。
36MHzくらい出てるはずなので74AC14を付けてみました。
PIN9のGNDもつなぎ忘れてた~(;´д`)





0 件のコメント:

コメントを投稿