Howto

I2S 接続のオーディオコーデックを使用する方法 (Armadillo-900)

Armadillo-900 開発セットにおいてI2S接続のオーディオコーデックを使用して、マイクから録音し、ヘッドホンやスピーカーから再生する方法を紹介します。

スピーカーでの音声再生について、 Armadillo-IoTゲートウェイG4での動作実績 を以て手順を記載しておりますが、本Howtoでは動作未確認となります。 ご了承ください。

必要なもの

本Howtoでは以下のものが必要となります。

機材 説明
Armadillo-900 開発セット 一式 Armadillo-900 開発セット 本体、ACアダプタ、USBケーブル、LANケーブルが必要です。
TLV320AIC3110ボード 本Howtoに掲載している回路図を参考に作成する必要があります。
ヘッドセット(4極 ミニプラグ CTIA) 動作確認にはHS-DK03TBK/ELECOMを使用しました。
スピーカー(8Ω) 定格1.3W 以上のものが必要です。
作業用PC VirtualBoxが動作可能なスペックのPCが必要です。
ネットワーク環境 Armadillo-900 開発セットと作業用PCはネットワーク通信ができるようにしてください。

使用するオーディオコーデック

オーディオコーデックは以下を使用します。

TLV320AIC3110/Texas Instruments

TLV320AIC3110はTLV320AIC31xxファミリのオーディオコーデックで、 Class-Dアンプ、ステレオオーディオDAC、モノラルオーディオADCを備えています。

デバイスの詳しい情報については、メーカーのホームページを参照してください。

オーディオコーデックの採用ポイント

下記観点で本HowtoではTLV320AIC3110を採用しました。

  • スピーカー、マイクが1つ以上接続できる
  • 2025年6月現在入手可能であるデバイス
  • 歴史のあるデバイスで情報が豊富

TLV320AICxxxxは末尾型番の違いで、アンプ有/無、入出力数の違うもの、LDO内蔵のもの等、様々なラインアップがあります。 また、型番のAIC部分をDACにするとADCなし、ADCにするとDACなしを選択できます。

Texas Instruments製以外ですと、Armadillo-900に搭載されているSoC(i.MX8ULP)と同じメーカー製のSGTL5000や i.MX8M Plus評価キット(8MPLUSLPD4-EVK)で使用されているCirrus Logic製のWM8960等も情報が豊富です。

DAC/ADC両方必要なのか、アンプは内蔵か外付けか、マイク、スピーカーはいくつ必要か、音質にこだわるのか等、 選定ポイントは色々あると思いますので、目的にあったデバイスを採用するのが良いかと思います。

ハードウェア

参考回路図

本Howtoで作成したTLV320AIC3110ボードの回路図は以下からダウンロードすることができます。

項目 ファイル
参考回路図 armadillo-900_development_board_tlv320-demo_schematic.pdf

マイクはヘッドセット用のシングルエンド1つにしましたが、シングルエンドは最大3つ、差動は1つまで対応できるようです。

参考回路は動作を保証するものではありません。回路設計の際にはデバイスのデータシートやアプリケーションノートをご確認の上、十分な評価をお願いいたします。

ピンアサイン

Armadillo-900 開発セットのCON16に接続します。

使用するピンは以下のとおりです。

CON16ピン番号 i.MX8ULP 信号名 i.MX8ULP マルチプレクス名 TLV320AIC3110 信号名
29 LPI2C7_SCL LPI2C7_SCL SCL
31 LPI2C7_SDA LPI2C7_SDA SDA
24 PTC22 I2S1_TX_FS WCLK
22 PTC21 I2S1_TX_BCLK BCLK
20 PTC20 I2S1_TXD0 DIN
14 PTC17 I2S1_RXD0 DOUT
26 PTC23 I2S1_MCLK MCLK
12 PTC16 PTC16 RESET
2 VDD_1V8 - 1.8V
1 VDD_5V - 5V
3 GND - GND

TLV320AIC3110を動作させるには、I2S信号に加え、I2C信号、リセット信号(GPIO)が必要となります。 I2CバスはArmadillo-900 開発セット本体で4.7kΩプルアップされているLPI2C7、GPIOはI2Sの近くのピンを選択しました。

電源回路

TLV320AIC3110は以下の電源が必要となります。

