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 オプションの指定が間違ってのかな? ん、なんとかなりそう。

2020, もう1台、録音再生機能のあるラズパイを作りたくて、探したが オーディオカードが、、、、ない、、、、やっと見つけたのが、AudioInjector のカード。で使い方は、、、、、http://forum.audioinjector.net/viewtopic.php?f=5&t=3 ここにあった。 最小限に書くと、 audio.injector.scripts_0.1-1_all.deb.tar.gz http://forum.audioinjector.net/download/file.php?id=2 を取ってきて、 展開&debをインストール。 audioInjector-setup.sh を実行して、 alsactl --file /usr/share/doc/audioInjector/asound.state.MIC.thru.test restore する。 audioInjector-test.sh とテスト。今回の場合は、sox を入れろと言われるので、 apt install sox これで、音が出た。録音のテストはまだ。(2020.5.12)

もう一度 element14 の cirrus logic カードで音声入出力 (Wolfson)

2020.6.4、すぐ上でなく、もう一つ上に書いてある カード で使えるようにしてあった Rapberry PI3 のSDカードが壊れて、再度、セットアップ。 現時点の Raspberry Pi OS (previously called Raspbian) を入れて、 https://www.horus.com/~hias/cirrus-driver.html にある情報に従い、
Enable the driver

Add the following line to /boot/config.txt to enable the Cirrus Logic card driver

dtoverlay=rpi-cirrus-wm5102

Note: MMAP support is already enabled by default in kernel 4.9, you no longer need to add the i2s-mmap overlay.
Setup module dependencies

The cirrus driver requires some manually defined module dependencies, if you fail to add them the driver won't load properly.

Create a file /etc/modprobe.d/cirrus.conf with the following content:

softdep arizona-spi pre: arizona-ldo1
しても認識しない。色々検索すると、どうやら一番新しいのには ドライバーが入ってない、などの情報があった

そこで、2018/11/13 の Rasbian を探して、インストールして、 上の作業をすると

pi@raspberrypi:~ $ arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: RPiCirrus [RPi-Cirrus], デバイス 0: WM5102 AiFi wm5102-aif1-0 []
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0


pi@raspberrypi:~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
  サブデバイス: 7/7
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3
  サブデバイス #4: subdevice #4
  サブデバイス #5: subdevice #5
  サブデバイス #6: subdevice #6
カード 0: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: ALSA [bcm2835 ALSA], デバイス 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: RPiCirrus [RPi-Cirrus], デバイス 0: WM5102 AiFi wm5102-aif1-0 []
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
認識した。なんとかなりそう。
Rasbian のインストール直後に、アップデートを選んでしまって ちょっと焦ったが、大丈夫だった。 他の必要なソフトを入れて、ディスクイメージのバックアップを作っておかねば。 (これくらいの作業なら良いかな。。。)

玉川のメモのページへ