Armadilloフォーラム

SAI5経由での複数PDMマイクの認識

shu1.ikeno-secisl

2022年8月23日 17時43分

HowTo記事「Armadillo-IoT ゲートウェイ G4 で PDM マイクを使用する方法」に沿って
(1) Device Treeのカスタマイズ、
(2-1) イメージのビルド
(2-2) イメージの書き込み
(3) コンテナイメージのダウンロードと起動
(4) alsa-utilsのインストール
を行い、その後、録音デバイス一覧表示のため、arecord -lとしても、以下のメッセージが表示され、デバイスが認識されません。
arecord: device_list:274: no soundcards found...

以下にやったことを具体的に記します。間違っていたところ/対処法等ご教示いただけますと幸いです。

(0) 準備
「9.4.2. Linux カーネルをビルドする」に従い、
1. Linuxカーネルのビルドに必要なパッケージのインストール
2. ソースコードの取得(解凍)
を行いました。取得したものは↓です。
https://armadillo.atmark-techno.com/files/downloads/alpine/v3.16/atmark…

(1) Device Treeのカスタマイズ
linux-5.10-5.10.132-r0/arch/arm64/boot/dts/freescale/内の下記2ファイルに対し、HowTo記事の通りの追記/コメントアウトを行いました。
追記はいずれも各ノードの最後の部分(micfil ノードの追加はファイル末尾部分)に行いました。
armadillo_iotg_g4.dts
armadillo_iotg_g4-expansion-interface.dtsi

(2-1) イメージのビルド
「9.4.2. Linux カーネルをビルドする」に従い
3. デフォルトコンフィギュレーションの適用
5. ビルド
を行いました。

(2-2) イメージの書き込み
ブログ記事「Armadillo-IoT G4:SWUpdateのdescファイル書式について」を参考にしました。
https://armadillo.atmark-techno.com/index.php/blog/15349/11131

1. SWUpdateの初期設定
 マニュアル9.7.2(SWUイメージの作成)を参考に、mkswuの取得と最初に行う設定を行い、
 ブログ記事の通り、本体への初期設定を行いました。
2. Armadillo Base OSのアップデート
 ②rootfsをカスタマイズする場合 を参考に、swdesc_files コマンドで、Image と armadillo_iotg_g4.dtb を
 /boot に配置する記述を含むdescファイルを作成しました。
 
その後、mkswuコマンドでswuファイルを生成し、microSDカードにコピーしました。
ArmadilloにそのmicroSDカードを挿入し、マニュアル9.7.3(イメージのインストール)の外部記憶装置からイメージのインストール(手動)
に書かれている方法でインストールを行いました。

本体再起動後、/boot/にあるImageとarmadillo_iotg_g4.dtbが、上記で作成したものと一致していることをdiffで確認しました。

その後、HowTo記事の「コンテナの作成・ログイン」「alsa-utilsのインストール」「録音デバイスの一覧表示」
に記載されている内容を実行しましたが、以下のメッセージが出力されます。
arecord: device_list:274: no soundcards found...

なお、接続したマイク(8ch)は、HowTo記事で使われている秋月電子のモジュールと同一で、こちらについては別の多チャンネルPDM録音可能
な環境で動作することを確認しています。

お手数おかけしますが、よろしくお願いいたします。

コメント

at_dominique.m…

2022年8月24日 10時10分

shu1.ikeno-secislさん、

お世話になっています、
アットマークテクノのマルティネです。

> 以下にやったことを具体的に記します。間違っていたところ/対処法等ご教示いただけますと幸いです。

記していただいた内容であっていると思いますが、いくつか確認させてください:

* armadillo_iotg_g4-expansion-interface.dtsi に変更を行ったと記載していますが、at-dtweb を使用しなかった場合にこのファイルが使われていません。
必要な pinctrl の設定を armadillo_iotg_g4.dts にも行いましたか?
できれば armadillo_iotg_g4.dts の内容を送ってもらえたらとやりとりしやすくなりますので、お願いします。

* armadillo上で「apk add dtc」を実行してから、「dtc -I dtb -O dts /sys/firmware/fdt -o /tmp/fdt.dts」を実行して /tmp/fdt.dts をこちらにも添付していただけたら内容の確認できます。

* dts に「compatible = "fsl,imx-audio-micfil";」のあるノードを追加したと思いますが、そのドライバがちゃんと有効になっているかを確認できますでしょうか。 (起動中のarmadillo の /proc/config.gz を解答して、 CONFIG_SND_SOC_IMX_MICFIL を探してください)

* そこまで大丈夫のでしたら、起動直後の 「dmesg」の出力もお願いします。何かのエラーメッセージがあるかもしれません。

よろしくお願いします。

shu1.ikeno-secisl