電源種類 ピン名称 電圧範囲
スピーカー電源 SPLVDD、SPRVDD 2.7~5.5V
コア電源 DVDD 1.65~1.95V
IO電源 IOVDD 1.65~1.95V
ヘッドホン電源 HPVDD 2.7~3.6V
アナログ電源 AVDD 2.7~3.6V

CON16に出ている電源はVDD_5V(5V)とVDD_1V8(1.8V)ですので、アナログ、ヘッドホン電源(3.3V)の電源回路が別途必要となります。

電源シーケンスについては、故障および予期しない動作を防ぐため、データシートどおりに設計することをお勧めします。

Armadillo-900 開発セットの電源シーケンスについては、製品マニュアル「6.2.4. 電源シーケンス」で確認することができます。

5V(スピーカー) -> 1.8V(コア、IO) -> 3.3V(ヘッドホン、アナログ)の順に電源を供給したいので、VDD_5Vから3.3Vを生成し、EnableピンをVDD_1V8で制御しています。

コネクタ

ヘッドセットのジャックは4極ミニプラグ(CTIA)用に配線しています。

未使用ピン

未使用の入力ピンがある場合、終端されていない入力からのノイズを防ぐために、約0.47uFのコンデンサを介してGNDにAC終端することが推奨されています。 アナログ入力にはDCバイアスがあるため、GNDへの直接短絡はしないほうが良いです。

ソフトウェア

使用ソフトウェア

本Howtoで使用したソフトウェアは次のとおりです。

項目 ファイル
開発環境 ATDE9 (v20250528)
Linuxカーネル linux-at-x2-5.10.237-r0.tar
Linuxカーネルパッチ 0001-arm64-dts-a900-add-support-for-tlv320ai.patch

LinuxカーネルイメージとDTBOの作成

TLV320AIC3110に対応したLinuxカーネルイメージとDTBOを作成します。

作業用PC上でATDEを立ち上げ、ソースコードの準備を行います。 Linuxカーネルのソースアーカイブを展開し、パッチを適用します。

[ATDE ~]$ ls
0001-arm64-dts-a900-add-support-for-tlv320ai.patch  linux-at-5.10.237-r0.tar
[ATDE ~]$ tar xf linux-at-5.10.237-r0.tar
[ATDE ~]$ tar xf linux-at-5.10.237-r0/linux-5.10-5.10.237-r0.tar.gz
[ATDE ~]$ cd linux-5.10-5.10.237-r0/
[ATDE ~/linux-5.10-5.10.237-r0]$ patch -p1 -i ../0001-arm64-dts-a900-add-support-for-tlv320ai.patch
patching file arch/arm64/boot/dts/freescale/Makefile
patching file arch/arm64/boot/dts/freescale/armadillo_900-tlv320aic3110.dts

デフォルトカーネルコンフィギュレーションを適用します。

[ATDE ~/linux-5.10-5.10.237-r0]$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- armadillo_a9_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#

ビルドします。ビルドには数分かかります。

[ATDE ~/linux-5.10-5.10.237-r0]$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4

LinuxカーネルイメージとDTBOを確認します。

