首页 > 技术知识 > 正文

nvidia nano平台麦克风I2S调试2

1. 前言 2. 查看调试节点 3. 分析录音问题 4. I2S4编解码器主模式控件 1. 前言

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

2. 查看调试节点 alsactl init tegrasnd210ref => “alsactl: init:1776: Cannot find soundcard ‘tegrasnd210ref’…” arecord -D hw:tegrasnd210ref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav => ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card arecord: main:788: audio open error: No such device echo 0 | sudo tee /sys/kernel/debug/tracing/trace => 0 echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable => 0 echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on => 1 echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable => 1 arecord -D hw:tegrasnd210ref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav => ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card arecord: main:788: audio open error: No such device sudo cat /sys/kernel/debug/tracing/trace => tracer: nop # # entries-in-buffer/entries-written: 0/0 #P:4 # # _—–=> irqs-off # / _—-=> need-resched # | / _—=> hardirq/softirq # || / _–=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | |

之前声卡名字里漏掉了一个t

$ alsactl init tegrasndt210ref $ arecord -D hw:tegrasndt210ref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav

仍然得到了一些噪音 就像在Audacity的例子中一样 注意到录音的速度非常快——接近1秒,而不是正常的10秒 音频文件持续时间- 10秒 所以尝试通过直接测量来估计SCK频率-它在我的示波器上接近20MHz (Samplerate FS = 44100hz)

命令

$arecord -D hw:tegrasndt210ref,0 -c 1 -r 8000 -f S16_LE -D 100 cap.wav

产生Fsck = 3.3Mhz, 其他类似:

FS=11025 => Fsck = 4.5MHz, FS=22050 => Fsck = 8.9-9Mhz

认为这不是正常值

3. 分析录音问题

如果在较短的时间内捕获10秒的音频, 那么它可能是以下两种情况之一…… Jetson I2S没有配置为master 音频没有按照预期从I2S接口路由,DMA将捕获样本

(1)对于#1,默认情况下Jetson是I2S主服务器 可以通过设备树或通过适当的混频器控制进行修改 可以通过…检查混频器控制 $ amixer -c tegrasndt210ref cget name=”I2S4 Codec Master Mode”

(2)对于#2,可以通过查看输出 (现在已经纠正了soundcard的名称)

$ echo 0 | sudo tee /sys/kernel/debug/tracing/trace $ echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable $ echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on $ echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable $ arecord -D hw:tegrasnd210tref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav $ sudo cat /sys/kernel/debug/tracing/trace

测试结果如下:

desktop:~$ amixer -c tegrasndt210ref cget name=”I2S4 Codec Master Mode” amixer: Cannot find the given element from control hw:1 desktop:~$ echo 0 | sudo tee /sys/kernel/debug/tracing/trace 0 desktop:~$ echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable 0 desktop:~$ echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on 1 desktop:~$ echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable 1 desktop:~$ arecord -D hw:tegrasnd210tref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card arecord: main:788: audio open error: No such device desktop:~$ sudo cat /sys/kernel/debug/tracing/trace # tracer: nop # # entries-in-buffer/entries-written: 0/0 #P:4 # # _—–=> irqs-off # / _—-=> need-resched # | / _—=> hardirq/softirq # || / _–=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | |
<
4. I2S4编解码器主模式控件

以下说明了什么?

amixer -c tegrasndt210ref controls | grep I2S4

如果看到 “I2S4编解码器主模式”控件 确保引号没有再次出现问题 如果有问题的话,可以打出。 请注意这里记录了所有I2S混频器控件以供参考

$ echo 0 | sudo tee /sys/kernel/debug/tracing/trace $ echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable $ echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on $ echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable $ arecord -D hw:tegrasndt210ref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav $ sudo cat /sys/kernel/debug/tracing/trace

结果如下

