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.

[参考译文] Linux/processor-SDK-AM437X:音频不工作

Guru**** 2928980 points

Other Parts Discussed in Thread: TLV320AIC3106, AM4372

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663135/linux-processor-sdk-am437x-audio-not-working

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

工具/软件:Linux

我使用的是 RT-Linux SDK 的最后一个版本"ti-processor-sdk-linux-rt-AM437X-EVM-04.01.00.06"。 我有一个基于 AM437X-gp-EVM 的定制板。 我们使用的是"TLV320AIC3106IRGZT"音频编解码器。

我 已经对 McASP0进行了引脚多路复用更改、它在 Linux SDK "ti-processor-sdk-linux-am437x-evm-02.00.01.07"上运行时是正确的。

下面是我正在使用的 DTS 文件中的'stound'节点和'tlv320aic3106'节点:

声音0:声音@0{
兼容="简单音频卡";
simple-audio-card、name ="AM437x-GP-EVM";
simple-audio-card、小工具=
"麦克风"、"麦克风插孔"、
"耳机"、"耳机插孔"、
"线路"、"线路输入";
简单音频卡,路由=
"Mono Out"、"Mono _lout"、
"LINE1L"、"麦克风偏置";
simple-audio-card、format ="DSP_b";
simple-audio-card、bitclock-master =<&sound0_master>;
simple-audio-card、frame-master =<&sound0_master>;
简单音频卡、位时钟反转;

简单音频卡、CPU{
Sound-Dai =<&McASP1>;
系统时钟频率=<12000000>;
};

sound0_master:simple-audio-card、codec{
sound-dai =<&tlv320aic3106>;
系统时钟频率=<12000000>;
};
};

tlv320aic3106:tlv320aic3106@1b{
#sound-di-cells =<0>;
兼容="ti、tlv320aic3106";
reg =<0x1b>;
状态="正常";
ai3x-micbias vg = ;
GPIO =<&GPIO2 3 GPIO_ACTIVE_LOW_>;

/*稳压器*/
IOVdd-supply =<&EVM_v3_3D>;/* V3_3D -> EN:V1_8D -> VBAT */
AVDD-SUPPLY =<&EVM_v3_3D>;/* v3_3AUD -> V3_3D ->... *
DRVDD-SUPPLY =<&EVM_v3_3D>;/* v3_3AUD -> V3_3D ->... *
DVDD 电源=<&ldo1>;/* V1_8D -> LDO1 */
};

McASP1{
#sound-di-cells =<0>;
pinctrl-names ="default"、"sleep";
pinctrl-0 =<&McASP1_PINs>;
pinctrl-1 =<&McASP1_SLEEP_PINs>;

状态="正常";

OP-MODE =<0>;/* MCASP_IIS_MODE */
TDM-SLOTS =<2>;
/* 4个串行器*/
serial-dir =</* 0:非活动、1:TX、2:Rx *
1 2 0 0
>;
tx-num-evt =<32>;
Rx-num-evt =<32>;
};

在 dmesg 中 、我可以看到驱动程序正在正确加载、编解码器映射正常。

[1.714138]  ASOC-simple-card sound0:tlv320aic3x-hifi <->4803c000.McASP 映射正常

[4.052082] ALSA 器件列表:

[4.055267] #0:AM437X-GP-EVM

但当我尝试使用矩阵 GUI 的多媒体选项卡中给出的"aplay"或"AAC*"示例播放 wav 文件时,没有音频输出。

任何帮助、问题可能出在哪。  

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

    尊敬的 Vimal:

    [引用 USER="Vimal kumar56"]我使用的是 RT-Linux SDK 的最后一个版本"ti-processor-sdk-linux-rt-AM437X-EVM-04.01.00.06"。[/引用]

    最新的 RT-Linux SDK 版本为"ti-processor-sdk-linux-rt-AM437X-EVM-04.02.00.09"

    [报价用户="Vimal kumar56"]我有一个基于 AM437X-gp-EVM 的定制板。 我们使用的是"TLV320AIC3106IRGZT"音频编解码器。

    请描述定制板与 AM437x EVM 在 McASP、I2C 和音频编解码器方面的确切区别。

    [引用 user="Vimal kumar56"]但当我尝试使用矩阵 GUI 的多媒体选项卡中提供的"aplay"或"AAC*"示例播放 wav 文件时,没有音频输出。

    请提供您从以下命令获得的完整控制台输出:

     aplay -l

    aplay -Dplughw:0、0 


    帕维尔

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

    [引用 user="Vimal kumar56"]我 已对 McASP0[/quot]进行了引脚多路复用更改

    您实际上是指 McASP1吗? 您能否说明您在定制板、McASP0或 McASP1上使用的 McASP 实例? 在 AM437x TI EVM 上、使用了 McASP1。

    [引用 user="Vimal kumar56"]simple-audio-card, widget =
    "麦克风"、"麦克风插孔"、[/QUERP]

    [引用 user="Vimal kumar56">简单音频卡,路由=
    "Mono Out"、"Mono _lout"、
    "LINE1L"、"麦克风偏置";[/QUERP]

    您的定制板上是否有麦克风? 在 AM437x TI EVM 上、我们没有 Micriphone、我们有耳机输出和线路输入。

    [报价用户="Vimal kumar56"]系统时钟频率=<12000000>;[/quot]

    您的定制板上是否有外部12MHz 晶体振荡器、用于为音频编解码器生成源时钟?

    [引用 user="Vimal kumar56"]serial-dir =</* 0:非活动、1:TX、2:Rx *
    1 2 0 0[/报价]

    在 AM437x EVM 上、我们使用 McASP1_axr2和 McASP1_axr3、而在定制板上使用 McASP1_axr0和 McASP1_axr1、这是正确的吗?

    此致、
    帕维尔

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

    您好、Pavel、

    感谢您对此进行深入研究。  

    我们确实对 AM437X-EVM 进行了一些更改。 对于 gp-EVM 中的 i2c1_SCL 和 i2c1_sda、它们使用 T20 (模式2中的 spi0_cs0)、T21 (模式2中的 spi0_D1)、但我们使用处理器中的 B13和 B14线路。

    i2c1_PINS_DEFAULT:i2c1_PINS_DEFAULT{
    pinctrl-single、pins =<
    AM4372_IOPAD (0x910、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3)/*(B13) mii1_Rx_er.I2C1_SCL *
    AM4372_IOPAD (0x90c、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3)/*(B14) mii1_crs.I2C1_SDA */
    >;
    };

    我们使用的是相同的"tlv320aic3106"音频编解码器。 我们的板上确实有一个麦克风。

    对于 MCASP、我们还分别将 McASP1和 McASP1_AXR0和 McASP1_AXR1用于音频输出和麦克风。

    我们从处理器使用的 McASP1线路之间存在差异,因为我们使用的是:

    McASP1_PINS:McASP1_PINS{
    pinctrl-single、pins =<
    AM4372_IOPAD (0x9a0、PIN_INPUT_PULLDOWN | MUX_MODE3)/*(L23) McASP0_aclkr.McASP1_aclkx *
    AM4372_IOPAD (0x9a4、PIN_INPUT_PULLUGDOWN | MUX_MODE3)/*(K23) McASP0_fsr.McASP1_FSX *
    AM4372_IOPAD (0x9a8、PIN_OUTPUT 下拉| MUX_MODE3)/*(M25) McASP0_axr1.McASP1_axr0 *
    AM4372_IOPAD (0x9ac、PIN_INPUT 下拉| MUX_MODE3)/*(L24) McASP0_ahclkx.McASP1_axr1 *
    >;
    };

    但在 AM437X-gp-EVM 中、他们使用的是:

    mii1_col.McASP1_axr2

    mii1_crs.McASP1_aclkx

    mii1_rxer.McASP1_FSX

    rmii1_ref_clk.McASP1_axr3

     

    这些是您在上一次答复中询问的 aplay 命令的输出。

    根目录@AM437X-EVM:~编号
    root@AM437X-EVM:~ aplay -l
    ****播放硬件设备列表****
    卡0:AM437xGPEVM [AM437x-GP-EVM]、器件0:Davinci-McASP/0-tlv320aic3x-htlifi v320aic3x-hife-0 []
    子设备:1/1
    子设备#0:子设备#0
    根目录@AM437X-EVM:~编号
    根目录@AM437X-EVM:~编号
    root@AM437X-EVM:~# aplay -Dplughw:0、0 iphone_6_original.wav
    播放波'iphone_6_original.wav':有符号16位小端序、速率44100Hz、立体声
    根目录@AM437X-EVM:~编号
    根目录@AM437X-EVM:~编号

    此致、

    Vimal Kumar

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

    [引用 user="Vimal kumar56"]

    我们确实对 AM437X-EVM 进行了一些更改。 对于 gp-EVM 中的 i2c1_SCL 和 i2c1_sda、它们使用 T20 (模式2中的 spi0_cs0)、T21 (模式2中的 spi0_D1)、但我们使用处理器中的 B13和 B14线路。

    i2c1_PINS_DEFAULT:i2c1_PINS_DEFAULT{
    pinctrl-single、pins =<
    AM4372_IOPAD(0x910、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3)/*(B13) mii1_Rx_er.I2C1_SCL *
    AM4372_IOPAD(0x90c、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3)/*(B14) mii1_crs.I2C1_SDA */
    >;
    };

    [/报价]

    您有"i2c1_PINS_DEFAULT"、而默认情况下、我们在 AM437X-gp-evm.dts 文件中有"i2c1_PINs"。 您是否按如下方式更新此 DTS 文件?

    i2c1{(&I)
       状态="正常";
       pinctrl-names ="default";
       -pinctrl-0 =<&i2c1_PINs>;
       +pinctrl-0 =<&i2c1_default>;

    您还可以检查在 I2C1引脚 B13/B14上是否正确检测到 AIC3106编解码器。 您可以使用 i2c 用户空间工具。 请查看以下 Wiki 以了解更多信息:

    processors.wiki.ti.com/.../Linux_Core_I2C_User's_Guide

    [引用 user="Vimal kumar56"]

    我们的板上确实有一个麦克风。

    对于 MCASP、我们还分别将 McASP1和 McASP1_AXR0和 McASP1_AXR1用于音频输出和麦克风。

    [/报价]

    在 AM437x EVM 中、对于音频回放/输出、我们使用 McASP1_axr2引脚和耳机(J16)。 您的定制板上是否有耳机? 如果没有、如何验证您没有音频播放? 如果 McASP1_axr0引脚在音频回放期间具有音频数据、则可以使用示波器进行测量。

    在 AM437X-gp-evm.dts 文件中、我们有以下耳机代码、但您的 DTS 中缺少这些代码:

    简单音频卡,路由=
             "耳机插孔"、   "HPLOUT"、
             "耳机插孔"、   "HPROUT"、

    此致、
    帕维尔

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

    引脚复用和音频编解码器路由都是正确的。 连接 HDMI 时、我会听到 HDMI 发出的声音。 我们有一个音频放大器连接到编解码器、该编解码器具有 AMP_OFF GPIO (GPIO2_3)、我们将其驱动为低电平以使音频放大器正常工作。

    我们通过 DTS 来实现这一目标、如下所示:

    GPIO_Pins:GPIO_Pins{
    pinctrl-single、pins =<
    AM4372_IOPAD (0x894、PIN_OUTPUT 下拉| MUX_MODE7) /*(E10) GPMC_oen_ren。GPIO2_3 */
    AM4372_IOPAD (0x944、PIN_INPUT_PULLUP | MUX_MODE7) /*(A16) rmii1_ref_clk.GPIO0_29 */
    >;
    };

    tlv320aic3106:tlv320aic3106@1b{
    #sound-di-cells =<0>;
    兼容="ti、tlv320aic3106";
    reg =<0x1b>;
    状态="正常";
    ai3x-micbias vg = ;
    GPIO =<&GPIO2 3 GPIO_ACTIVE_LOW_>;

    /*稳压器*/
    IOVdd-supply =<&EVM_v3_3D>;/* V3_3D -> EN:V1_8D -> VBAT */
    AVDD-SUPPLY =<&EVM_v3_3D>;/* v3_3AUD -> V3_3D ->... *
    DRVDD-SUPPLY =<&EVM_v3_3D>;/* v3_3AUD -> V3_3D ->... *
    DVDD 电源=<&ldo1>;/* V1_8D -> LDO1 */
    };

    GPIO2{
    状态="正常";
    P3{
    GPIO-hog;
    GPIO =<3 GPIO_ACTIVE_HIGH_>;
    输出低电平;
    线路名称="AMP_OFF";
    };
    };


    但在这之后、GPIO2_3也不会变为低电平、它处于高电平状态。 如果我通过硬件使 GPIO 变为低电平、则意味着声音正常。

    有什么想法、为什么 GPIO 在这些变化后仍然为高电平?
    是否缺少任何 defconfig 或其他内容? GPIO 引脚的 DTS 配置似乎不起作用?

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

    Vimal、

    您能否在用户空间中检查寄存器 CTRL_CONF_GPMC_oen_REN/0x44E10894中的值? 您可以使用 devmem2工具。

    以下 DTS 条目可能会覆盖您的 DTS GPIO2_3 pinmux 设置:

    AM437X-gp-evm.dts

    NAND_FLASH_x8:NAND_FLASH_x8{

    pinctrl-single、pins =<

    AM4372_IOPAD (0x894、PIN_OUTPUT | MUX_MODE0)/* GPMC_oen_ren。GPMC_oen_ren *

    >;

    };

     

    [引用 USER="Vimal kumar56"]&GPIO2{
    状态="正常";
    P3{
    GPIO-hog;
    GPIO =<3 GPIO_ACTIVE_HIGH_>;
    输出低电平;
    线路名称="AMP_OFF";
    };
    };[/报价]

     

    您需要在 GPIO2节点中添加 GPIO_Pins。 有关 GPIO0节点示例、请参阅:

    GPIO0{&gpio0}
       pinctrl-names ="default";
       pinctrl-0 =<&GPIO0_PINs>;
       状态="正常";

     

    GPIO0_Pins:GPIO0_Pins{
          pinctrl-single、pins =<
             AM4372_IOPAD (0xa6c、PIN_OUTPUT | MUX_MODE9)/* SPI2_cs0.GPIO0_23 SEL_eMMCorNANDn *
          >;
       };

     

    另请参阅下面的 e2e 线程以了解 GPIO-hog 的用法:

    此致、
    帕维尔

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

    我按照建议更改了 GPIO2节点、并禁用了 nand_flash_x8引脚多路复用。 现在、我已正确获得音频。

    谢谢
    Vimal