This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM62L-PROCESSOR-SDK:录制音频时出现 SGTL-Audio 编解码器问题

Guru**** 2379650 points
Other Parts Discussed in Thread: TLV320AIC3106
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1498090/am62l-processor-sdk-sgtl-audio-codec-issue-while-recording-an-audio

器件型号:AM62L-PROCESSOR-SDK
主题:TLV320AIC3106中讨论的其他器件

工具/软件:

尊敬的 TI 支持部门:

我 目前正在开发基于 AM62Lx 处理器的定制电路板、它使用通过 I2C 和 I2S 接口连接的 SGTL5000音频编解码器。 编解码器已正确初始化、并已启用 defconfig 和器件应力中所需的所有配置。 使用aplay命令进行音频播放工作正常、我们能够听到清晰的音频输出。 但是、我们在使用arecord命令录制音频时遇到了问题。 下面给出了问题期间观察到的打印件。

root@am62lxx-ig69m:~#^C
root@am62lxx-ig69m:~# arecord -D plughw:0、0 -d 10 -f S16_LE test.wav
录音波形'test.wav ':有符号的16位小端字节序,速率8000 Hz,单声道
A 记录:PCM_READ:2272:读取错误:输入/输出错误
root@am62lxx-ig69m:~#
root@am62lxx-ig69m:~#
root@am62lxx-ig69m:~# arecord -D plughw:0、0 -d 10 -f S16_LE -r 44100 test.wav
录音波形'test.wav ':有符号16位小端字节序,速率44100 Hz,单声道
root@am62lxx-ig69m:~# avplay -D plughw:0.0 test.wav
播放 wave 'test.wav ':有符号16位小端字节序,速率44100 Hz,单声道
root@am62lxx-ig69m:~#
root@am62lxx-ig69m:~#
root@am62lxx-ig69m:~# arecord -D plughw:0、0 -d 10 -f S16_LE -r 48000 test.wav
录音波形'test.wav ':有符号的16位小端字节序,速率48000 Hz,单声道
[ 216.153055] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.073ms 长)[216.164177] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

太多了!!! (至少0.033ms 长)
[ 216.174375] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.057ms 长)[216.184824] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

太多了!!! (至少0.035ms 长)
[ 216.194950] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.068ms 长)[216.205424] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

太多了!!! (至少0.060ms 长)[ 216.215574] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

太多了!!! (至少0.032ms 长)
[ 216.225673] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.053ms 长)[216.236089] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

太多了!!! (至少0.032ms 长)
[ 216.246259] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.072ms 长)
[ 216.256675] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.082ms 长)[216.267048] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

太多了!!! (至少0.049ms 长)
[ 216.277212] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出
太多了!!! (至少0.050ms)[216.287568] DaVinci -McASP 2b00000.audio-controller:接收缓冲区溢出

只要我发出命令、就再触发一次 -"arecord -D plughw:0.0 -f S16_LE -c 2 -r 44100 -d 10 -v test.wav "没有发现问题。
每当我将采样率更改为8,000,16000… 有时会发现读/写错误或溢出/溢出问题。

在 aplay commad 中的问题:  每当我播放一个音频"资源繁忙"已经被观察到。我解决了,通过杀死称为"lvglsim "的过程,然后我能够播放音频。但我必须做到这一点在每次启动播放音频. 因此,有任何替代方法来删除这个过程,同时压缩 itslaf。

以下是 sgtl 的 dts 配置:

sound { /* SAI5: SGTL5000: Audio Codec support */
                compatible = "simple-audio-card";
                simple-audio-card,name = "sgtl5000";
                simple-audio-card,format = "i2s";
                simple-audio-card,frame-master = <&codecdai>;
                simple-audio-card,bitclock-master = <&codecdai>;
                simple-audio-card,bitclock-inversion;
                simple-audio-card,widgets =
                        "Microphone", "Microphone Jack",
                        "Headphone", "Headphone Jack",
                        "Speaker", "Speaker Ext",
                        "Line", "Line In Jack";
                simple-audio-card,routing =
                        "MIC_IN", "Microphone Jack",
                        "Microphone Jack", "Mic Bias",
                        "LINE_IN", "Line In Jack",
                        "Headphone Jack", "HP_OUT",
                        "Speaker Ext", "LINE_OUT";

                simple-audio-card,cpu {
                        sound-dai = <&mcasp0>;
                };

                        codecdai: simple-audio-card,codec {
                        sound-dai = <&sgtl5000>;
                        system-clock-frequency = <26000000>;
                };
        };


