12
11
2016
BeagleBone + Botic で簡単DSD Native 再生(その4)
BBB/BBG用 I2S/DSD インタフェースの製作
BeagleBone Green でテスト中
BeagleBone Black でテスト中(デジタルアイソレータ仕様)
今回は、BeagleBone Black/Green と組み合わせて、Boticディストリビューション上で簡単に PCM(I2S) / DSD Native 再生を行うためのインタフェース回路を紹介する.今回の記事の対象者としては、電子工作の知識や経験がそれなりにあり、回路や使用するパーツなどある程度自分でカスタマイズできる人達を想定している.電源廻りや具体的な配線図などは一切載せていないので、この回路図で足りない部分を自分で補って最終形まで持って行けるだけのスキルが必要だ.
電子工作初心者がこの記事を見ただけで簡単に作ることは思わないが、電子工作の経験者の指導を受けながら作ればそれ程難しい事ではないだろう.
ES9018K2M DACチップを用いる理由
今回は手持ちのDIYINHKのES9018K2M DAC基板との組みあわせを前提に回路を試作してみた.何故、PCM179xやAK449xシリーズではなくES9018K2M なのかと言うと、DSD Native 信号の再生のために、I2CやSPIなどのシリアルインタフェースを用いてDACの内部レジスタを制御する必要がないからだ.
勿論、ES9018K2M でも細かなDACの制御を行おうとすると、DACの内部レジスタを制御しなければならないが、ES9018K2Mはデフォルトの状態でも、入力信号の種類を判別してPCM/DSDの切り替えを自動で行ってくれる.ESS社との間で秘密保持契約を結ばないとDACチップのデータシートを渡して貰えないので、個人レベルでは中々手を出せないので、ESSのDACチップを使った自作は半ば諦めていた.
DIYINHKのES9018K2M基板とXMOS系のUSB-DDCを使って色々な実験をしていたら、DAC側でDSD再生のための設定を何も行わない状態でも、きちんとDSD信号がネイティブのままで再生できていることに気付いた.
通常の PCM/DSD対応DACでは、DACチップの制御レジスタをDSDモードに切り替えないとDSD再生は行えないので、プレイヤー側で勝手にPCM変換されてDSD信号が再生されているのではないかと疑ってみたが、ES9018K2Mへの入力信号は紛れもなくDSD Native信号だった.
ES9018K2Mのデータシートできちんと確認しておきたい所だが、データシートを入手する術が無いのでそれも難しい.とりあえずこれまでの実験結果からは、 ES9018K2M DACチップは全自動? PCM/DSD切替え機能を有していて、ユーザが何もしなくても適切な形式のデジタルオーディオ信号を与えてさえいれば、DSDも簡単に再生できるということが確かめられている.ES9018K2MはDSD Native再生を一番簡単に実現可能なDACチップと言っても良いだろう.
【追記】
ES9038PRO DACチップを入手する関係で、ESS社のNDA同意書にサインしてESS社のデータシートを入手した.NDAに抵触する可能性があるので詳しい内容は話せないが、ESS社のDACチップはPCM/DSD/SPDIFの切り替えを自動で行うモードが備わっているようだ.他のメーカのDACチップと同じように、DACの制御レジスタの中にPCM/DSD切替えのための入力信号切り替えbitがあるが、同じレジスタの中に自動入力切り替えモードを設定するbitがあり、このモードがデフォルトで『I2S/DSD/SPDIF自動切り替え』に設定されている.
つまり、ESS社のDACチップに関しては面倒な切替え制御を明示的に行わなくても、デフォルト設定のままで勝手に入力ピンに入ってきたデジタルオーディオ信号の種類に応じて自動でモードを切り替えてくれるようだ.
この辺の痒いところに手が届くような仕様は流石ESS社と言ったところだろうか.旭化成エレクトロニクスもESSを見倣って自動切替えに対応してくれないかな...
参考回路
BeagleBone Black/Green用の参考回路 [ Botic 7 ] (クリックで拡大画像を表示)
・Botic 7 BeagleBone Black/Green用の参考回路 [PDF版]
今回は、BeagleBone Black/Green 上で、Botic ディストリビューションによる超簡単I2S/DSD Native再生プレイヤーの試作なので、必要最低限のパーツで組み立てることにする.使用するパーツもその辺(秋葉原、大阪日本橋、その他政令指定都市などのパーツショップ)で簡単に手に入るものばかりだ.中には一般的なパーツショップでは入手し難い物もあるかもしれないが、Digi-keyなどのネットショップを使えば、簡単に入手可能だ.
今回紹介する試作回路は、Boticのホームページ ”http://bbb.ieero.com” に書かれている内容をそのまま愚直に回路にしただけの簡単なもので、難しい所は一つもない.ただ一つ気を付けて貰いたいところは、先の記事でも触れてはいるが、BeagleBone Black/Green のハードウェアの準備が整う前に、P8/P9の拡張端子に外部から何らかの信号を入力してしまうと、かなりの確立でBeagleBone側のハードウェアが障害を起こすことだ.
私も、2台目のBeagleBone Blackを購入直後に、Cape Ready(P9 #14)信号が Enable (“Hi”)になる前に、Clock Selector ピン(P9 #24)に “Hi(+3.3V)” を入れてしまい、BeagleBone Blackを壊して(即死)しまっている.呉々も、Cape Ready(P9 #14)信号の状態をきちんと確認した上で、P8/P9拡張端子に外部から信号を入力することを心掛けて欲しい.ハードウェアの壊れやすさがBeagleBone系の最大の弱点だろう.
このCape Ready(P9 #14)信号は Botic 独自のもので、PWM(EHRPWM 1A – gpmc_a2) でコントロールしているようだ.他のLinuxディストリビューションではこの信号は生成されないので、Botic 以外でもI2S出力を利用するのであれば、このピン(P9 #14:gpmc_a2, EHRPWM 1A)の代わりに、DC +3.3V(P9 #3,#4)を用いる方が汎用的かもしれない.+3.3Vが立ちあがってから少し遅らせてから”Hi” にするのが安全だが、何らかのディレイ回路が必要になるだろう.
今回の参考回路では、電源廻りの記述を省略してあるので、パスコンデンサなど必要に応じて追加しておいて欲しい.水晶発振モジュールの電源ラインはノイズ対策用として給電側にインダクタを入れてあるが、+3.3V電源も+5VのラインからLowDropタイプの3端子レギュレータを介して給電している.
BeagleBone Black/Green 外部拡張端子 P9 のピンアサイン
先ずは、Boticが設定している、BeagleBone Black/Green 外部拡張端子 P9 のピンアサインを示しておくことにする.この設定は Botic のカーネルパラメータの設定 (”uEnv.txt” ファイル)次第で、各ピンの設定内容が変わるので、自分の設定に合致したピン配置を確認しておいて欲しい.
参考までに、”snd_soc_botic.serconfig=MD–” (第1チャネルを I2S/DSD #1 用に、第2チャネルをDSD #2 に設定)の場合のピンアサイン情報を載せておく.[ Botic 7 対応版に更新 ]
BeagleBone Black/Green のP9 拡張コネクタのピン配置 [ Botic 7 ]
外部マスタークロックジェネレータの構成
Boticの特徴として、外部のマスタークロック入力信号をベースに、BCK/LRCK/DATA のオーディオシリアル信号を生成させることができる.Raspberry Pi のI2S再生では、このような事はできないので、Raspberry PiのSoC(BCM237) の内部で生成されたBCK/LRCK/DATA の3種類のオーディオシリアル信号だけで再生可能なDACを用いなければならない.今回使用する ES9018K2Mはマスタークロック信号を入力しなくても再生できる仕組みを備えているが、PCM179xやAk449xシリーズなどのDACチップでは、マスタークロック信号が必須だ.
Boticでの外部マスタークロック信号の与え方は数パターン有るが、一番実用性が高い2系統の外部マスタークロックを使い分ける方法を採用する.実用性が高いというよりは、この方法以外には高品質な再生は不可能なので、Boticでは必須と言えるだろう.
2種類の外部クロックを使い分けるのは、44.1kHz/88.2kHz/176.4kHz/352.8kHzなどの44.1kHz系列のサンプリング周波数音源を再生する場合と、48.0kHz/96.0kHz/192.0kHz/384.0kHz 系列のサンプリング周波数音源とで、基準となるマスタークロックの周波数を切り替える必要がある事による.
マスタークロックの生成は、一般的な水晶発振モジュールから出力される信号をそのまま使用する.水晶発振モジュールにも様々な種類があり、発振精度や温度安定性、位相変調ノイズのレベルなど様々な要素を考慮しながら水晶発振モジュールを選択しなければならない.デジタルオーディオでは水晶発振モジュールの品質が全体の音質に結構影響を与えることが知られている.可能な限り高性能な水晶発振モジュールを使用したい所だが、今回は入手が容易( Digi-keyで購入可能)でかつ工作し易いサイズ(5mmx7mm)の物を使用することにした.
今回使用した水晶発振モジュールに関する情報
・FOX Electronics FXO-HC73 Series
5x7mmサイズの水晶発振モジュールをDIP変換基板上に載せ、8p DIPソケットで交換可能にしている
今回、外部マスタークロックジェネレータの参考回路を2種類載せておくことにした.どちらの回路を用いても構わないが、使用する水晶発振モジュールの仕様と周辺回路の作成の都合に合わせてどちらか一方を選択すれば良い.
水晶発振モジュール側でクロックを切替える場合の参考回路(Type #1)
マルチプレクサICでクロックを切替える場合の参考回路(Type #2)
最初の回路(Type #1) は、水晶発振モジュールの “Enable”端子を利用して、2種類のクロックを切り替える場合の参考回路で、もう一方(Type #2) は、両方の水晶発振モジュールの出力を、外部のマルチプレクサIC(74HC257) で切り替える場合の参考回路だ.どちらを用いても構わないが、必ず “Cape Enable” 信号(P9 #14)の状態が “Hi(1)” になってから、マスタークロック入力端子(P9 #25)にクロックを注入していることに着目しておいて欲しい.このため、何れの参考回路も、”3 Sates” タイプのロジックICを用いて、”Cape Enable” 信号が “Lo(0)”の状態では、出力ピン(Y) は ハイインピーダンス(“Hi-Z”)状態となり、回路から実質的に切り離されるようになっている.
PCM(I2S)/DSD信号の切替え回路
Boticでは、PCM(I2S) 信号とDSD信号の出力チャネル(ピンアサイン)を柔軟に構成できるので、それぞれ別に分けることができるが、一般的なDAC側の入力ピンはPCM/DSDで入力ピンを共用していることが多い.PCM179x, AK449x, ES901x シリーズでも入力ピンが共用されているので、DAC側の入力ピンの仕様に合わせた入力信号の切り替えが必要だ.
PCM/DSDの信号を切り替える方法として、先のマルチプレクサIC(74HC157/257など)を用いるのが一番簡単な方法だろう.今回は PCM(I2S)/DSD切り替え信号(P9 #26)によって、マルチプレクサの入力信号をA系列(PCM)とB系列(DSD) に切り替えている.今回の参考回路は、”snd_soc_botic.serconfig=MM–“, “snd_soc_botic.dsd_format_switch=1” に設定した場合で、DACに ES9018K2M を使用した場合の例なので、自分の環境に合わせた修正が必要だ.
AK449xシリーズではデフォルトのDSDの信号チャネルの割り当てが( DSD#1 => DSD-R, DSD#2 => DSD-L )となっているので注意が必要だ.尤も、AK449xシリーズでは制御レジスタの設定で L/R をソフトウェア設定で入れ替えることができるので問題はないだろう.但し、PCM179x, Ak449x シリーズで DSDを再生させるためには、I2S/SPI シリアル通信による、DAC制御レジスタのコントロールが必要なので、そのための別なコントローラと何らかのプログラミングが必要になる.
可能であればデジタルアイソレータをDACの手前に挟んでおくと良いだろう.デジタルアイソレータについては今回は回路図を載せていないが、過去の記事『Raspberry Pi 2 + Volumio + DAC でネットワークオーディオに挑戦(その5)』中で、TI ISO7640 を使用した参考回路が載っているので、参考にすると良いだろう.デジタルアイソレータの使い方はとても簡単なので、他の製品でも簡単に使うことができるだろう.
DSD信号テストデータを用いて、DSD再生信号のチャンネルアサイン状況をチェック
こちらは正弦波のテストトーン信号(左チャネル 1 kHz、右チャネル 2 kHz)
Roon Bridge化された BoticでDSD256音源を再生中の様子
おまけ
BeagleBone用のユニバーサルCape基板として幾つか出回っているようなので、sparkfun(Digi-keyで入手可能)と秋月電子(300円)で売っている基板を並べてみた.値段が数倍($9.95 USD)もするsparkfunのCape基板の方が作業可能なエリアも広く、電源ライン用の列なども用意されていて使い易そうだ.LEDやEEPROMまで付いているのでBeagleBoneで試作する場合には、是非ともお薦めの製品だ.
...という訳で、sparkfunのUniversal Cape Boardsを用いて、Botic 試作機 3号 を作ってみた.秋月で売られているボードよりも作業領域が広く、電源ラインなども考えられておりパーツの配置の自由度が大きいので、作業的には大部楽だ.何よりも見た目が格好良い.これで赤以外のカラーバリエーションがあれば文句なしなのだが...
今回は、マスタークロックジェネレータ用に低位相ノイズで定評がある日本電波工業(NDK)のNDK NZ2520SDシリーズを使用した.秋葉原辺りで入手するのは難しいかもしれないが、お馴染みの DIYINHK でバラ売りしてくれているので入手は比較的楽だ.米粒くらいのサイズで手作業で半田付けするのはちょっと辛い.ピンセットでつまみ損なって辺りに飛ばすと探すのが大変だ.
ちなみに、NDKでは自作派ディジタルオーディオマニア垂涎の恒温槽付超低位相雑音水晶発振器(DuCULoN®) NH47M47LA という製品があるが、見積もりを取らないと値段が分からないようなオーダー部品なので、私のような貧乏派自作屋さんには無縁の製品だろう.
ちなみに、DuCULoNのお値段は何と15万円だそうな... (『ハイレゾ音源を極める“15万円の水晶発振器”に迫る 』EE Times)
sparcfunのBBB/BBG用ユニバーサルボードを使った Botic試作機 3号
スペースの都合でI2Cアイソレータチップはソケットの内側に実装した
見た目もなかなか