2022年8月24日 13時11分

マルティネさん、返信ありがとうございます。
以下に回答いたします。

> * armadillo_iotg_g4-expansion-interface.dtsi に変更を行ったと記載していますが、
> at-dtweb を使用しなかった場合にこのファイルが使われていません。
> 必要な pinctrl の設定を armadillo_iotg_g4.dts にも行いましたか?
> できれば armadillo_iotg_g4.dts の内容を送ってもらえたらとやりとりしやすくなりますので、
> お願いします。

armadillo_iotg_g4.dtsもご指定の変更をしております。変更後のファイルを添付しますので、ご確認お願いいたします。
armadillo_iotg_g4-expansion-interface.dtsiは変更不要とも思ったのですが、こちらは念のために変更しました。

> * armadillo上で「apk add dtc」を実行してから、
> 「dtc -I dtb -O dts /sys/firmware/fdt -o /tmp/fdt.dts」を実行して
> /tmp/fdt.dts をこちらにも添付していただけたら内容の確認できます。

実行後の出力 fdt.dtsを添付します。
また、実行時に沢山warningが出力されたので、こちらも dts-output.txt として添付します。

> * dts に「compatible = "fsl,imx-audio-micfil";」のあるノードを追加したと思いますが、
> そのドライバがちゃんと有効になっているかを確認できますでしょうか。
> (起動中のarmadillo の /proc/config.gz を解答して、
> CONFIG_SND_SOC_IMX_MICFIL を探してください)

CONFIG_SND_SOC_IMX_MICFIL=yとなっていました。念のためconfig.gzも添付します。

> * そこまで大丈夫のでしたら、起動直後の 「dmesg」の出力もお願いします。
> 何かのエラーメッセージがあるかもしれません。

dmesgの出力を dmest-output.txt として添付します。

以上、お手数おかけしますが、ご確認よろしくお願いいたします。

ファイル ファイルの説明
armadillo_iotg_g4.dts カーネルビルド前に変更したarmadillo_iotg_g4.dts
config.gz /proc/config.gz
dmesg-output.txt dmesgの出力
dtc-output.txt.txt dtc実行時のwarningメッセージ
fdt.dts dtc出力

at_dominique.m…

2022年8月25日 16時53分

shu1.ikeno-secislさん

お待たせしました。

dts, または config.gz に特に問題なさそうですね。
dmesg にも、ドライバのエラーは特になくて、ALSA に認識されたようです:

[    2.195356] ALSA device list:
[    2.195362]   #0: imx-audio-micfil
[    2.195365]   #1: audio-hdmi

HOWTO ではコンテナで arecord を使ってますが、ひとまず Base OS のままで確認してもらえますか?

私の環境に micfil のハードウェアがありませんが、USBデバイスでやってこういう出力になります:

armadillo:~# apk add alsa-utils
(1/6) Installing dialog (1.3.20220414-r0)
(2/6) Installing alsa-ucm-conf (1.2.7.2-r0)
(3/6) Installing alsa-lib (1.2.7.2-r0)
(4/6) Installing fftw-single-libs (3.3.10-r0)
(5/6) Installing alsa-utils (1.2.7-r1)
(6/6) Installing alsa-utils-openrc (1.2.7-r1)
Executing busybox-1.35.0-r17.trigger
Executing eudev-3.2.11-r0.trigger
OK: 419 MiB in 249 packages
 
armadillo:~# arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

よろしくお願いします。

shu1.ikeno-secisl

2022年8月25日 18時08分

ご連絡ありがとうございます。
BaseOSにalsa-utilsをインストールし、arecord -lしたところ、正しく認識されました。

armadillo:/# 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
 

HowTo記事のマイク感度の調整に記載されていた設定を行い、実際にPDMマイク8個を接続し録音したところ、録音できました。
ただし、一部PDMからPCMへの変換がうまくできていないところがあります。波形例を添付します。

armadillo:/# amixer -D hw:0 sset 'CH0' '100%'
armadillo:/# amixer -D hw:0 sset 'CH1' '100%'
armadillo:/# amixer -D hw:0 sset 'CH2' '100%'
armadillo:/# amixer -D hw:0 sset 'CH3' '100%'
armadillo:/# amixer -D hw:0 sset 'CH4' '100%'
armadillo:/# amixer -D hw:0 sset 'CH5' '100%'
armadillo:/# amixer -D hw:0 sset 'CH6' '100%'
armadillo:/# amixer -D hw:0 sset 'CH7' '100%'
armadillo:/# amixer -D hw:0 sset 'MICFIL DC Remover Control' 'Cut-off @21Hz'
armadillo:/# amixer -D hw:0 sset 'MICFIL Quality Select' 'VLow0'
armadillo:/# arecord -D plughw:0,0 -r 48000 -f S16_LE -c 8 /mnt/rectest0.wav -d 20

