Jetson Nano へ DAC (PCM5102A) を I2S 接続してみた。

# はじめに
Jetson Nano の Pinmux 設定ができるようになったので、DAC (PCM5102A) の I2S 接続を試してみました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e15061ae-410a-62bf-c915-03bd46fb87e5.png" width="75%">
(参考)
<A HREF="https://qiita.com/kitazaki/items/a445994f1f46a1b15f78">JetPack 4.3 (r32.3.1) で追加された Jetson-IO tool を使用して Pinmux テーブルを設定してみた。</A>

## 使用したもの
Raspberry Pi の I2S 接続で動作実績のある DAC (PCM5102A) を使用しました。

- Texas-Instruments製 BurrBrown PCM5102A DAC IC搭載基板
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b0aad2c8-136d-d8dc-c71c-90b7936324c1.png" width="50%">

# I2S の有効化
Jetson-IO tool を起動します。

```bash
$ sudo /opt/nvidia/jetson-io/jetson-io.py
```

「Configure 40-pin expansion header」を選択します。
<img width="50%" alt="スクリーンショット 2020-01-13 19.27.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ffb9fd30-c1fd-2516-9023-d729fba1a46d.png">

i2s4 を有効にします。
「i2s4」を選択します。 (該当の行でスペースキーを押すと「*」マークがつく)
「Back」を選択する。
<img width="50%" alt="スクリーンショット 2020-01-13 19.27.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/901d0213-efea-9d64-5543-da8b628d8af8.png">

ピン12、35、38、40 に i2s4b が設定されていることを確認します。
「Save and reboot to reconfigure pins」を選択します。
設定変更後に再起動されます。
<img width="50%" alt="スクリーンショット 2020-01-13 19.28.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/3a3298e3-19ac-7574-cf83-cc70a9937562.png">

# 配線
PCM5102A DAC IC搭載基板の配線は以下のページを参考にしました。
(参考)
<A HREF="http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_i2s_dac_audio_ti_pcm5102/">Raspberry Piに TI PCM5102A DACオーディオ基板を I2S接続する方法</A>

Jetson Nano の配線は <A HREF="https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fasoc_driver.17.2.html%23wwpID0E0CU0HA">L4T ドキュメント</A>を参考にしました。
<img width="90%" alt="スクリーンショット 2020-01-13 20.29.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/5cff5946-a1db-623e-085c-278598935f70.png">

DAC (PCM5102A) と Jetson Nano との接続は以下のとおりです。

|DAC (PCM5102A)|Jetson Nano|
|---|---|
|VCC|5V (ピン2)|
|GND|GND (ピン6)|
|BCK|SCLK (ピン12)|
|LCK|FS (ピン35)|
|DIN|DOUT (ピン40)|

# 動作確認
## コマンドライン
DAC (PCM5102A) が認識されていることを確認します。

```bash
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: tegrahda [tegra-hda], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 0: ADMAIF1 CIF ADMAIF1-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 1: ADMAIF2 CIF ADMAIF2-1 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 2: ADMAIF3 CIF ADMAIF3-2 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 3: ADMAIF4 CIF ADMAIF4-3 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 4: ADMAIF5 CIF ADMAIF5-4 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 5: ADMAIF6 CIF ADMAIF6-5 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 6: ADMAIF7 CIF ADMAIF7-6 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 7: ADMAIF8 CIF ADMAIF8-7 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 8: ADMAIF9 CIF ADMAIF9-8 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 9: ADMAIF10 CIF ADMAIF10-9 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
```

スピーカーテストを行います。(左右交互にテスト音声が再生されるので、CTRL + C で停止します。)

```bash
$ speaker-test -c2 -twav -D plughw:CARD=tegrasndt210ref,DEV=0

speaker-test 1.1.3

Playback device is plughw:CARD=tegrasndt210ref,DEV=0
Stream parameters are 48000Hz, S16_LE, 2 channels
WAV file(s)
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 32 to 8192
Period size range from 32 to 4096
Using max buffer size 8192
Periods = 4
was set period_size = 2048
was set buffer_size = 8192
 0 - Front Left
 1 - Front Right
Time per period = 2.858401
 0 - Front Left
 1 - Front Right
Time per period = 3.029209
...
```

WAV ファイルを再生します。(<A HREF="http://www.ne.jp/asahi/music/myuu/wave/wave.htm">こちら</A>のフリー素材 fanfare.wav を使用しました。)
-D plughw:CARD=tegrasndt210ref,DEV=0 オプションを指定しなくても再生できました。

```
$ aplay -D plughw:CARD=tegrasndt210ref,DEV=0 fanfare.wav 
Playing WAVE 'fanfare.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
$ aplay fanfare.wav 
Playing WAVE 'fanfare.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
```

mp3 ファイルを再生します。
mp3 ファイルを再生するために mpg321 プログラムをインストールします。

```bash
$ sudo apt install mpg321
```

mp3 ファイルは同じく<A HREF="http://www.ne.jp/asahi/music/myuu/wave/wave.htm">こちら</A>のフリー素材 fanfare.mp3 を使用しました。

```bash
$ mpg321 fanfare.mp3 
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew,
now maintained by Nanakos Chrysostomos and others.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!

Playing MPEG stream from fanfare.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
                                                                            
[0:11] Decoding of fanfare.mp3 finished.
```

## デスクトップ
デスクトップの Launcher から System Settings を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/39bfeb8c-5e14-af80-851a-2783f8316fda.png" width="75%">

Sound を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4030b3a7-0f56-ac53-27cd-16c7c30be25d.png" width="75%">

Analog Output を選択して、音声出力をテストすることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1fb54605-b089-e204-715a-018f028b9fb7.png" width="75%">