Howto

Armadillo-IoT ゲートウェイ G4 で PDM マイクを使用する方法

この Howto では、Armadillo-IoT G4 に PDM マイクを接続し、録音する方法をご紹介します。

使用する PDM マイク

1.8Vで動作する PDM マイクであれば、レベル変換回路等なしで使用することができます。
使用可能と思われるマイクの例を以下に示します。

マイク単体

  • MP34DT01-M
  • SPM0405HD4H

実装済み基板

  • Adafruit PDM Microphone Breakout
  • 秋月電子 デジタルシリコンマイクロホンモジュール SPM0405HD4H

この検証では、Adafruit PDM Microphone Breakout を2つ使用し、
ステレオマイクを構成しました。

接続方法

CON11 を使用します。 接続方法は以下の通りです。
SEL のみ左右で異なります(使用するマイクによって異なる可能性があります)。

CON11 ピン番号 ピン名 マイク L のピン マイク R のピン
17 SAI5_RXC CLK CLK
19 SAI5_RXD0 DAT DAT
30 VDD_1V8 3V 3V, SEL
34 GND GND, SEL GND

Device Tree のカスタマイズ

現時点では at-dtweb では設定できないので、Device Tree に直接追記します。
編集するのは /arch/arm64/boot/dts/freescale/armadillo_iotg_g4.dts で、3 箇所の追記が必要です。

1 つ目は root ノードの中に sound-micfil を追加します。

/ {
    model = "Atmark-Techno Armadillo-IoT Gateway G4 Board";
    compatible = "atmark,yakushima-es1", "fsl,imx8mp";

        :
        :
        :

    sound-micfil {
        compatible = "fsl,imx-audio-micfil";
        model = "imx-audio-micfil";
        cpu-dai = <&micfil>;
    };
};

2 つ目は iomuxc ノードの中に pinctrl_pdm: pdmgrp を追加します。
モノラル・ステレオ(2チャンネル)では以下のようにします。

&iomuxc {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_hog>;

        :
        :
        :

    pinctrl_pdm: pdmgrp {
        fsl,pins = <
            MX8MP_IOMUXC_SAI5_RXC__AUDIOMIX_PDM_CLK     0x80
            MX8MP_IOMUXC_SAI5_RXD0__AUDIOMIX_PDM_BIT_STREAM00   0x80
        >;
    };
};

以下の3行も追加すると、8チャンネルの入力に対応します (動作未確認) 。

            MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_PDM_BIT_STREAM01   0x80
            MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_PDM_BIT_STREAM02   0x80
            MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_PDM_BIT_STREAM03   0x80

3 つ目は micfil ノードを追加します。

&micfil {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_pdm>;
    assigned-clocks = <&clk IMX8MP_CLK_PDM>;
    assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>;
    assigned-clock-rates = <196608000>;
    status = "okay";
};

イメージのビルド・書き込み

製品マニュアル内「9.4.3. Linux カーネルをビルドする」の方法でカーネルをビルドし、dtbファイルとImageファイルをArmadilloに書き込んでください。

コンテナの作成・ログイン

コンテナをイメージをダウンロード・起動します(ネットワークに繋がっている必要があります)。

[armadillo ~]# podman run -it --name=rec_example -v /dev/snd:/dev/snd docker.io/alpine /bin/sh

alsa-utilsのインストール

コンテナのalpineにalsa-utilsをインストールします。

[container /]# apk update && apk upgrade && apk add alsa-utils

録音デバイスの一覧表示

arecord -lで録音デバイスの一覧を確認できます。

[container /]# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: imxaudiomicfil [imx-audio-micfil], device 0: micfil hifi snd-soc-dummy-dai-0 [micfil hifi snd-soc-dummy-dai-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Device [C-Media USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

PDMマイクはimxaudiomicfilとして認識されます。
この例の場合、カード0のサブデバイス0がPDMマイクです。

録音

カード0、サブデバイス0がPDMマイクなので、 plughw:0,0 のようにデバイスを指定します。

[container /]# arecord -D plughw:0,0 -f cd mic_rec.wav -d 10

もしくは

[container /]# arecord -D plughw:0,0 -r 44100 -f S16_LE -c 2 mic_rec.wav -d 10

のようにすると、CDの音質(サンプルレート44.1kHz、ステレオ)で10秒間録音します。
以下にいくつか例を挙げます。

# 192KHz,8ch,10秒
[container /]# arecord -D plughw:0,0 -r 192000 -f S16_LE -c 8 mic_rec.wav -d 10

# 44.1KHz,1ch,1時間
[container /]# arecord -D plughw:0,0 -r 44100 -f S16_LE -c 1  mic_rec.wav -d 3600

(無圧縮録音となりますので、空き容量に注意してください)

録音したファイルの確認

lsコマンドなどで確認できます。

[container /]# ls -l
total 30004
-rw-r--r--    1 root     root      30720044 Dec 15 02:58 mic_rec.wav

再生デバイスの一覧表示

aplay -lで録音デバイスの一覧を確認できます。

[container /]# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: audiohdmi [audio-hdmi], device 0: imx8 hdmi i2s-hifi-0 [imx8 hdmi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Device [C-Media USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

この例ではHDMIとUSBオーディオデバイスが表示されています。

再生

上の例で確認できたUSBオーディオデバイスから音を再生する例です。

[container /]# aplay -D plughw:2,0 mic_rec.wav