1. eggman

    No comment

    eggman
Changes in body
Source | HTML | Preview
@@ -1,110 +1,110 @@
Raspberry Pi2 で I2S DACを使ってみました。
Raspberry Pi 3 でも手順は一緒だと思います。
#環境
* Raspberry Pi 2 model B
* OS:Raspbian
* aliexepress で 7.59USDで売っている PCM5102Aのボード ([URL](https://www.aliexpress.com/item/PCM5102-DAC-Decoder-I2S-Player-Assembled-Board-32Bit-384K-Beyond-ES9023-PCM1794-compatible-Raspberry-Pi/32678406932.html))
#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駆動ですが、レギュレータで3.3Vを生成するためにボードには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にある。