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/am3352:McASP aplay 问题

Guru**** 2556360 points
Other Parts Discussed in Thread: TLV320AIC3106, AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/602327/linux-am3352-mcasp-aplay-problem

器件型号:AM3352
主题中讨论的其他器件:TLV320AIC3106

工具/软件:Linux

我现在在 AM335x_SDK_v03_02_00_05上使用 SDK 版本的新内核。
在旧的3.2.0 内核中、aplay 播放声音正常。
但我遇到 了使用新内核根本无法播放声音的问题。
我的模式为 SND_SOC_DAIFMT_I2S| SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF
编解码器 ada1961将 BCLK 和 lrclk 输出到 AM335x。
我 使用 McASP0_AHCLKX 将 MCLK 24MHz 输出到编解码器。
我在示波器上测量 引脚 McASP0_AXR0上存在数据脉冲、 引脚 McASP0_AHCLKX 上存在24MHz 频率。
我还测量 引脚 McASP0_ACLKX 和 McASP0_FSX 上的 BCLK 和 LRCLK 频率是否正确。
编解码器的设置与在过去的3.2.0内核中播放声音效果良好的值相同。
运行 cat /proc/asound/card0/pcm0p/sub0/status 时
它正在更改。
 
root@AM335x-EVM:/sys/devices/platform/sound/ADAU1X61X cat /proc/asound/card0/pcm0p/sub0/status
状态:正在运行
owner_pid :2850
TRIGGER_TIME:5419.227225978
tstamp   :0.000000000
延时   : 18342
可用时间   :5658
AVAIL_max : 18000
----
HW_PTR   : 227674
appl_ptr  : 246016
root@AM335x-EVM:/sys/devices/platform/sound/ADAU1X61X cat /proc/asound/card0/pcm0p/sub0/status
状态:正在运行
owner_pid :2850
TRIGGER_TIME:5419.227225978
tstamp   :0.000000000
延时   : 21595
可用时间   :2405
AVAIL_max :5994
----
HW_PTR   : 578421
appl_ptr  : 600016
 
我的 DTS 如下所示  
我不使用 简单音频卡,我使用 DaVinci-EVM.c 和操作  

McASP0_Pins:McASP0_Pins{
pinctrl-single、pins =<
0x190 (PIN_INPUT_PULLUP| MUX_MODE0)/* McASP0_aclkx *
0x194 (PIN_INPUT_PULLUP | MUX_MODE0)/* McASP0_FSX *
0x198 (PIN_OUTPUT 上拉| MUX_MODE0)/* McASP0_axr0 */
0x1ac (PIN_OUTPUT PULLUP| MUX_MODE0)/* McASP0_ahclkx *
>;
};

i2c0{(&I)
pinctrl-names ="default";
pinctrl-0 =<&i2c0_PINs>;

状态="正常";
时钟频率=<400000>;

audio_codec:adau1961@3a{
状态="正常";
compatible ="dr、adau1961";
reg =<0x3a>;
};
};

&McASP0{
pinctrl-names ="default";
pinctrl-0 =<&McASP0_PINs>;
状态="正常";
OP-MODE =<0>;/* MCASP_IIS_MODE */
TDM-SLOTS =<2>;
/* 16串行器*/
serial-dir =</* 0:非活动、1:TX、2:Rx *
1 0 0 0 0
>;
tx-num-evt =<1>;
Rx-num-evt =<0>;
};

有人能给我一些想法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对 McASP 很奇怪
    进行测试时、我将会看到一个错误
    我删除了以下由 myself.in 静态 int Davinci_McASP_probe (struct platform_device *pdev)添加的行
    McASP_SET_BIits (dev->base + DaVinci_MCASP_Pdir_REG、AHCLKX);
    然后、它的运行方式与新内核类似、有 MCLK BCLK lrclk 和数据脉冲、但没有声音。

    但是当我在新内核中添加这一行时,内核恐慌。
    有人能告诉我原因吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    根据我的理解、将旧 SDK6 (内核3.2)与 AM335x 定制板配合使用时、您可以成功使用 aplay。 但是、当切换到 PSDK 3.02 (内核4.4.3.32)时、您会遇到问题。

    首先、您可以比较3.2和4.4内核之间的引导日志、并检查 Audio/ALSA/McASP 是否存在一些主要差异

    您还可以在3.2和4.4中转储 McASP 寄存器并比较结果。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、还有关于在 DRA7x 器件中调试音频问题的应用手册、但主要概念也适用于 AM335x、您可以查看:

    www.ti.com/.../sprac09a.pdf

    www.ti.com/.../sprac10.pdf

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

    您好 Pavel:

    我转储了新内核的寄存器,它几乎是一样的。

    我打印静态 void McASP_START_TX (struct Davinci_McASP *McASP)末尾的值

    [407.155260] regs_offset:ac、val:101
    [407.158775] regs_offset:6C、val:11
    [407.162199] regs_offset:A8、val:18074
    [407.165886] regs_offset:68、val:10070
    [407.169571] regs_offset:b0、val:80
    [407.172995] regs_offset:70、val:180080
    [407.176767] regs_offset:B4、val:8000
    [407.180364] regs_offset:74、val:8000
    [407.183962] regs_offset:14、val:8000001
    [407.187821] regs_offset:64、val:FFFF
    [407.191417] regs_offset:A4、val:FFFF
    [407.195014] regs_offset:78、val:0
    [407.198351] regs_offset:B8、val:3

    xstat 寄存器始终为0x10c、它报告发送时钟故障。

    但它在旧内核中也是0x10c。

     奇怪的是、为什么我必须添加 McASP_SET_BITS (dev->base + DaVinci_MCASP_Pdir_REG、AHCLKX);

    DaVinci_McASP_probe  ()中。

    如果我不添加此行,Pdir 的寄存器也会在旧内核中显示 val 8000001,没有声音。

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

    [引用 user="LIANNG WANG102707"]我转储了新内核的寄存器,它几乎是相同的。

    几乎相同! 有什么区别?

    您是通过扬声器还是耳机听音? 您可以比较旧内核和新内核中 McASP 引脚上的信号、如果引脚上没有差异、那么您应该重点关注编解码器 ada1961内核4.4移植、McASP (AM335x 器件)应该可以。

    [引用用户="LIANG WANG102707"]

    xstat 寄存器始终为0x10c、它报告发送时钟故障。

    但它在旧内核中也是0x10c。

    [/报价]

    当 xstat 为0x10c 时、AXR0引脚上是否仍有数据输出? 如果 XINTCTL (0xBC)[2] XCKFAIL 为0x1、您可能会收到生成到 Cortex-A8的中断、这将停止音频传输过程。

    [引用用户="LIANG WANG102707"]

     奇怪的是、为什么我必须添加 McASP_SET_BITS (dev->base + DaVinci_MCASP_Pdir_REG、AHCLKX);

    DaVinci_McASP_probe  ()中。

    如果我不添加此行,Pdir 的寄存器也会在旧内核中显示 val 8000001,没有声音。

    [/报价]

    您使用的是 SND_SOC_DAIFMT_CBM_CFM、它将清除 Pdir[27] AHCLKX、也用作 ACLKX 和 FSX:

    静态 int Davinci_McASP_Set_Dai_fmt ()

    案例 SND_SOC_DAIFMT_CBM_CFM:
          /*编解码器是时钟和帧主控*/
          McASP_CLR_BIits (McASP、DaVinci_MCASP_ACLKXCTL_REG、ACLKXE);
          McASP_CLR_BIits (McASP、DaVinci_MCASP_TXFMCTL_REG、AFSXE);

          McASP_CLR_BIits (McASP、DaVinci_MCASP_ACLKRCTL_REG、ACLKRE);
          McASP_CLR_BIits (McASP、DaVinci_MCASP_RXFMCTL_REG、AFESR);

          McASP_CLR_BIits (McASP、DaVinci_MCASP_Pdir_REG
                   ACLKX | AHCLKX | AFSX | ACLKR | AHCLKR | AFESR);
          McASP->BCLK_MASTER = 0;
          中断;

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Pavel:
    我在我的旧内核和新内核中进行了如下更改:
    案例 SND_SOC_DAIFMT_CBM_CFM:
    /*编解码器是时钟和帧主控*/
    McASP_CLR_BIits (McASP、DaVinci_MCASP_ACLKXCTL_REG、ACLKXE);
    McASP_CLR_BIits (McASP、DaVinci_MCASP_TXFMCTL_REG、AFSXE);

    McASP_CLR_BIits (McASP、DaVinci_MCASP_ACLKRCTL_REG、ACLKRE);
    McASP_CLR_BIits (McASP、DaVinci_MCASP_RXFMCTL_REG、AFESR);
    /*应设置 AHCLK 的注释 wangl */
    McASP_CLR_BIits (McASP、DaVinci_MCASP_Pdir_REG、
    ACLKX /*| AHCLKX */| AFSX | ACLKR | AHCLKR | AFESR);
    McASP->BCLK_MASTER = 0;
    /*添加 wangl20151122 */
    McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、AHCLKX);//添加 wangl 设置为输出
    McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKXCTL_REG、AHCLKXE);//添加 wangl

    但它是如此奇怪、您能告诉我什么是 xstat 始终兼容的发送时钟错误、但播放声音正常吗?

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


    您是否意味着您现在在新内核中拥有声音(aplay play 的声音正常)?

    现在唯一的问题是 XSTAT 寄存器值?

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

    你好,Pavel

    到 目前为止、我在新内核4.4.32中还没有声音。

    但我在旧版内核3.2.0中确实有声音。

    奇怪的是、XSTAT 在旧内核和新内核中始终存在发送时钟错误。

    这一行 MCASP_SET_BIits (dev->base + DaVinci_MCASP_Pdir_REG、AHCLKX);

    对声音播放产生一些影响。

    我在旧内核中添加此行有两个位置。

    一个位于  DaVinci_McASP_probe ()中,另一个位于 DaVinci_McASP_Set_Dai_fmt ()中

    如果我删除 Davinci_McASP_probe ()中的行,旧内核也没有声音。

    我还在达芬奇_McASP_STARTUP () 和 达芬奇_McASP_SET_DAI_Fmt ()的新内核中添加了这一行内容。

    但它没有声音。

    我不会将其添加到 DaVinci_McASP_probe ()中,因为它会使新的内核恐慌。

    太奇怪了。

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

    [引用 USER="LIANG WANG102707"]我很奇怪的是,XSTAT 在旧内核和新内核中总是有发送时钟错误。[/QUERPILET]

     旧内核和新内核中 XINTCTL[2]中的 XCKFAIL 位有什么值?

    [引用 USER="LIANG WANG102707"]这一行 McASP_SET_BITS (dev->base + Davinci_MCASP_Pdir_REG、AHCLKX);[/引用]

    [引用用户="LIANG WANG102707"]

    我还在达芬奇_McASP_STARTUP () 和 达芬奇_McASP_SET_DAI_Fmt ()的新内核中添加了这一行内容。

    但它没有声音。

    我不会将其添加到 DaVinci_McASP_probe ()中,因为它会使新的内核恐慌。

    太奇怪了。

    [/报价]

    请勿添加此行。 在下面的行中设置 McASP_Pdir_REG[27] AHCLKX 位:

    静态 int DaVinci_McASP_SET_SYSCLK ()

    (笑声)

    否则{
          /*选择 AUXCLK 作为 HCLK */
          McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKXCTL_REG、AHCLKXE);
          McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKRCTL_REG、AHCLKRE);
          McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、AHCLKX);

    (笑声)

     

    您需要做的是修改 snd_SOC_DAIFMT_CBM_CFM 案例(正如您已经做的那样)、并设置 snd_SOC_clock_out 而不是 snd_SOC_clock_in。

    有关如何设置 snd_SOC_clock_out 的信息、请参阅以下指针:

    linux-4.4.4.32/sound/soc/cgeneral/simple-card.c

    linux-4.4.3.32/Documentation/devicetree/bindings/sound/simple-card.txt ->系统时钟方向

    更新 DTS 文件、如下所示:

    linux-4.4.4.3.32/arch/arm/boot/dts/AM437X-gp-hdm.dts ->系统时钟方向="out";

    我已经向您提供的 PDF 文件中也介绍了 SND_SOC_CLOCK_IN 和 SND_SOC_CLOCK_OUT、以下链接再次:

     

    此致、
    帕维尔

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

    你好,Pavel:

    我不使用简单的卡接口。我使用 davici-evm.c

    静态 int dr_hw_params (struct snd_pcm_substream *子流、
    struct snd_pcm_hw_params *参数)

    struct snd_soc_PCM_runtime* RTD =子流->专用数据;
    struct snd_soc_dai * codec_dai = rtd->codec_dai;
    struct snd_soc_dai * cpu_dai = rtd->cpu_dai;
    struct snd_soc_card * soc_card = rtd->卡;
    int ret = 0;
    int pll_rate;
    无符号 SYSCLK =(struct snd_soc_card_drvdata_Davinci *)
    SND_SoC_CARD_GET_drvdata (SoC_CARD)->SYSCLK;

    #define AUDIO_FORMAT_DR (SND_SOC_DAIFMT_I2S|\
    SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF)

    Snd_soc_da_set_fmt (codec_dai、audio_format_DR);

    RET = snd_soc_da_set_fmt (cpu_dai、audio_format_DR);

    如果(RET < 0)
    回程;

    switch (params_rate (params)){
    案例48000:
    案例8000:
    情形12000:
    16000例:
    案件24000:
    判例32000:
    PLL_RATE = 48000 * 1024;
    中断;
    判例44100:
    案例7350:
    判例11025:
    案例14700:
    案例22050:
    案件29400:
    PLL_RATE = 44100 * 1024;
    中断;
    默认值:
    return -EINVAL;

    /*设置编解码器系统时钟*/
    RET = snd_soc_da_set_SYSCLK (codec_dai、1、SYSCLK、snd_SOC_clock_out);
    如果(RET < 0)
    回程;

    /*设置 CPU 系统时钟*/
    RET = snd_soc_da_set_SYSCLK (cpu_dai、0、SYSCLK、snd_SOC_clock_out);

    然后、它将调用 DaVinci_McASP_SET_SYSCLK ()。

     在本例中是这样

    否则{
    /*选择 AUXCLK 作为 HCLK */

    McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、AHCLKX);

    因此、它还将设置 AHCLKX 两次。但没有声音。

    我打印  XINTCTL 为1.XUNDRN 已启用。

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

    [报价用户="LIANG WANG102707"]我不使用简单的卡接口[/报价]

    这可能是这里的问题。 在 DTS 文件中、是否有声音节点(例如、在 AM335x-evm.dts 中)

    听起来{
          兼容="简单音频卡";
          simple-audio-card、name ="AM335x-evm";
          simple-audio-card、小工具=
             "耳机"、"耳机插孔"、
             "线路"、"线路输入";
          简单音频卡,路由=
             "耳机插孔"、   "HPLOUT"、
             "耳机插孔"、   "HPROUT"、
             "LINE1L"、      "线路输入"、
             "LINE1R"、      "线路输入";
          simple-audio-card、format ="DSP_b";
          simple-audio-card、bitclock-master =<&sound_master>;
          simple-audio-card、frame-master =<&sound_master>;
          简单音频卡、位时钟反转;

          简单音频卡、CPU{
             Sound-Dai =<&McASP1>;
          };

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

     

    如何在不使用"简易卡"驱动程序的情况下指定 SoC 和编解码器之间的连接?

    [引用 USER="LIANNG WANG102707"]这样它也会设置 AHCLKX 两次。但没有声音。[/QUERPILE]

    根据我的理解、现在您已将 Pdir[27] AHCLKX 设置为1、但仍然没有声音。 请提供完整的启动日志和播放日志。

    另请参阅以下 wiki 页面:

    processors.wiki.ti.com/.../Sitara_Linux_Audio_Porting_Guide

    此致、
    帕维尔

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

    您好 Pavel:

    我在 DTS 中执行此操作  

    听起来{
    兼容="dr、adau1961-tod 音频";
    TI、模型="DR adau1961";
    TI、audio-codec =<&audio_codec>;
    TI、McASP-controller =<&McASP0>;
    TI、CODEC 时钟速率=<24000000>;
    };

    我在我的 Davinci-EVM.c 中添加了这些内容

    静态 int dr_hw_params (struct snd_pcm_substream *子流、
    struct snd_pcm_hw_params *参数)

    struct snd_soc_PCM_runtime* RTD =子流->专用数据;
    struct snd_soc_dai * codec_dai = rtd->codec_dai;
    struct snd_soc_dai * cpu_dai = rtd->cpu_dai;
    struct snd_soc_card * soc_card = rtd->卡;
    int ret = 0;
    int pll_rate;
    无符号 SYSCLK =(struct snd_soc_card_drvdata_Davinci *)
    SND_SoC_CARD_GET_drvdata (SoC_CARD)->SYSCLK;

    #define AUDIO_FORMAT_DR (SND_SOC_DAIFMT_I2S |\
    SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF)

    Snd_soc_da_set_fmt (codec_dai、audio_format_DR);
    RET = snd_soc_da_set_fmt (cpu_dai、audio_format_DR);

    如果(RET < 0)
    回程;

    switch (params_rate (params)){
    案例48000:
    案例8000:
    情形12000:
    16000例:
    案件24000:
    判例32000:
    PLL_RATE = 48000 * 1024;
    中断;
    判例44100:
    案例7350:
    判例11025:
    案例14700:
    案例22050:
    案件29400:
    PLL_RATE = 44100 * 1024;
    中断;
    默认值:
    return -EINVAL;

    /*设置编解码器系统时钟*/
    RET = snd_soc_da_set_SYSCLK (codec_dai、1、SYSCLK、snd_SOC_clock_out);
    如果(RET < 0)
    回程;

    /*设置 CPU 系统时钟*/
    RET = snd_soc_da_set_SYSCLK (cpu_dai、0、SYSCLK、snd_SOC_clock_out);

    RET = SND_SoC_DAI_SET_PLL (CODEC Dai、0、0、SYSCLK、PLL_RATE);

    返回0;

    静态结构 snd_soc_ops dr_ops ={
    .startup = EVM_startup、
    关断= EVM_SHUTDOWN、
    hw_params = dr_hw_params、
    };

    //添加 wangl  
    静态结构 snd_soc_da_link dr_da_adau1961 ={
    .name ="ADAU1X61X1"、
    .stream_name ="ADAU"、
    codec_di_name ="adau-hifi"、
    .ops =&DR_ops、
    .init = dr_adau_init、
    .dai_fmt = snd_SOC_DAIFMT_I2S |\
    SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF、
    };
    //添加 wangl 结束

    static const struct of _device_id davinci_evm_dt_ids[]={

    .compatible ="ti、DA830-EVM-audio"、
    .data =(void *)&EVM_DAI_tlv320aic3x、
    }、

    .compatible ="dr、adau1961-tod 音频"、
    .data =(void *)&dr_da_adau1961、
    }、
    {/* Sentinel */}
    };

    连接没有问题。是否使用简单卡接口并不重要。只需进行绑定。

    问题是我看到时钟和数据脉冲、没有声音。

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


    如何验证是否有声音? 您是否使用扬声器或麦克风?

    请为旧内核和新内核提供完整的启动日志、"aplay -l "和"aplay file"控制台输出。

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

    您好、Pavel:

    这适用于新内核


    根目录@AM335x-EVM:~# dmesg
    [0.000000]在物理 CPU 0x0上引导 Linux
    [0.000000]正在初始化 cgroup 子系统 CPU
    [0.000000]正在初始化 cgroup Subsys cpuacct
    [0.000000] Linux 版本4.4.3.32-gadde2ca9f8 (wangl@Ubuntu)(gcc 版本5.3.1 20160113 (Linaro GCC 5.3-2016.02)) 66挤占 Mon Jun 19 17:22:37 CST 2017
    [0.000000] CPU:ARMv7处理器[413fc082]修订版2 (ARMv7)、CR=10c5387d
    [0.000000] CPU:PIPT/VIPT 非混叠数据高速缓存、VIPT 别名指令高速缓存
    [0.000000]机器模型:TI AM335x DR_AM335x
    [0.000000] CMA:在0x9d000000处保留48 MIB
    [0.000000]内存策略:数据高速缓存写回
    [0.000000]在节点0上的总页:131072
    [0.000000] free_area_init_node:节点0、pgdat c0a0a068、node_mem_map dcb61000
    [0.000000]正常区域:用于 memmap 的1152页
    [0.000000]正常区域:保留0页
    [0.000000]正常区域:131072页,LIFO 批处理:31
    [0.000000] CPU:所有 CPU 均在 SVC 模式下启动。
    [0.000000] AM335X ES2.1 (NEON)
    [0.000000] pcpu-alloc:s0 r0 d32768 u32768 alloc=1*32768
    [0.000000] pcpu-alloc:[0] 0
    [0.000000]在区域顺序和移动分组中构建了1个区域列表。 总页数:129920
    [0.000000]内核命令行:console=ttyO0、115200 root=/dev/nfs ip=192.168.1.171::::: eth0:off nfsroot=192.168.1.77:/tftpboot/am335x_rootfs_v03050002、v3、TCP
    [0.000000] PID 哈希表条目:2048 (顺序:1、8192字节)
    [0.000000]条目高速缓存散列表条目:65536 (顺序:6、262144字节)
    [0.000000] inode 高速缓存散列表条目:32768 (顺序:5、131072字节)
    [0.000000]内存:459232K/524288K 可用(7023K 内核代码、387K rwdata、2620K rodata、280k init、267K BSS、 15904K 保留、49152K CMA 保留、0K HIGHMEM)
    [0.000000]虚拟内核内存布局:
    向量:0xff0000-0xff1000 (4KB)
    Fixmap:0xc00000 - 0xc00000 (3072 KB)
    vmalloc:0xe0800000 - 0x0x800000 (496MB)
    低内存:0xC0000000 - 0xe0000000 (512 MB)
    pkmap:bfe00000 - 0xC0000000 (2 MB)
    模块:bbf000000 - bbfe00000 (14 MB)
    .text:0xc0008000 - 0xc0973014 (9645 KB)
    init:0xc0974000 - 0xc09ba000 (280KB)
    .data:0xc09ba000 - 0xc0a1ae18 (388KB)
    .bss:0xc0a1ae18 - 0xc0a5dc18 (268 KB)
    [0.000000] slub:HWalign=64、order=0-3、MinObjects=0、CPU=1、Nodes=1
    [0.000000]可抢占的分层 RCU 实现。
    [0.000000]叶扇出的生成时间调整为32。
    [0.000000] NR_IRQ:16 nr_IRQ:16 16.
    [0.000000] IRQ:在0xfa200000 (修订版5.0)处找到具有128个中断的 INTC
    [0.000000] OMAP 时钟事件源:timer2为24000000 Hz
    [0.000013] sched_clock:24MHz 时为32位、分辨率为41ns、每89478484971ns 换行一次
    [0.000032]时钟源:Timer1:屏蔽:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:79635851949 ns
    [0.000041] OMAP 时钟源:Timer1为24000000 Hz
    [0.000165] clocksource_probe:找不到匹配的时钟源
    [0.000321]控制台:彩色虚拟设备80x30
    [0.000342]警告:您的'console=ttyO0'已被'ttyS0'替代
    [0.000347]这可确保您仍能看到内核消息。 请
    [0.000351]更新内核命令行。
    [0.000367]校准延迟环路... 996.14茂物剪(lpj=4980736)
    [0.089311] pid_max:默认值:32768最小值:301
    [0.089422]安装高速缓存散列表条目:1024 (顺序:0、4096字节)
    [0.089432] mountpoint-cache 哈希表条目:1024 (顺序:0、4096字节)
    [0.090033]正在初始化 cgroup Subsys IO
    [0.090059]正在初始化 cgroup Subsys 内存
    [0.090092]正在初始化 cgroup Subsys 设备
    [0.090105]初始化 cgroup Subsys 冷冻柜
    [0.090117]正在初始化 cgroup 子系统 perf_event
    [0.090126]正在初始化 cgroup 子系统 PID
    [0.090152] CPU:测试写入缓冲区一致性:好的
    [0.090517]为0x80008200 - 0x80008258设置静态标识映射
    [0.044538] devtmpfs:已初始化
    [0.103452] VFP 支持 v0.3:实施者41架构3第30部分版本 c 修订版3
    [0.115282] OMAP_hwmod:debugss:_wait_target_disable 失败
    [0.170126]时钟源:Jiffies:MASK:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:19112604462750000 ns
    [0.173646] pinctrl 内核:已初始化 pinctrl 子系统
    [0.174840] NET:注册协议系列16.
    [0.176680] DMA:为原子相干分配预分配256 K2B 池
    [0.199302]空闲:使用调速梯
    [0.229291]空闲:使用调速器菜单
    [0.232824] gpiochip_add:器件上的寄存 GPIO 0至31:GPIO
    [0.233108] OMAP GPIO 硬件版本0.1
    [0.233791] gpiochip_add:在器件上注册了 GPIO 32至63:GPIO
    [0.234461] gpiochip_add:在器件:GPIO 上注册了64至95的 GPIO
    [0.235109] gpiochip_add:在器件上注册了 GPIO 96至127:GPIO
    [0.239264] OMAP-GPMC 50000000。GPMC:找不到节点/ocp/l4_wkup@44c00000/CSCM@210000/引脚多路复用@800/GPMC_Pins 的 pctldev、延迟探针
    [0.241340]硬件断点:不支持调试架构0x4。
    [0.276269] EDMA 49000000.EDMA:TI EDMA DMA 引擎驱动程序
    [0.276592] of_get_named_gpiod_flags:无法解析节点'/fixedregulator@0[0]的'GPIO'属性
    [0.279043] SCSI 子系统已初始化
    [0.279456] usbcore:注册的新接口驱动程序 usbfs
    [0.279525] usbcore:注册的新接口驱动程序集线器
    [0.279612] usbcore:注册的新设备驱动程序 USB
    [0.279990] omap_i2c 44e0b000。i2c:找不到节点/ocp/l4_wkup@44c00000/CSCM@210000/ pinmux@800/pinmux_i2c0_pins 的 pctldev、延迟探针
    [0.280100]介质:Linux 介质接口:v0.10
    [0.280150] Linux 视频捕捉接口:v2.00
    [0.280191] pps_core:LinuxPPS API 版本。 1已注册
    [0.280197] pps_core:软件版本 5.3.6 -版权所有2005-2007 Rodolfo Giometti
    [0.280221] PTP 时钟支持已注册
    [0.280267] EDAC MC:版本:3.0.0
    [0.281250] OMAP-mailbox 480c8000.mailbox:OMAP mailbox 修订版0x400
    [0.281540]已初始化高级 Linux 声音架构驱动程序。
    [0.282548]时钟源:切换到时钟源 Timer1
    [0.291784] NET:注册协议系列2.
    [0.292488] TCP 建立哈希表条目:4096 (顺序:2、16384字节)
    [0.292534] TCP 绑定哈希表条目:4096 (顺序:2、16384字节)
    [0.292628] TCP:已配置哈希表(建立4096 BIND 4096)
    [0.292695] UDP 哈希表条目:256 (顺序:0、4096字节)
    [0.292711] UP-Lite 哈希表条目:256 (顺序:0、4096字节)
    [0.292847] NET:注册协议系列1.
    [0.293214] RPC:注册后命名的 UNIX 套接字传输模块。
    [0.293225] RPC:注册的 UDP 传输模块。
    [0.293231] RPC:注册的 TCP 传输模块。
    [0.293236] RPC:注册的 TCP NFSv4 4.1反向通道传输模块。
    [0.293259] PCI:CLS 0字节、默认64
    [0.294073]硬件性能事件:通过 armv7_cortex_A8 PMU 驱动器启用、提供5个计数器
    [0.295731] futex 散列表条目:256 (顺序:-1、3072字节)
    [0.302493] squashfs:版本4.0 (2009/01/31) Phillip Lougher
    [0.303495] NFS:注册 id_resolver 密钥类型
    [0.303565]注册了密钥类型 id_resolver
    [0.303573]注册了密钥类型 id_legacy
    [0.303642] NTFS:驱动程序2.1.32 [Flags:R/O]。
    [0.306872]块层 SCSI 通用(BSG)驱动程序0.4版已加载(主要247)
    [0.306900]已注册 IO 调度程序 NOP
    [0.306913]已登记 IO 调度程序的截止日期
    [0.307066]已注册 IO 调度程序 cfq (默认值)
    [0.308211] pinctrl-single 44e10800.pinmux:142引脚、PA f9e10800大小568
    [0.361204]串行:8250/16550驱动程序,10个端口,禁用 IRQ 共享
    [0.364881] 44e09000.serial: tmio 0x44e09000处的 ttyS0 (IRQ = 158、base_baud = 3000000)是8250
    [0.994753]控制台[ttyS0]已启用
    [0.999392] 48022000.serial: tmio 0x48022000处的 ttyS1 (IRQ = 159、base_baud = 3000000)是8250
    [1.008671] pinctrl-single 44e10800.pinmux:44e10800.pinmux 已请求引脚44e10944.0;无法申请481aa000.serial
    [1.020439] pinctrl-single 44e10800.pinmux:pin-81 (481aa000.serial) status -22
    [1.027814] pinctrl-single 44e10800.pinmux:无法从器件 pinctrl-single 上的组 pinmux_uart5_pins 请求引脚81 (44e10944.0)
    [1.040141] omap8250 481aa000.serial:应用设置时出错,反向
    [1.048314] 481aa000.serial:在 MMIO 0x481aa000 (IRQ = 160、base_baud = 3000000)处的 ttyS5是8250
    [1.058040][DRM]已初始化 DRM 1.1.0 20060810
    [1.069120]循环:模块已加载
    [1.074550] libphy:固定 MDIO 总线:探测
    [1.142619] DaVinci_MDIO 4a101000.MDIO:达芬奇 MDIO 修订版本1.6
    [1.148754] DaVinci_MDIO 4a101000.MDIO:检测到的 phy 掩码 fffff9
    [1.156374] libphy: 4a101000.mdio:探测
    [1.160419] DaVinci_MDIO 4a101000.MDIO:PHY[1]:器件4a101000.MDIO:01、驱动程序 SMSC LAN8710/LAN8720
    [1.169683] DaVinci_MDIO 4a101000.MDIO:PHY[2]:器件4a101000.MDIO:02、驱动程序 SMSC LAN8710/LAN8720
    [1.179522] cpsw 4a100000.ethernet:DT 中缺少 dual_emac_res_vlan。
    [1.186155] cpsw 4a100000.ethernet:使用1作为0从设备的保留 VLAN
    [1.192970] cpsw 4a100000.ethernet:DT 中缺少 dual_emac_res_vlan。
    [1.199440] cpsw 4a100000.ethernet:使用2作为1个从设备的保留 VLAN
    [1.206204] cpsw 4a100000.以太网:检测到的 MACID = EC:24:B8:9a:AC:79
    [1.212886] cpsw 4a100000.以太网:CPT:溢出检查周期850
    [1.219921] cpsw 4a100000.以太网:cpsw:检测到的 MACID = EC:24:B8:9a:AC:7b
    [1.227743] usbcore:注册的新接口驱动程序 smsc95xx
    [1.233499] mousedev:PS/2鼠标设备,适用于所有鼠标
    [1.240487] i2c /dev/entries 驱动程序
    [1.244946] cputidle: enable-method 属性'ti、am3352'找到操作
    [1.252241] OMAP-Hsmmc 48060000.MMC:消费类 CD 的 GPIO 查找
    [1.252257] OMAP_hsmmc 48060000.MMC:使用器件树进行 GPIO 查找
    [1.252271] of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'CD-GPIO'属性
    [1.252281] of_get_named_gpiod_flags:无法解析节点'/ocp/mmc@48060000[0]的'CD-GPIO'属性
    [1.252290] omap_hmc 48060000.mmc:使用查找表进行 GPIO 查找
    [1.252300] OMAP_hmc 48060000.mmc:查找 GPIO CD 失败
    [1.252311] OMAP-Hsmmc 48060000.MMC:GPIO 查找消费类 WP
    [1.252319] OMAP_hsmmc 48060000.MMC:使用器件树进行 GPIO 查找
    [1.252328] of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'WP-GPIO'属性
    [1.252337] of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'WP-GPIO'属性
    [1.252344] omap_hmc 48060000.mmc:使用查找表进行 GPIO 查找
    [1.252352] OMAP_hsmmc 48060000.MMC:查找 GPIO WP 失败
    [1.293205] ledtrig-CPU:注册以指示 CPU 上的活动
    [1.305388] SYSCLK EVM 24000000
    [1.308666] DaVinci_EVM 声音:ASOC:编解码器 DAI adau-hifi 未注册
    [1.315442] DaVinci_EVM 声音:Snd_soc_register_card 失败(-517)
    [1.323894] NET:注册协议系列10.
    [1.331656] SIT:IPv6 over IPv4隧道驱动程序
    [1.337090] NET:注册协议系列17.
    [1.341844]注册的密钥类型 DNS_旋 变传感器
    [1.346450] OMAP_VOLTGE_LARD_INIT:未添加电压驱动器支持
    [1.353974] cpufreq:cpufreq_online:cpu0:以未列出的 freq 运行:1000000 KHz
    [1.361451] CPU CPU0:DEV_PM_OPP_DOMAIN_SET_RATE:未能找到 FREQ 1000000000 (-34)的当前 OPP
    [1.371003] cpufreq:cpufreq_online:CPU0:未列出的初始频率更改为800000 KHz
    [1.382696] OMAP-GPMC 50000000。GPMC:GPMC 版本6.0
    [1.387881] GPMC_mem_init:禁用映射在0x0-0x1000000的 CS 0
    [1.394107] gpiochip_find_base:发现新的基极为510
    [1.394294] gpiochip_add:在器件:OMAP-GPMC 上注册了 GPIO 510至511
    [1.395633] at24 0-0050:32768字节24c256 EEPROM、可写、64字节/写入
    [1.403282] Adau1761现在注册编解码器
    [1.407212] OMAP_i2c 44e0b000。i2c:400kHz 时的总线0版本0.11
    [1.413488] SYSCLK EVM 24000000
    [1.433539] adau1961格式集
    [1.436840]模式为 CBM_CFM
    [1.439644]设置下降
    [1.443076] DaVinci_EVM 声音:adau-hifi <-> 48038000。McASP 映射正常
    [1.451317]** SND_SoC_Register 卡正常
    [1.456004] hctosys:无法打开 RTC 设备(rtc0)
    [1.478695] net eth0:正在初始化 cpsw 版本1.12 (0)
    [1.484143] net eth0:初始化 cpsw ale 版本1.4
    [1.489307]净 eth0:ALE 表大小1024
    [1.496745] net eth0: Phy found : id is : 0x7c0f1.
    [1.507732] IPv6:ADDRCONF (NETDEV_UP):eth0:链路未就绪
    [1.796553] mmc0:未设置 MAN_BKOPS_EN 位
    [1.804682] mmc0:地址0001处的新型高速 MMC 卡
    [1.810940] mmcblk0:mmc0:0001 MMC08G 7.27 GiB
    [1.815908] mmcblk0boot0:mmc0:0001 MMC08G 分区1 16.0 mib
    [1.822137] mmcblk0boot1:mmc0:0001 MMC08G 分区2 16.0 mib
    [1.830406] mmcblk0:P1 P2
    [4.513363] cpsw 4a100000.以太网 eth0:链路向上- 100Mbps/全-流控制 Rx/TX
    [4.521569] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪
    [4.542625] IP-Config:猜测子网掩码255.255.255.0
    [4.548131] IP-配置:完整:
    [4.551411] device=eth0、hwaddr=EC:24:B8:9a:AC:79、ipaddr=192.168.1.171、mask=255.255.255.0、gw=255.255.255.255
    [4.562375] host=192.168.1.171、domain=、nis 域=(无)
    [4.568457] bootserver=255.255.255.255,rootserver=192.168.1.77,rootpath=
    [4.576336] ALSA 器件列表:
    [4.579337]#0:Adau1961博士
    [4.642201] VFS:在器件0:14上安装的根(NFS 文件系统)只读。
    [4.693751] devtmpfs:已安装
    [4.697708]释放未使用的内核内存:280k (c0974000 - c09ba000)
    [4.704172]此架构没有内核内存保护。
    [5.56969467] systemd[1]:生成时间之前的系统时间、提前时钟。
    [5.704081] random:systemd:未初始化 urandom 读取(16字节读取、101位熵可用)
    [5.736654] random:systemd:未初始化 urandom 读取(16字节读取、102位熵可用)
    [5.760208] systemd[1]:systemd 229在系统模式下运行。 (+PAM -audit -selinux +IMA -AppArmor +smack +sysvinit +utmp -LIBCRYPTSETUP -GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +blkid -ELFUTILS +KMOD -IDN)
    [5.779499] systemd[1]:检测到架构 ARM。
    [5.816655] systemd[1]:将主机名设置为 。
    [6.113261] random:systemd-sysv-ge:未初始化 urandom 读取(16字节读取、125位熵可用)
    [6.189435]随机:systemd-sysv-ge:未初始化 urandom 读取(16字节读取、127位熵可用)
    [6.250179] random:非阻塞池已初始化
    [6.951652] systemd[1]:[/lib/systemd/system/gadget-init.service:15]"服务"部分中的未知 lvalue "ExecStopPre"
    [7.770439] systemd[1]:sysinit.target:在 sysinit.target/start 上找到订购周期
    [7.778508] systemd[1]:sysinit.target:找到对 alignment.service/start 的依赖
    [7.786303] systemd[1]:sysinit.target:找到对 basic.target/start 的依赖
    [7.793607] systemd[1]:sysinit.target:找到对 sysinit.target/start 的依赖
    [7.801058] systemd[1]:sysinit.target:删除作业 alignment.service/start,从而中断订购周期
    [7.810650] systemd[1]:已删除 alignment.service:作业 alignment.service/start 以从 sysinit.target/start 开始中断订购周期
    [7.853206] systemd[1]:已创建切片系统切片。
    [7.887039] systemd[1]:收听 Journal Socket (/dev/log)。
    [7.915639] systemd[1]:侦听 udev 控制套接字。
    [7.945529] systemd[1]:侦听名为 Pipe 的/dev/initctl 兼容性。
    [7.973048] systemd[1]:已达到目标交换。
    [7.993515] systemd[1]:已开始将密码请求转发到 Wall Directory Watch。
    [8.025357] systemd[1]:侦听网络服务 Netlink 套接字。
    [8.054833] systemd[1]:侦听 Syslog 套接字。
    [8.083546] systemd[1]:已开始向控制台目录监视发送密码请求。
    [8.113009] systemd[1]:已达到目标路径。
    [8.134583] systemd[1]:创建的层用户和会话层。
    [8.163039] systemd[1]:已达到目标层。
    [8.269559] systemd[1]:创建的层系统序列\x2dgetty.slice。
    [8.303750] systemd[1]:已达到目标远程文件系统。
    [8.336311] systemd[1]:创建了 slice system-Getty.slice。
    [8.366360] systemd[1]:在 Journal Socket 上收听。
    [8.441046] systemd[1]:正在启动加载内核模块...
    [8.550304] systemd[1]:正在安装临时目录...
    [8.618951] systemd[1]:正在启动根设备上的文件系统检查...
    [8.709248] systemd[1]:正在启动安装虚拟控制台...
    [8.825867] systemd[1]:安装 POSIX 消息队列文件系统...
    [8.878734] systemd[1]:正在安装调试文件系统...
    [8.938477] systemd[1]:正在开始在/dev/中 创建静态设备节点...
    [8.999427] systemd[1]:正在启动日志服务...
    [9.111989] systemd[1]:侦听 udev 内核套接字。
    [9.161256] systemd[1]:已安装调试文件系统。
    [9.198299] systemd[1]:已挂载 POSIX 消息队列文件系统。
    [9.254217] systemd[1]:挂载的临时目录。
    [9.284326] systemd[1]:退出 systemd-modules-load.service:主进程,代码=退出,状态= 1/失败
    [9.298016] systemd[1]:无法启动加载内核模块。
    [9.352969] systemd[1]:systemd-modules-load.service:设备进入失败状态。
    [9.363600] systemd[1]:systemd-modules-load.service:失败,结果为'exit-code'。
    [9.404907] systemd[1]:已启动根设备上的文件系统检查。
    [9.455666] systemd[1]:已启动设置虚拟控制台。
    [9.584049] systemd[1]:已开始在/dev/中 创建静态设备节点。
    [9.625888] systemd[1]:已启动日志服务。
    [12.123783] systemd-journale[100]:已收到从 PID 1刷新运行时日志的请求
    [18.585800] EXT4-FS (mmcblk0p2):恢复完成
    [18.621118] EXT4-FS (mmcblk0p2):已安装文件系统、具有有序数据模式。 OPTS:(空)
    [18.653072] FAT-FS (mmcblk0p1):卷未正确卸载。 某些数据可能已损坏。 请运行 fsck。

    根目录@AM335x-EVM:~ a# aplay -l
    ****播放硬件设备列表****
    卡0:Adau1961 [DR adau1961]、设备0:ADAU adau-hifi-0[]
    子设备:1/1
    子设备#0:子设备#0

    根目录@AM335x-EVM:~# aplay Alarm02.wav
    播放波'Alarm02.wav':有符号16位小端序,速率22050 Hz,立体声

    使用旧内核时:

    root@DR02:/home/dmi aplay A0.wav
    播放波'A0.wav':有符号16位小端字节序、速率48000Hz、单声道

    root@DR02:/home/dmi aplay -l
    ****播放硬件设备列表****
    卡0:DR02 [AM335X DR02]、器件0:ADA1X adau-hifi-0[]
    子设备:1/1
    子设备#0:子设备#0

    编解码器寄存器可在/sys/kernel/debug/regmap/1-003a 中读取  

    它在旧内核和新内核中是相同的。 编解码器设置正常。

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

    [引用用户="LIANG WANG102707"]

    这适用于新内核


    根目录@AM335x-EVM:~# dmesg

    [/报价]

    您能否为旧内核提供日志?

    [~用户="LIANG WANG102707]root 用户@AM335x-EVM:# aplay Alarm02.wav
    播放波'Alarm02.wav':有符号16位小端字节序、速率22050 Hz、立体声

    [引用用户="LIANG WANG102707"]

    使用旧内核时:

    root@DR02:/home/dmi aplay A0.wav
    播放波'A0.wav':有符号16位小端字节序、速率48000Hz、单声道

    [/报价]

    我看到您在旧内核中使用48000Hz (立体声模式)的采样率、在新内核中使用22050Hz (单声道模式)的采样率。 您能否尝试一下48000Hz 的采样率和新内核的立体声模式、是否有任何差异?


    此致、
    帕维尔

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

    >>我看到您在旧内核中使用48000Hz (立体声模式)的采样率,在新内核中使用22050Hz (单声道模式)的采样率。

    >>您能否尝试使用48000Hz 的采样率和新内核的立体声模式,是否有任何区别?

    没有区别、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何验证是否有声音? 您是否使用扬声器或麦克风?

    请为我提供完整的启动日志、"aplay -l "和"aplay file"控制台输出、对于旧内核和新内核、请使用48000Hz 采样率和立体声模式。

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

    您好、Pavel:

    我使用扬声器,您想要获得什么信息 ,为什么需要旧的 aplay -l 输出?

    我还可以在编解码器的示波器上看到输出,没有波。

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

    [报价用户="LIANNG WANG102707"]您需要获取什么信息[/QUERPILE]

    请为我提供完整的启动日志、"aplay -l "和"aplay file"控制台输出、对于旧内核和新内核、请使用48000Hz 采样率和立体声模式。

    [引用 user="LIANG WANG102707"]为什么需要旧的 aplay -l 输出?

    以与新的 aplay 进行比较

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel:
    我认为这不是问题,aplay -l 只能看到设备信息。
    这是内核问题。
    奇怪的是系统引导后的/proc/interrupt 输出。
    root@AM335x-EVM:~# cat /proc/interrupts
    CPU0
    16: 19210 INTC 68电平 GP_TIMER
    20: 514. INTC 12级 49000000.EDMA_ccint
    22: 1 INTC 14级 490000.EDMA_cerrint
    26: 0 INTC 96电平 44e07000.GPIO
    59: 0 INTC 98级 4804c000.GPIO
    92: 0 INTC 32级 481ac0.gpio
    125: 0 INTC 62级 481ae000.gpio
    158: 349) INTC 72级 44e09000.serial
    161: 344. INTC 70电平 44e0b000。i2c
    162: 803. INTC 64级 mmc0
    173: 101212. INTC 41电平 4a100000以太网
    174: 52394 INTC 42级 4a100000以太网
    176: 0 INTC 100级 GPMC
    179: 0 INTC 80电平 48038000.McASP_TX
    180: 0 INTC 81级 48038000.McASP_Rx

    当我运行播放音频时
    root@AM335x-EVM:~# cat /proc/interrupts
    CPU0
    16: 21075 INTC 68电平 GP_TIMER
    20: 763 INTC 12级 49000000.EDMA_ccint
    22: 1 INTC 14级 490000.EDMA_cerrint
    26: 0 INTC 96电平 44e07000.GPIO
    59: 0 INTC 98级 4804c000.GPIO
    92: 0 INTC 32级 481ac0.gpio
    125: 0 INTC 62级 481ae000.gpio
    158: 349) INTC 72级 44e09000.serial
    161: 432 INTC 70电平 44e0b000。i2c
    162: 803. INTC 64级 mmc0
    173: 108822 INTC 41电平 4a100000以太网
    174: 56734 INTC 42级 4a100000以太网
    176: 0 INTC 100级 GPMC
    179: 0 INTC 80电平 48038000.McASP_TX
    180: 0 INTC 81级 48038000.McASP_Rx

    EDMA _ccint 会增加。我很奇怪为什么会有 EDMA_cerrint。

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

    Wangl、

    [引用 user="LIANNG WANG102707">我认为这不是问题,aplay -l 只能看到设备信息。
    这是内核问题。

    这就是我需要启动日志的方式。 "aplay -l "也可以报告一些与内核相关的问题。

    [引用 user="LIANNG WANG102707"]我很奇怪为什么会有 EDMA_cerrint。

    我会检查这个、然后回来。

    此致、
    帕维尔

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

    [引用 USER="LIANG WANG102707]22:1 INTC 14 Level 49000000.EDMA_cerrint

    [引用 USER="LIANG WANG102707]22:1 INTC 14 Level 49000000.EDMA_cerrint

    EDMA_cerrint 看起来不是由 aplay 命令执行引起的、因为它仍然为1。 您也可以检查旧3.2内核中的 EDMA_cerrint 值。

    此致、
    帕维尔

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

    您好、Pavel:

    我认为问题可能来自编解码器方面。当我使用内核4.4.32.我将 cache_type 更改为 none,则 regmap 的寄存器异常。

    const struct regmap_config adau1761_regmap_config ={
    val 位= 8、
    .REG_BITS = 16、
    .max_register = 0x40fa、
    .cache_type = REGCACHE_NONE、//REGCACHE_RBTREE
    };

    当 cache_type 为 none 时,   /sys/kernel/debug/regmap/register 无法正确读取 amixer 工具设置的值

    当 cache_type 为 REGCACHE_RBTREE 时、 amixer 工具设置的值可以由  /sys/kernel/debug/regmap/register 正确读取  

    我更改 i2cget 和 i2cset 的代码以获取 adau1961的寄存器、然后只能设置和正确获取 adau1961的第一个寄存器。其他寄存器为0。

    但是当我更改为内核3.2.0时,i2cget 和 i2cset 可以设置并 正确获取所有寄存器。

    这是奇怪的。下面是 DTS 的配置,我还将 PIN_INPUT_PULLUP 更改为 PIN_INPUT_PULLUP。没有区别。

    i2c0_pins:pinmux_i2c0_pins{
    pinctrl-single、pins =<
    0x188 (PIN_INPUT_PULLUX | MUX_MODE0)/* i2c0_sda.i2c0_sda *
    0x18c (PIN_INPUT_PULLDOWN | MUX_MODE0)/* i2c0_SCL.i2c0_SCL *
    >;
    };

    此致

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

    [引用 USER="LIANNG WANG102707"]我认为问题可能来自编解码器侧[/引用]

    我只能从 AM335x 器件侧提出建议。 关于与 adau1961编解码器相关的问题、您应咨询编解码器供应商支持团队。

    要隔离此问题、应在 AM335x 引脚(McASP 和 I2C)上连接一个示波器、并验证所有信号是否可用、是否符合预期。 另请参阅以下使用虚拟编解码器的 wiki:

    processors.wiki.ti.com/.../Sitara_Linux_Audio_DAC_Example

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel:
    问题在于、为什么在旧内核中可以正确读取和设置编解码器寄存器?但在新内核中失败。
    问题来自 AM335x 方面。编解码器正常,同一电路板。
    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Wangl、

    我建议您再次检查有关新内核中描述的正确音频编解码器的 DTS 文件。 同时比较旧内核和新内核之间的 I2C 模块寄存器设置、以查看是否有任何差异。

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

    您好、Pavel:

    我现在找到了根本原因。

    它确实与新内核行为 AM335x 有关。

    mcascp0_ahclk 为 我的编解码器提供24MHz 时钟 MCLK。

     在初始化声卡 McASP 后、ahckl 始终输出24MHz 时钟、

    但是当我使用新的内核 ahclk 时,只有当我运行 aplay xxx.wav...运行 aplay 时,才会输出24MHz 时钟。然后在其他控制台中运行混频器设置。我可以听到这首歌曲。

    此时我可以正确设置和获取 i2c 寄存器。播放完成后、我无法获取和设置寄存器。

    问题是 如何始终启用输出 clk,而不 是由 aplay 决定。

    因此,我在  Davinci_McASP_probe ()的末尾添加了以下行:  

    McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、AHCLKX);
    McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKXCTL_REG、AHCLKXE);

    然后内核 崩溃

    [1.305008]未处理的故障:在0xfa038014上的非线性获取(0x1028)上的外部中止
    [1.312711] PgD = c0004000
    [1.315426][Fa038014]* PgD=48011452 (BAD)
    [1.319468]内部错误:1028 [#1]抢占 ARM

    [1.595939]回溯:
    [1.598412][ ](Davinci_McASP_probe)、来自[ ](platform_drv_probe +0x54/b8)
    [1.607144] R10:00000000 R9:00000000 R8:c0a05194 r7:fffdfb R6:c0a05194 R5:dc10e610
    [1.615030] R4:c0a54dc8

    你可以给我建议吗? 为什么?

    最恰当的考虑

     

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

    Wangl、

    我认为旧内核也具有相同的功能(2.6.37、3.2)、调用 aplay 时会配置 McASP。

    确保您未使用 SND_SOC_DAIFMT_CBM_CFM 情况、因为这将清除位 Pdir[27] AHCLKX:

    DaVinci_McBSP_set_Dai_fmt ()

    .

    案例 SND_SOC_DAIFMT_CBM_CFM:

    /*编解码器是时钟和帧主控*/

    McASP_CLR_BIits (McASP、DaVinci_MCASP_Pdir_REG、

       ACLKX | AHCLKX | AFSX | ACLKR | AHCLKR | AFESR);

     

    确保您未使用 MCASP_CLK_HCLK_AHCLK 情况、因为这也会清除 AHCLKXCTL[15] HCLKXM 位:

    DaVinci_McASP_SET_SYSCLK ()

    案例 MCASP_CLK_HCLK_AHCLK:

    McASP_CLR_BIits (McASP、DaVinci_MCASP_AHCLKXCTL_REG、

       AHCLKXE);

    McASP_CLR_BIits (McASP、DaVinci_MCASP_AHCLKRCTL_REG、

       AHCLKRE);

    McASP_CLR_BIits (McASP、DaVinci_MCASP_Pdir_REG、AHCLKX);

    中断;

     

    [引用用户="LIANG WANG102707"]

    问题是 如何始终启用输出 clk,而不 是由 aplay 决定。

    因此,我在  Davinci_McASP_probe ()的末尾添加了以下行:  

    McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、AHCLKX);
    McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKXCTL_REG、AHCLKXE);

    然后内核 崩溃

    [1.305008]未处理的故障:在0xfa038014上的非线性获取(0x1028)上的外部中止

    [/报价]

    查看以下方法是否有帮助。 您可以使用__raW_writel()在寄存器中写入值。

     

    此致、
    帕维尔

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

    您好、Pavel:

    我已经解决了。

    我只需添加行 pm_runtime_get_sync (McASP->dev); 在 McASP_set_bit 之前, 内核恐慌就消失了。

      pm_runtime_get_sync() 函数的用途是什么 ? 为什么它可以修复内核恐慌?

    此致

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

    此函数似乎初始化 McASP 结构(结构 DaVinci_McASP * McASP)并将其从暂停状态中拉出(如果它处于暂停状态)。

    Linux-kernel/Documentation/power/runtime_pm.txt

    int pm_runtime_get_sync (struct device *dev);
    -递增器件的使用计数器、运行 pm_runtime_resume (dev)并返回其结果

    为此,它在 driver_sysfs_remove()和 bus_notify_unbind_driver 通知之前调用 pm_runtime_get_sync()。 如果器件处于暂停状态、则会恢复器件、并防止器件在执行这些例程时再次被暂停。