[ATDE ~/linux-5.10-5.10.237-r0]$ ls arch/arm64/boot/Image
arch/arm64/boot/Image
[ATDE ~/linux-5.10-5.10.237-r0]$ ls arch/arm64/boot/dts/freescale/*tlv*.dtbo
arch/arm64/boot/dts/freescale/armadillo_900-tlv320aic3110.dtbo

動作確認

動作確認環境

Armadillo-900 開発セットの動作確認環境は次のとおりです。

項目 ファイル
Armadillo Base OS Armadillo-Base OS(3.21.3-at.13)

LinuxカーネルイメージとDTBOの変更と保存

LinuxカーネルイメージとDTBOをArmadillo-900上に配置し、overlays.txtを修正してDTBOを適用、persist_fileコマンドで変更を保存します。

製品開発後に変更する場合は、下記手順での変更のかわりに、より安全に更新できるSWUイメージによる変更を検討してください。 製品開発中の場合は、scpコマンドやUSBメモリを使用してLinuxカーネルイメージとDTBOをArmadillo-900上に配置した後、以下の手順で更新できます。

[armadillo ~/]# ls
Image armadillo_900-tlv320aic3110.dtbo
[armadillo ~/]# rm -f /boot/armadillo_900-tlv320aic3110.dtbo
[armadillo ~/]# rm -f /boot/Image
[armadillo ~/]# cp armadillo_900-tlv320aic3110.dtbo /boot/armadillo_900-tlv320aic3110.dtbo
[armadillo ~/]# cp Image /boot/Image
[armadillo ~/]# vi /boot/overlays.txt; # fdt_overlays 変数の最後に armadillo_900-tlv320aic3110.dtbo を追加する
fdt_overlays=armadillo_900-evaboard.dtbo armadillo_iotg_a9e-sim7672.dtbo armadillo_900-tlv320aic3110.dtbo

[armadillo ~/]# persist_file -rvp /boot/
'/mnt/boot/overlays.txt' -> '/target/boot/overlays.txt'
'/mnt/boot/Image' -> '/target/boot/Image'
'/mnt/boot/armadillo_900-tlv320aic3110.dtbo' -> '/target/boot/armadillo_900-tlv320aic3110.dtbo'

書き換え後、再起動してください。 変更後のLinuxカーネルイメージとDTBOを使用して起動します。

コンテナの作成

Armadillo Base OSでは基本的にユーザーアプリケーションをpodmanコンテナ上で実行します。 スピーカーやマイクをコンテナ内から扱うためには、ホストOS側のデバイスファイル /dev/snd をコンテナに渡す必要があります。 /dev/snd を渡してdebianイメージからsnd_exampleという名前でコンテナを作成し、起動します。 (インターネットに繋がっている必要があります。)

[armadillo ~/]# podman run -it --name=snd_example --device=/dev/snd docker.io/debian /bin/bash
Trying to pull docker.io/library/debian:latest...
Getting image source signatures
Writing manifest to image destination
[container ~/]#

alsa-utilsのインストール

alsa-utils をインストールします。

[container ~/]# apt update && apt upgrade -y
[container ~/]# apt install alsa-utils -y

デバイスの確認

再生デバイスができていることを確認をします。card 0 が今回追加した再生デバイスです。

[container /]# aplay -l
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: tlv320aic3110au [tlv320aic3110-audio], device 0: rpmsg hifi tlv320aic31x
x-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

録音デバイスができていることを確認をします。card 0 が今回追加した録音デバイスです。

[container /]# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: tlv320aic3110au [tlv320aic3110-audio], device 0: rpmsg hifi tlv320aic31x
x-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

ヘッドホンの設定

ヘッドホンの設定をします。 音の大きさは、DAC、HP Analog、HP Driverの設定で変更できます。

[container /]# amixer sset 'DAC' 127
[container /]# amixer sset 'HP Analog' 100
[container /]# amixer sset 'HP Driver' 0 on
[container /]# amixer sset 'HP Left' on
[container /]# amixer sset 'HP Right' on
[container /]# amixer sset 'Output Left From Left DAC' on
[container /]# amixer sset 'Output Right From Right DAC' on

スピーカーの設定

Armadillo-IoTゲートウェイG4での動作実績 を以て手順を記載しておりますが、本Howtoでは動作未確認となります。 ご了承ください。

スピーカーの設定をします。 音の大きさは、DAC、Speaker Analog、 Speaker Driverの設定で変更できます。

[container /]# amixer sset 'DAC' 127
[container /]# amixer sset 'Speaker Analog' 50
[container /]# amixer sset 'Speaker Driver' 0 on
[container /]# amixer sset 'Speaker Left' on
[container /]# amixer sset 'Speaker Right' on
[container /]# amixer sset 'Output Left From Left DAC' on
[container /]# amixer sset 'Output Right From Right DAC' on

マイクの設定

マイクの設定をします。

[container /]# amixer sset 'MIC1LM M-Terminal' 'Off'
[container /]# amixer sset 'MIC1LM P-Terminal' 'Off'
[container /]# amixer sset 'MIC1LP P-Terminal' 'Off'
[container /]# amixer sset 'MIC1RP P-Terminal' 'FFR 10 Ohm'
[container /]# amixer sset 'ADC' 64
[container /]# amixer cset name='ADC Capture Switch' on

録音

録音します。以下は 192kHz 16bit で 10 秒間録音する例です。

[container /]# arecord -r44100 -fS16_LE -c2 sample.wav -d10
Recording WAVE 'sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

再生

再生します。再生したいファイルを転送し、再生してください。

[container /]# aplay sample.wav
Playing WAVE 'sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo