Banana Pro + PCM5102A DAC
HOME BACK

はじめに

「Banana Pi + MPD について」では Raspberry Piの亜種のSingle Board Computer(SBC)であるBanana PiにMPDを組み込んでMusic Serverのいたずらを行った。
ただ、残念なことにBanana PiではI2Sがサポートされていないので、PCM5102AのようなDAC-ICを組み合わせることができない。
ところがBanana Piの上位機種であるBanana ProではI2Sがサポートいるようである。
ネット検索すると中華通販サイトであるAliExpressにリストされていたので、注文したら、約2週間後に到着した。
本体+ヒート・シンク+SATAケーブル付きで$56.00であった。

左は到着した箱入りのBanana ProとSATAケーブル

右は箱の中身で、本体、ヒート・シンク、Wifi用アンテナ、ガイド・ブック

参考サイト

Banana ProはBanana Piの上位機種であるので、「Banana Pi + MPD について」で作り込んだimgファイルを吸い上げてマイクロSDカードにddでコピーすると問題なく動作する。
しかし、本来の目的であるI2Sドライバーを組み込もうとしたが、筆者のスキルではダメであった。

ネット検索すると、Banana ProとI2Sを組み合わる方法を解説しているサイトがヒットしたので、こちらを参考した。
https://volumio.org/forum/banana-pro-any-experiences-t2367.html

このサイトで紹介されているI2Sをサポートしているrawファイルは以下からダウンロードできる。
http://mirror.igorpecovnik.com/Bananapi_Debian_2.2_wheezy_3.4.106.zip

ダウンロードしたBananapi_Debian_2.2_wheezy_3.4.106.zipのサイズは約310MBで、これを解凍すると以下のrawファイル(約1.2GB)が出来る。
Bananapi_Debian_2.2_wheezy_3.4.106.raw
このrawファイルをマイクロSDカードに書き込むことになる。
Win7PCでWin32DiskImagerを使用して4GBのマイクロSDカードへの書き込んた。
書き込み等の詳細はRaspberry PiへRaspbianへのインストールを解説した「Raspberry Piのいたずら」を参照してもらいたい。

セットアップ

rawファイルを書き込んだマイクロSDカードをBanana Proに装着し、HDMIモニター、LANケーブル、キーボードを接続してブートする。

id:root pw:1234

でログインするが、 すぐに、pw:1234を変更するように促されるので、適当なpwを入力すると下記のようなコマンドラインが現れる。
Last login: Fri Jan 1 01:01:57 2010

Load: 0.10, 0.12, 0.05 - Board: 37.8°C - Memory: 954Mb

root@bananapi:~#

デフォルトでsshサーバーが稼働しているので、ifconfigでDHCPで割り振られたIPを調べて、これ以降はsshクライアントからアクセスする。
root@bananapi:~# ifconfig
eth0 Link encap:Ethernet HWaddr 02:d7:05:03:31:77
inet addr:192.168.0.112 Bcast:192.168.0.255 Mask:255.255.255.0

DHCPサーバーで割り当てられたIPは場合によっては変わってしまうので、IPを固定する。
以下のコマンドで /etc/network/interfaces を編集する。
iface eth0 inet dhcp をコメントアウトしてiface eth0 inet static 以下を追加した。
root@bananapi:~# vi /etc/network/interfaces

# Wired adapter #1
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.91
netmask 255.255.255.0
gateway 192.168.0.1

リブート後、現状のオーディオ関係の状態をチェックする。
root@bananapi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sunxicodec [sunxi-CODEC], device 0: M1 PCM [sunxi PCM]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sunxisndhdmi [sunxi-sndhdmi], device 0: SUNXI-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0

root@bananapi:~# cat /proc/asound/cards
0 [sunxicodec ]: sunxi-CODEC - sunxi-CODEC
sunxi-CODEC Audio Codec
1 [sunxisndhdmi ]: sunxi-sndhdmi - sunxi-sndhdmi
sunxi-sndhdmi

cardは2つあり、PCMとHDMIをサポートしていることが分かる。

次に初期化scriptを変更するために以下のコマンドを実行する。
上記の参考サイトではbananapro.binと表記されているが、実際のファイル名はbananapipro.binである。
# cd /boot
# bin2fex bananapipro.bin bananapi.fex

次にbananapi.fexを編集する。
# vi bananapi.fex
かなり下にある[i2s_para]のi2s_used = 0 を1に変更する。
[i2s_para]
i2s_used = 1
i2s_channel = 2
i2s_mclk = port:PB05<2><1>
i2s_bclk = port:PB06<2><1>
i2s_lrclk = port:PB07<2><1>
i2s_dout0 = port:PB08<2><1>
i2s_dout1 =
i2s_dout2 =
i2s_dout3 =
i2s_din = port:PB12<2><1>

次に[i2s_para]の下にある[leds_para] を赤字のように変更する。
[leds_para]
leds_used = 1
leds_num = 2
leds_pin_1 = port:PH24<1><0>
leds_pin_2 = port:PG02<1><0>
leds_name_1 = "green:ph24:led1"
leds_name_2 = "blue:pg02:led2"
leds_trigger_1 = "default-off"
leds_trigger_2 = "default-off"

変更したbananapi.fexをbananapi.binとして保存する。
# fex2bin bananapi.fex bananapi.bin

リブート後、オーディオ関係の状態を再チェックする。
root@bananapi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sunxicodec [sunxi-CODEC], device 0: M1 PCM [sunxi PCM]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sunxisndi2s [sunxi-sndi2s], device 0: SUNXI-I2S sndi2s-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: sunxisndhdmi [sunxi-sndhdmi], device 0: SUNXI-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0

oot@bananapi:~# cat /proc/asound/cards
0 [sunxicodec ]: sunxi-CODEC - sunxi-CODEC
sunxi-CODEC Audio Codec
1 [sunxisndi2s ]: sunxi-sndi2s - sunxi-sndi2s
sunxi-sndi2s
2 [sunxisndhdmi ]: sunxi-sndhdmi - sunxi-sndhdmi
sunxi-sndhdmi

card 1がI2Sをサポートしていることが分かる。

また、I2Sの信号はcon6の40ピンヘッダーに以下のように現れる。
pin 35 = LRCK
pin 36 = BCLK
pin 39 = GND
pin 40 = DATA

左写真で40ピンヘッダーの左上が2ピン、その下が1ピン、右上が40ピン、右下が39ピンとなる。

動作確認

DAC-ICをI2SでBanana Proと接続して動作確認をしてみる。
最終的にはBanana ProのSATAポートにHDDかSSDを接続して一つのケースにまとめたいと思っているので、今回は実験的にDAC-ICが動作するかを確認する。

Raspberry Pi+PCM5102A DACではRaspberry PiにPCM5102Aを組み合わせたが、写真のようにRaspberry Piの換わりにBanana Proを接続してみた。
動作確認だけなので、ケースの上蓋を外し、ボール紙で台をつくり、紐でBanana Proを固定した。

動作確認に必要なソフトをインストールする。

最初にMPD関係である。
# apt-get install mpd mpc
次にalsa-utilsをインストールする。
# apt-get install alsa-utils

次は自作NASに接続するためcifs関連のソフトをインストールする。
# apt-get install cifs-utils

リブート後、 MPDの設定ファイルである /etc/mpd.conf を編集する。
# vi /etc/mpd.conf
最初に bind_to_address という行を探し#でコメントアウトする。
#bind_to_address "localhost"

次の箇所を赤字のように編集する。
audio_output {
type "alsa"
name "My ALSA Device"
device "hw:1,0" # optional
# format "44100:16:2" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "1" # optional
}

設定が終わったら、MPDを下記のコマンドで再起動する。
# /etc/init.d/mpd restart
# /etc/init.d/mpd restart
Stopping Music Player Daemon: mpd.
Starting Music Player Daemon: mpdlisten: bind to '0.0.0.0:6600' failed: Address already in use (continuing anyway, because binding to '[::]:6600' succeeded)
.
bind to '0.0.0.0:6600' failedのエラーであるが、 Binding to IPV6 before IPV4 とのことで、以下のように記述すると解消される。
#bind_to_address "localhost"
bind_to_address "127.0.0.1"
bind_to_address "192.168.0.91"
ただし、筆書の場合、エラーが出たままでも問題なく動作しているが、気になるようであれば追加されたい。
なお、"192.168.0.91"はNICに割り当てたIPである。

自作NASに接続できるように/etc/fstabを編集する。
# vi /etc/fstab
//192.168.0.95/Music /music cifs username=root,password=samba,uid=mpd,file_mode=0644,dir_mode=0755,iocharset=utf8 0 0
次は / に music ディレクトリーを作りマウントし、/var/lib/mpd/musicへリンクする。
# mkdir /music
# mount -a
# ln -s /music /var/lib/mpd/music

リブートして完了である。

試聴

MPDクライアントソフトのGMPCを立ち上げて、Update Databaseを試みるがNASの楽曲データを取り込めないようである。

# mount -a

を実行したら、ようやく取り込みを始めた。
Banana Proをシャットダウンすると/etc/fstabの設定がうまく動作しないようである。
このような現象はBanana Proが初めてであるが、立ち上げる度に
# mount -a
を実行するのも面倒なので、crontabに以下のような記述をした。
#crontab -e
@reboot mount -a
これで、Banana Proが立ち上がると自動的に
# mount -a
が実行される。

これでNASに格納されているハイレゾ楽曲ファイルも無事に試聴することができた。

これは、192kHz24BIT楽曲ファイルを再生した時のDACデバイスの情報である。
# cat /proc/asound/card1/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S24_LE
subformat: STD
channels: 2
rate: 192000 (192000/1)
period_size: 4096
buffer_size: 16384

OSとMPDのバージョンは以下のとおりである。
# uname -a
Linux bananapi 3.4.106-bananapi #6 SMP PREEMPT Tue Feb 17 00:16:57 CET 2015 armv7l GNU/Linux

# mpd -V
mpd (MPD: Music Player Daemon) 0.16.7

SSDの接続確認

Banana Proを導入した目的は、SBCにI2S-DACと楽曲ファイルを格納したSSDやHDDを組み合わせてみることであった。
とりあえず、I2S-DACはOKとなったので、手持ちのSSDを組み合わせてみた。
組み合わせたSSDはVoyage MPD on NUC (DN2820FYKH)で使用中のもので、2.5インチ120GB、Voyage MPDをインストールしてあり、楽曲ファイルも格納されている。
写真のようにBanana Proを購入した時に付いてきたSATAケーブルを使用してSSDを接続した。
このSATAケーブルには電源用のコードもあるので、これをBanana Proのコネクターに差し込めばOKである。

接続したSSDのデバイス名を確認する。
# dmesg
[ 1.056804] sd 0:0:0:0: [sda] 234441648 512-byte logical blocks: (120 GB/111 GiB)
[ 1.059852] hub 3-0:1.0: USB hub found
[ 1.063598] sd 0:0:0:0: [sda] Write Protect is off
[ 1.067641] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.070528] hub 3-0:1.0: 1 port detected
[ 1.078678] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.080778] [sw-ohci2]: open clock
[ 1.083666] sda: sda1

120GBSSDはsda1であることが分かった。

これを/musicにマウントするが、その前に/etc/fstabに記載してあるNAS接続をコメントアウトしておく。
# vi /etc/fstab
#//192.168.0.95/Music /music cifs username=root,password=samba,uid=mpd,file_mode=0644,dir_mode=0755,iocharset=utf8 0 0

以下のコマントで/musicにマウントする。
なお、120GBSSDのファイル・システムはext2である。
# mount -t ext2 /dev/sda1 /music

MPDクライアントのGMPCを立ち上げて、Update Databaseを行い、Databseをクリックすると無事、120GBSSDの中身が確認できた。
/music/musicに楽曲ファイルが格納されているので、それを選択すると再生が始まった。

このままではリブートするとアンマウントされてしまうので、/etc/fstabに以下を追加して起動時にマウントされるようにした。
# vi /etc/fstab
/dev/sda1 /music ext2 defaults 0 0

まとめ

これで、Banana Proの導入目的である、I2S-DACと楽曲ファイルを格納したSSDやHDDの組み合わせにめどが付いたので、ケースに入れてみる。
ケースはタカチのYM-250(W:250mm H:50mm D:170mm)とし、HDDは東芝の2.5インチ500GB、 DACは「Raspberry Pi+IrBerryDAC」から PCM5102A基板をDAC後の平衡用トランスも含めて移植した。
内部の配置は写真のとおりであるが、そこそこ窮屈である。
5V電源は簡単な分配回路を作り、念のため、DACへは1オームの抵抗とフェライト・ビーズを経由して供給した。

500GBHDDはdev/sdaとして認識されたので、fdiskで全体を一つのパーテーションとした。
Device Boot Start End Blocks Id System
/dev/sda1 2048 976773167 488385560 83 Linux

次にext4でフォーマットする。
# mkfs -t ext4 /dev/sda1

これを/musicにマウントするために/etc/fstabに以下の行を追加した。
/dev/sda1 /music ext4 defaults 0 0

筆者は楽曲ファイルの管理はWin7PCのiTunesで行い、楽曲ファイルは自作NASに格納しているが、本機にもsambaをインストールしておけば、このNASに格納した楽曲ファイルをWin7PC上でドラッグするだけで簡単に移動させることができる。
samba関連の2つのソフトをインストールする。
# apt-get install samba
# apt-get install samba-common-bin

sambaの設定ファイルを編集し下記を追記する。
# vi /etc/samba/smb.conf
[music]
comment = music
read only = no
locking = no
path = /music
guest ok = yes
force user = root

次にpasswdを設定する。
今回はsambaとした。
# smbpasswd -a root
New SMB password:samba
Retype new SMB password:samba

sambaを再起動して完了である。
# service samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

Win7PCから本機の /music へアクセスする場合、スタートボタンのすぐ上の検索窓に \\192.168.0.91(本機に設定した固定IP) と入力し、次に検索されたコンピュータをクリックし、 ID:root、PASSWD:samba とタイプすると共有フォルダー /music が見えるはずである。
これで楽曲ファイルをNASから本機の /music へドラッグするだけでコピーすることができる。

これまでは5V3AのACアダプターを電源として使用したが、Music Serverとして完成したので、5V リニア電源に変えてみた。
この電源は5V2Aなので容量が足りるか不安であったが、再生しながらファイルをコピーする等の作業をしても問題なかった。

追補

新たにBanana Proを購入してES9018K2M DACと組み合わせようとしている。
I2Sをサポートしたイメージ・ファイルが必要なので、上述したrawファイルをダウンロードしようとしたが、「404 Not Found」となってしまった。
本機で使用したマイクロSDカードをコピーすれば、全く問題ないが、念のため、ネットでI2Sをサポートをしているイメージを検索したら
armbian
がヒットした。
ここの Legacy jessie server (Armbian_5.10_Bananapipro_Debian_jessie_3.4.112.7z)をダウンロードし解凍すると約1.3GB の
Armbian_5.10_Bananapipro_Debian_jessie_3.4.112.raw
が得られるので、これをマイクロSDカードに書き込み、本機で動作するかを確認してみる。
このイメージ・ファイルはデフォルトでDHCPとSSHが動作しているので、割り当てられたIPが推測できれば、SSHクライアントからアクセスできる。

id:root pw:1234
でログインすると以下のようなメッセージが現れる。
Welcome to ARMBIAN Debian GNU/Linux 8 (jessie) 3.4.112-sun7i
System load: 0.97 Up time: 1 min
Memory usage: 5 % of 984Mb IP: 192.168.0.109
CPU temp: 43°C HDD temp: 30°C
Usage of /: 35% of 3.6G
すぐに、pwの変更、userの追加を促されるので実行する。
その後、
# apt-get upgrade
# apt-get update
を行う。
初期化scriptの変更は不要であり、IPの固定、mpd mpcのインストール等は上述したとおりである。

一連の設定を実施すると問題なく music server として動作した。
OSとMPDのバージョンは以下のとおりである。
# uname -a
Linux bananapipro 3.4.110-sun7i #12 SMP PREEMPT Tue Mar 1 08:39:29 CET 2016 armv7l GNU/Linux

# mpd -V
mpd (MPD: Music Player Daemon) 0.16.7

HOME BACK

Last Update 7/June/2016 by mac