首页 > 技术知识 > 正文

nvidia nano平台麦克风I2S调试3

1. 前言

承接上篇 https://www.ebaina.com/articles/140000012936

2. 混音控件 name=I2S4 codec master mode

可以通过AlsaMixer读取和更改“I2S4编解码器主模式”。 它有两个值“cbs-cfc”(可以在麦克风上看到I2S时钟) 和“cbm-cfm”(任何不存在的时钟)

nvidia nano平台麦克风I2S调试31

此外,当选择低采样率FS=8KHz和 输入设备“Tegra-snd-t210ref-mobile-rt565x: – (hw: 1,0)”时, 可以得到信号 就像正常的麦克风声音(在时域),但它只是类似 它没有声音信息,只是随机的脉冲音:

nvidia nano平台麦克风I2S调试32

Fsck值高于正常,超过3MHz

3. Fsck问题

根据麦克数据表

从串口数据端口的格式是I²S, 24位,二补。 每个WS立体帧必须有64个SCK周期, 或者每个数据字必须有32个SCK周期。

所以认想用S32_LE作为样本量,而不是S16_LE。

sync高于3MHz是什么意思? 如果fsync正确的速率在8kHz? 它应该是正确的频率在44.1kHz。 能测量位钟和fsync频率吗?

样本大小和采样率的任何变化都不能改善记录信号的质量。 我认为这是因为Fsck比可能的要高。 对于采样率8kHz,看到Fsck=3.26Mhz,但假设32位数据,2ch,和采样率8000Hz,我们得到Fsck= 32x2x8000= 512kHz,而不是3.26Mhz。

然而,信号Fsck是由Jetson Nano板产生的,而不是由mic产生的, 并且取决于44100的采样率变化,其中Fsck=19.4Mhz。

当尝试设置采样率为88400时,也得到Fsck=18Mhz (arecord -D hw:tegrasndt210ref,0 -c 2 -r 88400 -f S32_LE -D 100 cap.wav)。 不知道如何降低Fsck

4.分析

每个麦克风数据表的样本大小必须是S32_LE S16_LE不工作 Fsck应该是抽样率 位时钟应该是采样速率采样大小通道数。 所以在8kHz @ 32位有2个频道,期待8kHz fsck和512kHz比特时钟。

默认情况下,aud_mclk(40引脚头上的引脚7)的工作频率为256*fs, 但在8kHz时,只有2.048MHz和3.26MHz。 所以不清楚3.26MHz从何而来。

5.查看工作频率

可以转储时钟频率,看看它们应该在什么频率工作 sudo grep “aud_mclk|i2s” /sys/kernel/debug/clk/clk_summary

$ sudo grep “aud_mclk\|i2s” /sys/kernel/debug/clk/clk_summary [sudo] password for dim: i2s4_sync 0 0 24576000 24576000 0 0 i2s3_sync 0 0 24576000 24576000 0 0 i2s2_sync 0 0 24576000 24576000 0 0 i2s1_sync 0 0 24576000 24576000 0 0 i2s0_sync 0 0 24576000 24576000 0 0 i2s4 0 0 45158334 11289600 0 0 i2s3 0 0 18063334 18345600 0 0 i2s2 0 0 6021112 1536000 0 0 i2s1 0 0 45158334 11289600 0 0 i2s0 0 0 45158334 11289600 0 0 arecord -D hw:tegrasndt210ref,0 -c 2 -r 8000 -f S32_LE -d 100 cap.wav Recording WAVE cap.wav : Signed 32 bit Little Endian, Rate 8000 Hz, Stereo

nvidia nano平台麦克风I2S调试33

arecord -D hw:tegrasndt210ref,0 -c 2 -r 16000 -f S32_LE -d 100 cap.wav Recording WAVE cap.wav : Signed 32 bit Little Endian, Rate 16000 Hz, Stereo

nvidia nano平台麦克风I2S调试34

arecord -D hw:tegrasndt210ref,0 -c 2 -r 48000 -f S32_LE -d 100 cap.wav Recording WAVE cap.wav : Signed 32 bit Little Endian, Rate 48000 Hz, Stereo

nvidia nano平台麦克风I2S调试35

arecord -D hw:tegrasndt210ref,0 -c 2 -r 96000 -f S32_LE -d 100 cap.wav Recording WAVE cap.wav : Signed 32 bit Little Endian, Rate 96000 Hz, Stereo

nvidia nano平台麦克风I2S调试36

6. 把每个配置的时钟都去掉 arecord -D hw:tegrasndt210ref,0 -c 2 -r 8000 -f S32_LE -d 100 cap.wav & sudo grep “aud\|i2s” /sys/kernel/debug/clk/clk_summary arecord -D hw:tegrasndt210ref,0 -c 2 -r 16000 -f S32_LE -d 100 cap.wav & sudo grep “aud\|i2s” /sys/kernel/debug/clk/clk_summary arecord -D hw:tegrasndt210ref,0 -c 2 -r 48000 -f S32_LE -d 100 cap.wav & sudo grep “aud\|i2s” /sys/kernel/debug/clk/clk_summary arecord -D hw:tegrasndt210ref,0 -c 2 -r 96000 -f S32_LE -d 100 cap.wav & sudo grep “aud\|i2s” /sys/kernel/debug/clk/clk_summary

猜你喜欢