コンテナを利用して再度試してみましたが、コンテナからは認識できませんでした。

ファイル ファイルの説明
capture.png 録音波形の一部。ノイズとなっている部分。矩形部分はプラスマイナスの最大値で振り切れています。

at_dominique.m…

2022年8月25日 18時37分

> BaseOSにalsa-utilsをインストールし、arecord -lしたところ、正しく認識されました。
>

> armadillo:/# 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
>  

了解しました。
コンテナからのアクセスができないようですね、howto が書かれてから podman のアップデートで動作がちょっとだけ変わりました、コンテナから /dev/snd/xxxをアクセスする場合に許可がありませんというエラーが出ます。
確認したところ、 「-v /dev/snd:/dev/snd」を「-d /dev/snd」 (volume -> device) へ変更するとアクセス可能になります。また、cgroupsを無効化してもアクセスできました( `--cgroups=disabled` )
申し訳ございませんでした、howtoも更新していきます。

お手数ですが、確認をお願いします。

> HowTo記事のマイク感度の調整に記載されていた設定を行い、実際にPDMマイク8個を接続し録音したところ、録音できました。
> ただし、一部PDMからPCMへの変換がうまくできていないところがあります。波形例を添付します。

capture.png は取得した rectest0.wav の表示ですね。こちらも 8ch で確認したはずですので、何か接続か回路図の問題があるかもしれません。

お手数ですが、もう一度確認してもらえたらと思います。例えばショートがあればこういう形になりそうです。

よろしくお願いします

at_dominique.m…

2022年8月25日 18時48分

> > HowTo記事のマイク感度の調整に記載されていた設定を行い、実際にPDMマイク8個を接続し録音したところ、録音できました。
> > ただし、一部PDMからPCMへの変換がうまくできていないところがあります。波形例を添付します。
>
> capture.png は取得した rectest0.wav の表示ですね。こちらも 8ch で確認したはずですので、何か接続か回路図の問題があるかもしれません。

連続ですみません。

pdm マイクのテストに私より詳しい同僚に話したら、こちらで試した時にも録音の最初のあたりだけ同じスパイクがあったそうです。
この最初のところだけを無視すれば後の値は大丈夫そうでしたが、もしかしたら同じ現象かもしれません。ドライバの不具合かハードウェア的に読み取り始める時に電圧が不安定なところがあるかもしれません。

とりあえず、最初のところに起きるかどうかを確認してもらえますか?

よろしくお願いします。

shu1.ikeno-secisl

2022年8月25日 20時52分

> コンテナからのアクセスができないようですね、howto が書かれてから podman のアップデートで動作がちょっとだけ変わりました、
> コンテナから /dev/snd/xxxをアクセスする場合に許可がありませんというエラーが出ます。
> 確認したところ、 「-v /dev/snd:/dev/snd」を「-d /dev/snd」 (volume -> device) へ変更するとアクセス可能になります。
> また、cgroupsを無効化してもアクセスできました( `--cgroups=disabled` )
> 申し訳ございませんでした、howtoも更新していきます。
>
> お手数ですが、確認をお願いします。

当方の環境では、-d /dev/sndではエラーとなります。 --device /dev/snd で動作し、コンテナ上でも録音できることを確認しました。

armadillo:/# podman run -it --name=rec_example -d /dev/snd docker.io/debian /bin/bash
Error: invalid reference format
 
armadillo:/# podman run -it --name=rec_example --device /dev/snd docker.io/debian /bin/bash
(正しく動作)

録音データの不具合の件ですが、録音冒頭では必ず発生します。
arecordの仕様はよくわかりませんが、arecordでの録音開始と同時にPDM信号のPCM変換を始めている可能性はあるかなと思います。
ただ、開始時以外にも発生します。こちらについては別途どのようなタイミングで発生するかを調べてみようと思います。

at_dominique.m…

2022年8月26日 9時06分

shu1.ikeno-secislさん、

> 当方の環境では、-d /dev/sndではエラーとなります。 --device /dev/snd で動作し、コンテナ上でも録音できることを確認しました。

すみません、なぜか -d でも --device として扱われると思っていましたが、私の勘違いでした。 --device の short option はないですね。お知らせありがとうございました。

> 録音データの不具合の件ですが、録音冒頭では必ず発生します。
> arecordの仕様はよくわかりませんが、arecordでの録音開始と同時にPDM信号のPCM変換を始めている可能性はあるかなと思います。
> ただ、開始時以外にも発生します。こちらについては別途どのようなタイミングで発生するかを調べてみようと思います。

開始時以外のタイミングにも発生しますね。
実験してくれた同僚と確認しますが、引き続き調査よろしくお願いします。