y2blog » BeagleBone + Botic で簡単DSD Native 再生(その1)

12

04

2016

BeagleBone + Botic で簡単DSD Native 再生(その1)

BeagleBone + Botic の組み合わせで I2S & DSD Native再生をテストしてみた



BBB with Botic
BeagleBone BlackにI2S接続用のDACインタフェースを載せてテスト中

1号機&2号機
1号機はアイソレータ無しで、2号機は狭い基板上にアイソレータを無理矢理搭載

簡単なロジック回路で構成
今回は動作検証用なので、簡単なロジックICの組みあわせで手抜き試作

交換式マスタクロックモジュール
DIP 8 pin 変換基板にオシレータを載せて、簡単に交換可能にしてある


これまでRaspberry Pi で I2S 再生を試みてきたが、Raspberry Pi ではハードウェアの制約や特殊なハードウェア環境の自作、専用のドライバソフトウェアの開発など、相当な努力をしなければNative DSDの再生ができない.時間があれば挑戦してみたいが、苦労の割にはメリットが無さそうなのでRaspberry Piによるディジタルオーディオ再生は完全に足踏み状態だった.


I2S接続による再生が可能なのは Raspberry Piだけかと思っていたら、BeagleBone BlackやBeagleBone GreenなどのBeagleBone系のマシンでもI2Sが可能で有ることが判明したので、試しにBeagleBone Blackで簡単な自作回路を付加するだけで簡単にI2S再生ができたので、そのやり方を簡単に紹介しておくことにする.ダイレクトI2S接続方式による再生については情報が沢山あるのでそれ程苦労する事無く BBB/BBG + Botic の組みあわせで音出しが可能だが、DSD Native (ここではUSB接続のDDCを介さずに、DACを直接BBB.BBGのGPIOポート [P8, P9] に接続することを指す)再生についても、ESS社の ES9018K2M などの自動DSD再生可能なDACを用いれば、I2C/SPI などでDACチップの制御レジスタを弄ることなく、いとも簡単にDSD Naive 再生が出来てしまう.これまでRaspberry Piなどで実現しようとして考えあぐねていた事が、あっけないほど簡単に実現できてしまったので拍子抜けしてしまったぐらいだ.


...と言う訳で、Raspberry Pi を捨てて、BeagleBoneによるデジタルオーディオシステムに完全に移行することにした.


BeagleBoneによるデジタルオーディオシステムについてはとても1回で紹介しきれないので、今後記事を数回に分けて紹介して行くことにする.先ずは BeagleBone 系のシングルボードコンピュータと “I2S/Native DSD” 再生を可能とする “Botic” ディストリビューションについて照会する.次に Botic の最新版へのアップデート方法と必要最低限のLinux OSの環境構築、I2S/Native DSD 再生のためのハードウェア(BeagleBoneでは本体の上にスタックする拡張ボードの事をケープ “cape” と読んでいる)の自作について紹介する予定だ.最後に Botic 上で MPD による再生以外に、巷で話題の Roon の再生機(RoonBridge化)として活用させる方法についても紹介することにしよう.



先ずはBeagleBone について


Raspberry Piと違ってBeagleBone系のマシンはハードウェア情報や回路図が公開されており、自作のハードウェアを安心して組み合わせることができる.現在日本では BeagleBone Black(BBB)とBeagleBone Green (BBG) の2機種が比較的容易に入手可能だ.この2機種とも秋月電子で販売されているので、地方の人でも通販で入手できるだろう.秋月電子での販売価格は、BBBが6,500円、BBGが4,980円(いずれも税込価格)なので、Raspberry Piと同じレベルの金額だ.


【秋月電子の製品情報】
  ・BeaglBone Black (Element14)
  ・BeaglBone Green (Seeed Studio)

BBBとBBGの違いはHDMI系の表示機能が有るか無いかの違いが大部分で、それ以外の機能はほぼ同じでソフトウェア的にはBBB/BBGのどちらでも同じように動作するということだ.ディジタルオーディオ用途にはHDMI系のノイズの影響が少ないBBGの方が適していると思われる.


BeagleBoneについての詳しい情報は、御本家の BeagleBoard.org のホームページを見るのが一番だ.日本ではあまり BeagleBone関係の書籍は出回ってはいないが、CQ出版社の インタフェース Special 2014年3月号 “LinuxガジェットBeagleBone BlackでI/O” が参考になりそうだ.


BBB/BBGのプロセッサ TI AM3358はデジタルオーディオ用途に最適


BeagleBone系のシングルボードコンピュータで使われているTI製のTI AM3358 Sitara Processorには McASP(Multichannel Audio Serial Port) というデジタルオーディオ用の汎用シリアルインタフェース機能が備わっており、この機能を使うことで比較的簡単にデジタルオーディオインタフェースを組むことが可能だ.


McASP の機能をホームページ上の説明から引用すると、


となっており、まさにデジタルオーディオのための機能だ.



【Texas Instruments社の McASP関連資料】

 ・「TMS320C6000 DSPマルチチャネル・オーディオ・シリアルポート (McASP) 」

 ・ Tools and Techniques for Audio Debugging

 ・ Interfacing DRA7xx Audio to Analog Codecs

自分でMcASP関連のドライバなどを開発する際には参考になりそうだが、単に Boticなどを利用して再生だけを行うのであればここまで深入りする必要は無さそう.



【BeagleBone Black/Green の技術資料の入手】



BBB/BBG のI2S再生で登場する “Botic” とは


一言で説明するのは難しいが、簡単に言ってしまえば BeagleBone用に開発された、MPDを搭載したプリコンパイル済みのLinuxディストリビューションで、I2S/DSD Native 再生可能なデジタルオーディオに特化したものと解釈すれば良いだろう.”Botic”に関する詳しい情報は、開発者である Miroslav Rudišin さんのホームページ ”BeagleBone Black with I2S, DSD and SPDIF interface” [ http://bbb.ieero.com ] を参照して欲しい.(開発者の情報がホームページには記載されていないので、この名前で正しいのかどうか良く判らないが、このドメインの Whois 情報や DIY Audioのサポートページ、GitHubなどから推定した.間違っていたらご免なさい...)


“Botic” ディストリビューションを利用するのは、上記のホームページを参考にすれば難しいことはないが簡単に紹介しておく.先ず最初に注意書きが書かれているので、ここでも注意書きを要約しておくことにする.


 ・BeagleBone Black/Green を外部クロックを用いずに 44.1kHz系(88.2kHz, 176.4kHz, 352.8kHz,…)のオーディオファイルを再生すると、48kHz系列でリサンプリングされてしまう.(多分ピッチが速くなってしまい聞くに堪えない)

   ⇒ 内部クロックでは 48kHz系列しか対応できない


要はCDなどの44.1kHz系列の音源を聞く場合には、外部クロックジェネレータを用いて、44.1kHz/48.0kHz系列の音源を再生できるようにする必要があるという事のようだ.


 ・BeagleBone Black(Green) とDACハードウェアとを直接接続することは推奨しない(何らかのアイソレータを用いて接続する事を推奨)
   ⇒ Beagle Bone はデリケートで壊れやすい


この作者と同じように私もBBBを1台購入後直ぐに壊してしまったので、Beagle Boneが壊れやすいのは本当のようだ.


【ステップ 1】Boticのインストール


インストール手順としては先ず、 “BeagleBone Black with I2S, DSD and SPDIF interface” ホームページ内のダウンロードリンク “http://bbb.ieero.com/botic4” からBotic V4イメージ “bbb-botic-v4-1gb.img.gz” をダウンロードし、解凍後に1GB以上の容量を持つ Micro SDカードにイメージファイルを書き込む.この辺の手順は個人の環境によって大きく異なるので、ここでは私のiMac環境で実施したときの様子を示しておく.基本的に Volumio などの場合と同じ手順なので、コマンドラインが苦手な場合は、イメージ書き込み用のツールを使えば良い.




【ステップ 2】BBB/BBGを Micro SDカードから起動させる


BeagleBone系のシングルボードコンピュータは、電源を繋いで単純に起動すると内蔵のeMMCと呼ばれている内部ストレージシステムから起動するように設定されており、BeagleBoard 謹製の Aungstrom Linuxと言うディストリビューションが起動するようになっている.Micro SDカードに組み込んだ “Botic” を起動させるには、S2スイッチを押しながら電源投入する(あるいはS3スイッチによる起動)必要がある.


最初はこの起動方法に慣れていないので、上手く行かずにeMMC側のAungstrom Linuxが立ち上がってしまうことが間々あるが、このような場合は一旦S3スイッチのPower Button を数秒間押し続ければ、自動的にLinuxがシャットダウンされて電源まで落ちる仕組みになている.Aungstrom Linux に限らず、 Botic でも同じ仕組みなので、BeagleBone ユーザは必ずこのシャットダウン方法をマスターして置く必要がある.


一度、このS2スイッチを押しながらMicro SDカードから起動させると、次回からはMicro SDカードが優先起動されるようになるようだ.一旦shutdownして電源を落としても、次回はMicro SDカードから起動されるようになる.但し、Micro SDカードを抜いた状態で電源を投入してしまうと、起動優先順位が元のeMMCからの起動に戻ってしまうようなので、常にMicro SDカードからの起動を行いたい場合は別な方法で優先起動順序の変更が必要になる.


ブートデバイスの起動順序を変更する方法については別な機会に紹介するが、”BeagleBone Green System Reference Manual” 5.3.5 Boot Modes (Page 17)、および “ BEAGLEBONE_GREEN SRM(v1a)(pdf) ” – 6.7 Boot Configuration (Page 67) を参照すると良いだろう.



Bootup Operations
起動モードを切り替える S2 SW(赤)と Power コントロール用の S3 SW (黄)


【追記】BeagleBone GreenでBotic 4 イメージを起動させる方法


これまでBeagleBone Black でBotic 4イメージを起動させた後に、Botic 7へアップデートしていたので気が付かなかったが、BeagleBone GreenではBotic 4が正常に起動しないことに気が付いた.Botic 4 のbootの際にメッセージをコンソールで確認したところ、カーネルモジュールのロードで ”dtb=am335x-bonegreen.dtb” が見つからないというメッセージを吐いていた.どうやらBeagleBone Green に関するdtbファイルが置かれていないので、ここでOSの起動が止まってしまうようだ.BeagleBone Green用のdtbファイルを作れば良いのだが、とりあえずBeagleBone Black用のdtbファイルをそのまま使うことで、OSの起動ができるようになることを確認したので、簡単に方法を紹介しておく.



 【解決方法】ルートファイルシステムを ext4 ファイルシステムを読み書きできるコンピュータでマウントして、BeagleBone Black用のdtbファイル “am335x-boneblack.dtb” のシンボリックリンクを “am335x-bonegreen.dtb” という名前で作成する.

Linux初心者にとってはあまりにも不親切な説明かもしれないが、上記の説明が理解できないようであれば明らかにスキル不足なのでBeagleBone Blackを使った方が良いだろう.




無事、Botic を起動させることに成功したら先ず最初に行わなければならないことは、自分に割り当てられたIPアドレスを知ることだ.デフォルトのインストール状態では DHCPクライアントモードでIPアドレス等の情報が設定されてしまうので、Boticの設定を変更するには ssh コマンドを用いて、管理者アカウント(root) でBoticにログインしなければならない.LinuxやUNIX系のOSを扱い慣れた人で在れば簡単な作業ではあるが、初心者にとってはこのIPアドレスを調べる事が最初の難関だろう.


DHCPで割り当てられたIPアドレスを特定する方法については幾つか方法があるが、ネットワーク関係の専門知識がないと結構大変だ.大抵の場合はブロードバンドルータのDHCP機能を使っているので、ブロードバンドルータのWeb GUI等を通じて割り当てられたIPアドレスを確認できるだろう.尤もこんな簡単な方法でも一般のユーザにとっては敷居が高いかもしれない.


普通のLinuxディストリビューションではコンソール画面にログインして自分自身のIPアドレスがどうなっているのか簡単に調べることができるが、BoticではHDMIディスプレイを繋いでもコンソール画面が表示されない.BeagleBone Green に至ってはHDMIディスプレイ端子すら存在しない.シリアル通信用のTTY接続という手もあるが、こちらの方も初心者にはそう簡単には手が出せない代物だ.


幸いなことに、初心者でもDHCPで割り当てられた情報を簡単に取得するためのツールが出回っているようなので、Mac用のツールを使った例を紹介しておく.Andoroid 用の “Fing – Network Tools” や Windows 用のツールも窓の杜(http://forest.watch.impress.co.jp/library/nav/genre/inet/servernt_netanlz.html )等で探し出すことができるだろう.Mac用のツールはあまり出回っていないようだが、”LanScan” というアプリが AppStore 経由で入手可能だ.


参考までに、LanScanでネットワークの情報を調べた時の様子を載せておく.


ネットワークスキャン実施
LanScanを起動しLANをスキャンすると現在アクティブな機器の一覧がリストアップされる

一般的なユーザであれば家庭内のLANは一つしかないので、このスキャン画面上でBoticをインストールしたBBB/BBGが直ぐに見つかると思うが、私の環境はちょっと変則的なので、この画面上には表示されていない.今回 Botic を繋いだLANはオーディオ専用の別なLANに接続してあるので、デフォルトの有線LAN “en0” 側では見つけることができない.LanScanでは別なLAN(画面上では vlan1)についても同じようにスキャン可能なので、オーディオ専用のLAN “vlan1” の方をスキャンして見ると、今度はきちんと画面上にリストアップされているのが確認できる.点線の赤枠が今回の Botic だ. 192.168.101.30 に “botic” というホスト名で登録されているのは別なテスト運用中の Botic マシンだ.


別なLANをスキャン
今度は 新しくインストールしたBotic が見つかった(点線の赤枠)

【ステップ 4】ssh で Boticにログインする


IPアドレスさえ判明すれば、後は sshコマンドなどで Boticにログインするだけだ.Macであれば ”Terminal(ターミナル)”アプリを起動するか sshログイン可能な別なアプリを起動すれば良い.Windows系であれば、TeraTerm等のSSH対応アプリを使えば良い.Linuxユーザであれば説明の必要すらないだろう.デフォルトで root ユーザでsshログイン可能な状態になっており、rootの初期パスワードは “botic” になっている.勿論この状態では家庭内と言えどもセキュリティー的に問題があるので、自分で設定を変更することが出来る人は、別な作業用アカウントを設定してリモートから root ログインできないように設定を変更しておくべきだろう.最低でも root のパスワードだけは変更しておいて欲しいところだ.



【ステップ 5】(必要があれば)IPアドレスを固定化する


RedHat系のLinuxに慣れている人にとっては、Debian系(特に最近の)のディストリビューションのネットワーク系の設定方法は分かり難く結構難儀するだろう.ネット上の情報はグチャグチャで未だに何が正しい設定方法なのか良く判らない.たかが固定IP化のためだけに結構な時間を食い潰してしまった.Debianの公式マニュアルを見ても余計混乱するだけなので参照するだけ無駄だ.もっとシンプルな設定方法にして欲しいところだ.


とりあえず、Botic(Debian wheezy系) に関しては “/etc/network/interfaces” ファイルの設定変更だけで何とか固定IPアドレス化できたが、Jessie などの他のディストリビューションでは一筋縄で行かないことが多かった.


“/etc/network/interfaces” の中身を書き換える


テキストエディタは nano, vim など使い慣れたもので構わないが、BoticはLinuxなので行末コードは LF なので、Windows系しか使った事の無いユーザは使用するエテキストディタの行末コードに注意して欲しい.変更する内容は実際のユーザ環境に合わせて設定する必要があるが、変更すべき箇所が判らないと言う人は、Boticを固定IP化させる事は止めて置いた方が良いだろう.そのような人にとって固定IP化するメリットは殆どない.



BBB/BBGでは USBインタフェース仮想的なネットワークインタフェースとして利用することが可能なので、上記の “interfaces” ファイルにはこのインタフェース “usb0” に関する固定IPアドレス設定が記載されている.これを利用すれば最初からIPアドレスが固定された状態なので、わざわざDHCPで割り当てられたIPアドレスを調べなくても済む筈だが、まだ試してはいないので、そのうちこの “usb0” インタフェースの利用について紹介することにする.


“reboot” コマンドによる再起動では、自動的に起動デバイスが引き継がれるので、再起動時に “S2” スイッチを押し続ける必要はない.


再起動後に新しい固定IPアドレスでsshできれば固定IPアドレス化が成功だ.上手く行かない場合は、変更前のIPアドレスを指定すれば大抵の場合はログインできるだろう.前のIPアドレスでログイン出来ない場合は、DHCPサーバによって別な新しいIPアドレスが割り当てられてしまった可能性が強いので、先程と同じ方法で新しいIPアドレスを確認すれば良い.何度やっても固定IPアドレス化が上手く行かない場合は、クライアント側での固定IP化を諦めてDHCPサーバ側でBoticに割り当てるIPを固定化する方法も検討してみるのも良いだろう.まともなインターネットルータであれは、DHCPサーバ機能のオプションとして固定IPアドレスリースが可能な筈だ.



【ステップ 6】(必要があれば)Micro SDカードのLinuxパーティションを拡張する


初期インストール状態の Botic は 1GBのSDカードにインストールする前提で作成されている.4GBや8GBなどの容量のSDカードを用いた場合は、最初の1GBしか使われないので、Linux用のパーティションをSDカードのサイズ一杯まで広げておくと都合が良い.Linuxパーティションを拡張する方法も幾つかあるが、パーティション拡張用の専用スクリプトが “/opt/scripts/tools/” 配下に用意されているので、このディレクトリにある “grow_partition.sh” シェルスクリプトを利用するのが簡単だ.4GBの Micro SDカードでルートパーティション拡張を実施した時の様子を下記に示す.





【ステップ 7】NTPによる時刻設定を行う


初期インストール状態の Boticでは日時がきちんと設定されていない場合があるので、日時をNTPを使ってシステムの日付け設定を正確な日時に合わせておく必要がある.先ずは”date” コマンドで現在設定されているシステムの日時を確認しておく.合っていない場合は、ntpdateコマンドで正確なNTPサーバと同期を取る.UTCからJST へ表示を変えたい場合はシステムのロケールを変更しておく.



一般的なサーバ用途であれば、NTPサーバ機能をインストールして他のNTPサーバと同期を取ることが普通だが、できる限り余計なプロセスは走らせたくないので、ユーザ起動スクリプト “/etc/rc.local” に ntpdate コマンドを設定して、OS起動時に自動的に時刻合わせを行うように設定しておくと良いだろう.


“/etc/rc.local” を編集後、再起動し timedatectl コマンドできちんと設定されていることを確認しておく.




長くなってしまったので、続きは『BeagleBone + Botic で簡単DSD Native 再生(その2)』で.




【おまけ】シリアルコンソール接続


DHCPで割り振られたIPアドレスを突き止めるのはそれなりに厄介なので、別な方法としてシリアルコンソール接続によるログイン方法を紹介しておく.ネットワーク屋さんや組み込み屋さんの世界では今でもこのシリアルコンソールによるログインが日常的に使われている.UNIX系の世界ではTTYコンソールとも呼ばれているが、TTYは Tele TYpe(テレタイプ)の略で、何十年も前から使われてきた超レガシーな通信インタフェースだが、未だに現役バリバリだ.困った時のシリアルコンソール接続はエンタープライズ系ITの世界では常識だ.


シリアルコンソールを利用するには、Windows系では TeraTerm などのコンソールアプリが比較的豊富に出回っているが、Mac系のアプリはあまり出回っていないようだ.Macではアプリを使わずとも、標準のTerminal アプリ上で screen コマンドを使うことで簡単にシリアルコンソール通信が利用可能だ.


BeagleBone Black/Green でシリアル通信を行うには、3.3V系のUSB-シリアル変換ケーブルを利用するのが簡単だ.BeagleBoneではシリアルコンソール用の6列シングルインラインタイプのヘッダーピンが最初から用意されており、このヘッダーピンの仕様にあったUSB-シリアル変換ケーブルが売られている.


【BeagleBone直結可能なUSB-シリアル変換ケーブル】

 ・FTDI USB・シリアル変換ケーブル(3.3Vタイプ)[TTL-232R-3V3]

      秋月電子: http://akizukidenshi.com/catalog/g/gM-05840/ 
 
     Digi-Key : FTDI, Future Technology Devices International Ltd TTL-232R-3V3

   ・スイッチサイエンス: FTDI USBシリアル変換アダプター Rev.2
 
 
 

USB-Serial Connection
BeagleBone とUSB・シリアル変換アダプタモジュール

USB-Serial Usage
シリアルピンヘッダーに直接挿すことが可能

Macの標準Terminalアプリで使うには、先ずはFTDIの専用ドライバーをFTDIのダウンロードページから取得しインストールしておく.ドライバが正常にインストールされていれば、USB・シリアル変換アダプタケーブル(モジュール)を接続すると、OSがそれを自動認識し、シリアルコンソール(TTY)デバイスとして組み込まれる.組み込まれているうかどうか確かめるには、”/dev” ディレクトリ配下を覗いてみれば分かる.


通常は、”/dev/tty.xxxxxxx” のような名前で登録されるので、先ずはデバイスの一覧を表示してみると良い.数十〜百程度似たような名前のデバイスがリスティングされてしまうので探すのが大変だが、

%ls -la /dev/tty.*

などで対象を絞ると良いだろう.デバイス名だけで判断が付き難い場合は、USBケーブルを抜き差しすれば、/dev 配下に現れたり消えたりするのでそれで確認できるだろう.



上記の例では、”tty.usbserial-DN01EB1D” というのが、写真に写っている スイッチサイエンス製のUSB・シリアル変換モジュールだ.


デバイス名が分かれば、後はscreenコマンドのパラメータとして、このデバイスと通信速度を指定すれば良い.screenコマンドの修了方法が初心者にはちょっと判り難いが、終了させるには CTRL+a, k (コントロールキーを押しながら “a” をタイプし、その後単独で “k” キーを打つ)で screenコマンドを抜け出すことができる.


BeagleBoneのシリアルコンソールはデフォルトで 115200 bps なので、screen コマンドのパラメータは、

  screen  /dev/tty.usbserial-DN01EB1D  115200

となる.”usbserial-DN01EB1D”の部分は各自のデバイスによって異なるので、自分のデバイス名に合わせること.



Local Search

Calendar

March 2017
S M T W T F S
« Dec    
 1234
567891011
12131415161718
19202122232425
262728293031  
  • Blogroll