desktop:~$ amixer -c tegrasndt210ref controls | grep I2S4 numid=480,iface=MIXER,name=I2S4 BCLK Ratio numid=482,iface=MIXER,name=I2S4 Capture mono to stereo conv numid=481,iface=MIXER,name=I2S4 Capture stereo to mono conv numid=479,iface=MIXER,name=I2S4 Channels numid=474,iface=MIXER,name=I2S4 Loopback numid=531,iface=MIXER,name=I2S4 Mux numid=485,iface=MIXER,name=I2S4 Playback FIFO threshold numid=484,iface=MIXER,name=I2S4 Playback mono to stereo conv numid=483,iface=MIXER,name=I2S4 Playback stereo to mono conv numid=478,iface=MIXER,name=I2S4 Sample Rate numid=476,iface=MIXER,name=I2S4 codec bit format numid=618,iface=MIXER,name=I2S4 codec frame mode numid=619,iface=MIXER,name=I2S4 codec master mode numid=477,iface=MIXER,name=I2S4 fsync width numid=475,iface=MIXER,name=I2S4 input bit format desktop:~$ echo 0 | sudo tee /sys/kernel/debug/tracing/trace [sudo] password for dim: 0 desktop:~$ echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable 0 desktop:~$ echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on 1 desktop:~$ echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable 1 desktop:~$ arecord -D hw:tegrasndt210ref,0 -c 1 -r 44100 -f S16_LE -d 10 cap.wav Recording WAVE cap.wav : Signed 16 bit Little Endian, Rate 44100 Hz, Mono desktop:~$ sudo cat /sys/kernel/debug/tracing/trace # tracer: nop # # entries-in-buffer/entries-written: 30/30 #P:4 # # _—–=> irqs-off # / _—-=> need-resched # | / _—=> hardirq/softirq # || / _–=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | arecord-8310 [003] …. 200.128923: snd_soc_dapm_widget_power: widget=Capture 1 val=1 arecord-8310 [003] …. 200.128928: snd_soc_dapm_widget_power: widget=ADMAIF1 Transmit val=1 arecord-8310 [003] …. 200.128930: snd_soc_dapm_widget_power: widget=ADMAIF1 TX val=1 arecord-8310 [003] …. 200.128931: snd_soc_dapm_widget_power: widget=ADMAIF1 Mux val=1 arecord-8310 [003] …. 200.128943: snd_soc_dapm_widget_power: widget=I2S4 RX val=1 arecord-8310 [003] …. 200.128945: snd_soc_dapm_widget_power: widget=I2S4 Receive val=1 arecord-8310 [003] …. 200.128946: snd_soc_dapm_widget_power: widget=I2S4 CIF Transmit-I2S4 Receive val=1 arecord-8310 [003] …. 200.128947: snd_soc_dapm_widget_power: widget=I2S4 CIF Transmit val=1 arecord-8310 [003] …. 200.128948: snd_soc_dapm_widget_power: widget=I2S4 CIF TX val=1 arecord-8310 [003] …. 200.128950: snd_soc_dapm_widget_power: widget=I2S4 DAP RX val=1 arecord-8310 [003] …. 200.128951: snd_soc_dapm_widget_power: widget=I2S4 DAP Receive val=1 arecord-8310 [003] …. 200.128952: snd_soc_dapm_widget_power: widget=x Capture-I2S4 DAP Receive val=1 arecord-8310 [003] …. 200.128954: snd_soc_dapm_widget_power: widget=x Capture val=1 arecord-8310 [003] …. 200.128955: snd_soc_dapm_widget_power: widget=x IN val=1 arecord-8310 [003] …. 200.128956: snd_soc_dapm_widget_power: widget=x Mic val=1 arecord-8310 [000] …. 200.557074: snd_soc_dapm_widget_power: widget=Capture 1 val=0 arecord-8310 [000] …. 200.557107: snd_soc_dapm_widget_power: widget=ADMAIF1 Transmit val=0 arecord-8310 [000] …. 200.557121: snd_soc_dapm_widget_power: widget=ADMAIF1 TX val=0 arecord-8310 [000] …. 200.557134: snd_soc_dapm_widget_power: widget=ADMAIF1 Mux val=0 arecord-8310 [000] …. 200.557187: snd_soc_dapm_widget_power: widget=I2S4 RX val=0 arecord-8310 [000] …. 200.557204: snd_soc_dapm_widget_power: widget=I2S4 Receive val=0 arecord-8310 [000] …. 200.557217: snd_soc_dapm_widget_power: widget=I2S4 CIF Transmit-I2S4 Receive val=0 arecord-8310 [000] …. 200.557230: snd_soc_dapm_widget_power: widget=I2S4 CIF Transmit val=0 arecord-8310 [000] …. 200.557242: snd_soc_dapm_widget_power: widget=I2S4 CIF TX val=0 arecord-8310 [000] …. 200.557253: snd_soc_dapm_widget_power: widget=I2S4 DAP RX val=0 arecord-8310 [000] …. 200.557265: snd_soc_dapm_widget_power: widget=I2S4 DAP Receive val=0 arecord-8310 [000] …. 200.557277: snd_soc_dapm_widget_power: widget=x Capture-I2S4 DAP Receive val=0 arecord-8310 [000] …. 200.557289: snd_soc_dapm_widget_power: widget=x Capture val=0 arecord-8310 [000] …. 200.557301: snd_soc_dapm_widget_power: widget=x IN val=0 arecord-8310 [000] …. 200.557311: snd_soc_dapm_widget_power: widget=x Mic val=0
<

猜你喜欢