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