Raspberry PI 3 に Cirrus Logic Audio Card

(2016.9.16) ラズベリーパイ3に、ハイレゾ再生&録音をさせたくて(仕事)、

element14 Cirrus Logic Audio Card を入れた。 カードのページ にある Software Download から取れるimg をマイクロSDカードに dd で書いて起動すると、動かない。。。

そこで、最新の rasbian を Rasberry PI DOWNLOADS から取ってきて、動かす。しかし、カードは認識されない。

手元の Ubuntu マシンで、img ファイルを dd でSDカードに書き込む。 注意点は、SDカード(ここでは、/dev/sdf とする。環境次第)を Ubuntu PC にさすと自動でマウントされるが、それを unmount して、 mount されていた例えば /dev/sdf1 ではなく、/dev/sdf に頭から img ファイルを書き込むこと(でないとブートしない)。 それと obs で 8M とか 4M とか大きな 値を設定すること(でないと、とても遅くなる)。
例えば sudo dd if=2016-05-27-raspbian-jessie.img of=/dev/sdf obs=8388608
などとする。

次に、 RPi Linux driver for Wolfson / Cirrus Logic Audio Card を見て、作業する。私は Precompiled kernels から、 latest version を取ってきて、展開した。

wget https://github.com/HiassofT/rpi-linux/tree/cirrus-4.4.14
sudo tar  zxf cirrus-linux-4.4.14.tgz -C /
その後も、書いてある通り Configuration
/boot/config.txt に、
dtoverlay=rpi-cirrus-wm5102
dtoverlay=i2s-mmap
追加、/etc/modprobe.d/cirrus.conf を作成して そこに
softdep arizona-spi pre: arizona-ldo1
softdep spi-bcm2708 pre: fixed
softdep spi-bcm2835 pre: fixed
を記入。そして
wget http://www.horus.com/~hias/tmp/cirrus/usecase-scripts.tgz
mkdir bin
cd bin
tar zxf ../usecase-scripts.tgz
で忘れずに
Note: You have to start the appropriate scripts before you can use the card. For example:

./Reset_paths.sh -q
./Playback_to_Lineout.sh -q
./SPDIF_playback.sh -q
./Record_from_lineIn.sh -q
これもしておく
If you don't need on-board audio you can disable it by removing (or commenting out) the dtparam=audio=on line from /boot/config.txt.

#dtparam=audio=on
私の環境では aplay -L すると
null
Discard all samples (playback) or generate zero samples (capture)
pulse
PulseAudio Sound Server
sysdefault:CARD=sndrpiwsp
snd_rpi_wsp, 
Default Audio Device
dmix:CARD=sndrpiwsp,DEV=0
snd_rpi_wsp, 
Direct sample mixing device
dsnoop:CARD=sndrpiwsp,DEV=0
snd_rpi_wsp, 
Direct sample snooping device
hw:CARD=sndrpiwsp,DEV=0
snd_rpi_wsp, 
Direct hardware device without any conversions
plughw:CARD=sndrpiwsp,DEV=0
snd_rpi_wsp, 
Hardware device with all software conversions
となり、 aplay -Dplughw:CARD=sndrpiwsp ~/05_SomeoneWatchOverMe_192_24.wav などと、192kHz 24bit の wav ファイルが再生できた。 でも hw:CARD=sndrpiwsp aplay -Dhw:CARD=sndrpiwsp ~/05_SomeoneWatchOverMe_192_24.wav だと、
Playing WAVE '/home/pi/05_SomeoneWatchOverMe_192_24.wav' : Signed 24 bit Little Endian in 3bytes, Rate 192000 Hz, Stereo
aplay: set_params:1233: Sample format non available
Available formats:
- S16_LE
- S24_LE
- S32_LE
となってしまう。うーん。

いや arecord だと arecord -Dhw:CARD=sndrpiwsp,DEV=0 -d 10 -f S32_LE -r96000 -c 2 test.wav とかしたらできる

そして、aplay -Dhw:CARD=sndrpiwsp,DEV=0 test.wav
Playing WAVE 'test.wav' : Signed 32 bit Little Endian, Rate 96000 Hz, Stereo
できた。 前の -D オプションの指定が間違ってのかな? ん、なんとかなりそう。

玉川のメモのページへ