&mcasp0 {
       status = "okay";
       #sound-dai-cells = <0>;

       pinctrl-names = "default";
       pinctrl-0 = <&main_mcasp0_pins_default>;

       op-mode = <0>;          /* MCASP_IIS_MODE */
       tdm-slots = <2>;

       serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
               2 1 0 0 
               0 0 0 0
               0 0 0 0
               0 0 0 0
               >;

       tx-num-evt = <32>;
       rx-num-evt = <32>;
};

        main_mcasp0_pins_default: main_mcasp0-default-pins {
                pinctrl-single,pins = <
                        AM62PX_IOPAD(0x0190, PIN_INPUT, 0) /* (A11) MCASP0_ACLKX */
                        AM62PX_IOPAD(0x0194, PIN_INPUT, 0) /* (B11) MCASP0_AFSX */
                        AM62PX_IOPAD(0x018c, PIN_INPUT, 0) /* (B9) MCASP0_AXR0 */
                        AM62PX_IOPAD(0x0188, PIN_OUTPUT, 0) /* (A9) MCASP0_AXR1 */
                >;
        };

&main_i2c0 {
        pinctrl-names = "default";
        pinctrl-0 = <&main_i2c0_pins_default>;
        status = "okay";

        sgtl5000: sgtl5000@a { /* Audio: SGTL5000 Audio Codec */
                compatible = "fsl,sgtl5000";
                reg = <0x0a>;
                #sound-dai-cells = <0>;
                clocks = <&audioclk 0>;
                VDDA-supply = <&reg_1p8v>;
                VDDIO-supply = <&reg_1p8v>;
                VDDD-supply = <&reg_1p5v>;
                status = "okay";
        };


请您帮助我解决 SGTL 问题。

此致、  
Dheeraj  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="640123" url="~/support/processors-group/processors/f/processors-forum/1498090/am62l-processor-sdk-sgtl-audio-codec-issue-while-recording-an-audio 在 aplay commad 中的问题:  每当我播放一个音频"资源繁忙"已经被观察到。我解决了,通过杀死称为"lvglsim "的过程,然后我能够播放音频。但我必须做到这一点在每次启动播放音频. 因此,有任何替代方法来删除此过程,同时压缩 itslaf。

    如果您要禁用 lvgl demo、请执行:systemctl 禁用 ti-lvgl-demo。 这应该会禁用 lvgl 演示(它已经在后台播放音频)、从而导致资源繁忙错误。

    对于音频记录用例、您可以检查以下几点:  

    您是否尝试过配置 ALSA 混音器控件?  在我们的 EVM 上、我们通常执行以下操作:

    amixer -c 0 cset numid=71打开
    amixer -c 0 cset numid=70打开
    amixer -c 0 cset numid=64开
    amixer -c 0 cset numid=65开
    amixer -c 0 cset numid=15 127.
    arecord -D HW:0、0 -r 48000 -c 2 -f S16_LE test.wav -d 10

    avplay test.wav

    另外、请尝试在命令中添加--period-size=64、查看是否未出现下溢/溢出问题。

    另外还应检查麦克风偏置电压、以确保正确的录音功能。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    这里我已经分享了您共享的命令的输出。 这个问题似乎仍然存在。

    amixer -c 0 cset numid=71 on
    amixer: Cannot find the given element from control sysdefault:0
    
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: sgtl5000 [sgtl5000], device 0: davinci-mcasp.0-sgtl5000 sgtl5000-0 [davinci-mcasp.0-sgtl5000 sgtl5000-0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# arecord -l
    **** List of CAPTURE Hardware Devices ****
    card 0: sgtl5000 [sgtl5000], device 0: davinci-mcasp.0-sgtl5000 sgtl5000-0 [davinci-mcasp.0-sgtl5000 sgtl5000-0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# amixer -c 0 cset numid=71 on
    amixer: Cannot find the given element from control sysdefault:0
    
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# amixer -c 0 controls
    numid=25,iface=MIXER,name='Headphone Mux'
    numid=8,iface=MIXER,name='Headphone Playback ZC Switch'
    numid=7,iface=MIXER,name='Headphone Playback Switch'
    numid=6,iface=MIXER,name='Headphone Playback Volume'
    numid=1,iface=MIXER,name='PCM Playback Volume'
    numid=11,iface=MIXER,name='Lineout Playback Switch'
    numid=10,iface=MIXER,name='Lineout Playback Volume'
    numid=9,iface=MIXER,name='Mic Volume'
    numid=3,iface=MIXER,name='Capture Attenuate Switch (-6dB)'
    numid=24,iface=MIXER,name='Capture Mux'
    numid=4,iface=MIXER,name='Capture ZC Switch'
    numid=5,iface=MIXER,name='Capture Switch'
    numid=2,iface=MIXER,name='Capture Volume'
    numid=15,iface=MIXER,name='AVC Hard Limiter Switch'
    numid=17,iface=MIXER,name='AVC Integrator Response'
    numid=16,iface=MIXER,name='AVC Max Gain Volume'
    numid=14,iface=MIXER,name='AVC Switch'
    numid=18,iface=MIXER,name='AVC Threshold Volume'
    numid=19,iface=MIXER,name='BASS 0'
    numid=20,iface=MIXER,name='BASS 1'
    numid=21,iface=MIXER,name='BASS 2'
    numid=22,iface=MIXER,name='BASS 3'
    numid=23,iface=MIXER,name='BASS 4'
    numid=28,iface=MIXER,name='DAP MIX Mux'
    numid=12,iface=MIXER,name='DAP Main channel'
    numid=13,iface=MIXER,name='DAP Mix channel'
    numid=27,iface=MIXER,name='DAP Mux'
    numid=26,iface=MIXER,name='Digital Input Mux'
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# amixer -c 0 cset numid=15 on
    numid=15,iface=MIXER,name='AVC Hard Limiter Switch'
      ; type=BOOLEAN,access=rw------,values=1
      : values=on
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# amixer -c 0 cset name='Headphone Playback Switch' on
    numid=7,iface=MIXER,name='Headphone Playback Switch'
      ; type=BOOLEAN,access=rw------,values=1
      : values=on
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# amixer -c 0 cset name='Capture Switch' on
    numid=5,iface=MIXER,name='Capture Switch'
      ; type=BOOLEAN,access=rw------,values=1
      : values=on
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# amixer -c 0 cset name='Mic Volume' 127
    numid=9,iface=MIXER,name='Mic Volume'
      ; type=INTEGER,access=rw---R--,values=1,min=0,max=3,step=0
      : values=3
      | dBrange-
        rangemin=0,,rangemax=0
          | dBscale-min=0.00dB,step=0.00dB,mute=0
        rangemin=1,,rangemax=3
          | dBscale-min=20.00dB,step=10.00dB,mute=0
    
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# arecord -D hw:0,0 -r 48000 -c 2 -f S16_LE test.wav -d 10
    Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
    arecord: pcm_read:2272: read error: Input/output error
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# arecord -D hw:0,0 -r 44100 -c 2 -f S16_LE test.wav -d 10      
    Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
    root@am62lxx-ig69m:~# aplay test.wav 
    Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# 
    root@am62lxx-ig69m:~# arecord -D hw:0,0 -r 48000 -c 2 -f S16_LE test.wav -d 10 --period-size=64 
    Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
    arecord: pcm_read:2272: read error: Input/output error
    root@am62lxx-ig69m:~# 
    


    FYI:耳机已检查并正常工作。

    如果您要禁用 lvgl demo、请执行:systemctl 禁用 ti-lvgl-demo。  
    谢谢你的这个,我想知道有没有办法在编译过程中禁用它 itslef ?

    -- Dheeraj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dheeraj:

    请按照此处提供的说明进行操作:

    https://docs.lvgl.io/master/details/integration/os/yocto/lvgl_recipe.html

    理想情况下、从 local.conf 文件中删除" lvgl"应该允许您不编译 lvgl。

    回到音频问题。  

    您是否可以配置与您的编解码器相关的 ALSA 混音器控件 以进行录制? 我分享的是基于 AM62x EVM 电路板和 TLV320AIC3106编解码器的示例。

    MCASP 引脚上是否看到正确的 MCLK、BCLK 和 FSYNC?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    对于 sgtl ,我先设置这些命令并进行测试,但仍然会看到相同的问题。

    MCASP 引脚上是否看到正确的 MCLK、BCLK 和 FSYNC?
    是、它们已正确配置、并且在播放任何音频文件时不会出现问题。

    ~# amixer -c 0 sset Lineout mute
    ~# amixer -c 0 sset 耳机取消静音
    ~# amixer -c 0 sset 耳机100%
    ~# amixer 设置耳机回放音量127.

    -- Dheeraj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dheeraj:

    更改 mic_bias 是否有助于录制?

    我在驱动程序中看到:

    enum sgtl5000_micbias 电阻器{
    SGTL5000_MICBIAS_OFF = 0、
    SGTL5000_MICBIAS_2K = 2、
    SGTL5000_MICBIAS_4K = 4、
    SGTL5000_MICBIAS_8K = 8、
    };

    您是否也尝试过在有关 SGTL5000编解码器的音频论坛中寻求帮助? 因为它看起来更像是编解码器问题、而不是 SoC 问题。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    很抱歉延迟的响应,我已经离开办公室,这个问题已经解决了只是通过将 I2S 格式更改为"dsp_b".
    关于 lvgl 问题,我找不到任何与 lvgl 相关的内容,如你所说的,在你提供的链接中,他们分享了如何在构建中包含 lvgl 的详细信息。

    您能否分享我如何从我的构建中删除 lvgl?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dheeraj、

    很高兴听到音频功能现在可以正常工作。  

    我已将您的问题发送给我们的 Yocto 专家、他们会帮助您从构建中移除 lvgl。 如果您在接下来的2-3天内没有收到专家的答复、请随时联系。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dheeraj:

    您能否分享如何从我的构建中删除 lvgl?

    您能尝试将以下内容添加到您的吗 conf/local.conf 文件...

    # Remove AM62L LVGL Demo
    RDEPENDS:packagegroup-arago-tisdk-addons:remove = "ti-lvgl-demo"

    我只是进行了一个测试构建、在我的系统上、它会从文件系统中删除 LVGL 演示和相关的启动服务。

    此致、Andreas