Raspberry Pi2 で I2S DACを使ってみました。
Raspberry Pi 3 でも手順は一緒だと思います。
#環境
- Raspberry Pi 2 model B
- OS:Raspbian
- aliexepress で 7.59USDで売っている PCM5102Aのボード (URL)
#Raspberry Pi2とDAC基板の接続
PCM5102A board | Raspberry Pi2 J8 |
---|---|
BCK | 12 GPIO1 PCM_CLK |
DATA | 40 GPIO29 PCM_DOUT |
LRCK | 35 GPIO24 PCM_FS |
GND | 39 GND |
GND | 接続してない |
VCC | 02 5V |
- PCM5102は3.3V駆動ですが、PCM5102Aボードに載っているレギュレータで3.3Vを生成するためにボードには5Vを供給します。
#RaspbianのI2S設定
- HiFiBerry DACの設定を使います。
##device treeの設定
- /boot/config.txtを編集
- ピンの設定をI2Sにして、ドライバとのマッピングをします。
dtoverlay=hifiberry-dac
##ドライバの設定
- 最近のRaspbianにはドライバが含まれているのカーネルのコンパイルは不要。
- /etc/modulesを編集。
- 起動時にドライバ snd_soc_hifiberry_dac をロードするようにします。
snd_soc_hifiberry_dac
#I2Sのテスト
- ドライバの確認
pi@raspberrypi:~ $ lsmod
Module Size Used by
binfmt_misc 6388 1
cfg80211 427855 0
rfkill 16037 1 cfg80211
snd_bcm2835 20511 0
bcm2835_gpiomem 3040 0
snd_soc_bcm2835_i2s 6354 2
bcm2835_wdt 3225 0
snd_soc_pcm5102a 1763 1
uio_pdrv_genirq 3164 0
uio 8000 1 uio_pdrv_genirq
snd_soc_hifiberry_dac 2511 0
snd_soc_core 125885 3 snd_soc_bcm2835_i2s,snd_soc_hifiberry_dac,snd_soc_pcm5102a
snd_pcm_dmaengine 3391 1 snd_soc_core
snd_pcm 75698 4 snd_bcm2835,snd_soc_core,snd_soc_hifiberry_dac,snd_pcm_dmaengine
snd_timer 19160 1 snd_pcm
snd 51844 4 snd_bcm2835,snd_soc_core,snd_timer,snd_pcm
i2c_dev 5859 0
fuse 83461 3
ipv6 347530 34
- サウンドデバイスの確認 card1に割り当てらています。
- card 0, card 1の割り当てが起動毎に異なることがあります。
pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
- 音の再生 card1を指定して再生します。
$ aplay -D hw:1,0 test.wav
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
#ドライバ
- linux kernelのドライバは sound/soc/bcm のあたりにある。
- https://github.com/raspberrypi/linux/tree/rpi-4.1.y/sound/soc/bcm
- bcm2835-i2s.c が I2Sのドライバ、Raspbery Pi / Pi 2 / Pi 3 で共通みたいですけど。
- hifiberry_dac.c がHiFiBerry DACのドライバ
- PCM5102Aのドライバはsound/soc/codecs/pcm5102a.cにある。