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/AM5718:音频编解码器时钟设置

Guru**** 2618835 points

Other Parts Discussed in Thread: AM5718, TLV320AIC3104, BEAGLEBOARD-X15

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/658510/linux-am5718-audio-codec-clock-settings

器件型号:AM5718
主题中讨论的其他器件: TLV320AIC3104BeagleBoard-X15

工具/软件:Linux

您好!

我们有一个基于 am5718的定制板。 该电路板设计基于 am571x-idk、并添加了一些来自 am572x-EVM 的内容、例如音频编解码器。 现在、我无法使声卡正常工作。 我怀疑声卡的时钟设置不正确、因为根据设置、电路板无法正常启动。 正确的时钟设置应该是什么? 或者是否有任何其他明显的错误?

与 am572x-EVM 设计不同的是、我们使用 I2C_Bus3而不是总线1、并且我们使用具有以下连接的 McASP1:

TLV320AIC3104 <-> AM5718
MCLK         <->McASP1_AHCLKX (XREF_CLK0)             
WCLK         <->McASP1_FSX    
BCLK         <->McASP1_ACLKX
DIN             <->McASP1_AXR6    
DOUT         <->McASP1_AXR7


有关声卡的设备树设置如下:
    

??Sound0:Sound0{
      兼容="简单音频卡";
      simple-audio-card、name ="BeagleBoard-X15";
      simple-audio-card、小工具=
         "耳机"、"耳机插孔"、       
         "线路"、"线路输出"、
         "线路"、"线路输入";
      简单音频卡,路由=
         "耳机插孔"、"HPLOUT"、
         "耳机插孔"、"HPROUT"、
         "线路输出"、   "LLOUT"、
         "线路输出"、   "RLOUT"、
         "MIC2L"、   "线路输入"、
         "MIC2R"、   "线路输入";
      simple-audio-card、format ="DSP_b";
      simple-audio-card、bitclock-master =<&sound0_master>;
      simple-audio-card、frame-master =<&sound0_master>;
      简单音频卡、位时钟反转;

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

      sound0_master:simple-audio-card、codec{
         sound-dai =<&tlv320aic3104>;
         时钟=<&clkout2_clk>;
      };
   };

McASP1{
   #sound-di-cells =<0>;
   分配的时钟=<&McASP1_ahclkx_mux>;
   分配的时钟父级=<&sys_clkin2>;
   状态="正常";

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

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

i2c3{(&I)
   状态="正常";
   时钟频率=<400000>;
      
   tlv320aic3104:tlv320aic3104@18{
      #sound-di-cells =<0>;
      兼容="ti、tlv320aic3104";
      reg =<0x18>;
      分配的时钟=<&McASP1_ahclkx_mux>;

      状态="正常";
      adc -稳定-ms =<40>;

      AVDD-SUPPLY =<&v3_3D>;
      IOVdd-supply =<&v3_3D>;
      DRVDD-SUPPLY =<&v3_3D>;
      DVDD 电源=<&AIC_DVDD>;
   };
};

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

    您好、Fred、

    我将更深入地了解您的设置并返回给您。

    同时请仔细检查以下文档。 这些功能对于您将来有关音频的工作也很有用。

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

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

    此致、
    帕维尔

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

    [引用用户="FredrikN">TLV320AIC3104 <-> am5718
    MCLK         <->McASP1_AHCLKX (XREF_CLK0)             
    WCLK         <->McASP1_FSX    
    BCLK         <->McASP1_ACLKX[/报价]

    [引用 user="Fredriknh"]   simple-audio-card, bitclock-master =<&sound0_master>;
          simple-audio-card、frame-master =<&sound0_master>;

    [引用 USER="FredrikN"] sound0_master:simple-audio-card, codec{
             sound-dai =<&tlv320aic3104>
             时钟=<&clkout2_clk>;
          };[/报价]

    此配置使 AM572x McASP1模块成为从器件、AIC3104编解码器成为位时钟和帧同步信号的主器件。 请确认您计划使用该模式(音频编解码器为主模式)。

    关于引脚 D18、您是否在 McASP1_ahclkx 模式(模式3)或 clkout2模式(模式9)下使用它?

    此致、
    帕维尔

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

    是的、我们计划将该模式与音频编解码器一起用作主器件。

    引脚 D18设置为 msasp1_ahclkx 模式(模式3)。

    此致

    Fredrik

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

    您是否在 u-boot spl 级中实现了必要的 McASP1和 I2C3引脚多路复用器? 有关在 u-boot spl 级中完成 pinmux 的详细信息、请参阅以下 e2e 文章:

    e2e.ti.com/.../2415822

    请提供:

    1.完整的控制台启动日志(u-boot +内核+ rootfs)
    McASP1/I2C3引脚多路复用寄存器的值。 使用 devmem2或 omapconf 工具从用户空间获取这些值。

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

    我想我已经在 u-boot 中进行了必要的设置。

    附加了3个文件。 第一个是具有上述设置的引导日志。 则启动失败。

    第二个是线路时的引导

    分配的时钟=<&McASP1_ahclkx_mux>;
    分配的时钟父级=<&sys_clkin2>;

    从 Linux DTB 的 McASP1部分中删除。 然后启动完成。

    第三个文件包含读出寄存器设置(从第二个引导中)。

    e2e.ti.com/.../boot_5F00_fail.cap.tar.gz

    e2e.ti.com/.../boot_5F00_no_5F00_clock_5F00_set.cap.tar.gz

    e2e.ti.com/.../register_5F00_settings.txt.tar.gz

    此致

    Fredrik

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

    [引用 user="Fredriknh"]引脚 D18设置为 msasp1_ahclkx 模式(模式3)。

    然后、您应该在 DTS 中修改以下代码:

    sound0_master:simple-audio-card、codec{
             sound-dai =<&tlv320aic3104>
             - 时钟=<&clkout2_clk>;
               +时钟=<&McASP1_ahclkx_mux>;
          };

    请参阅以下 e2e 线程、其中它们使用 mcasp3_ahclkx (而不是 McASP1_ahclkx)来提供 AIC3x 编解码器 MCLK。 您应该对 McASP1应用与 McASP3相同的设置。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我也作了相应的修改,但没有成功。 我还将 DTS 设置更改为与 am57xx-EVM 相同、但使用了 McASP1而不是 mcasp3、并将引脚 D18更改为模式 M9 (clkout2)、但结果相同。 启动崩溃、可能在 McASP 驱动程序初始化时发生。

    当 DTS 中没有为 McASP 指定时钟时、与成功引导不同的第一行是
    [2.464364] OMAP_hwmod:McASP1:_WAIT_TARGET_READY 失败:-16
    [2.470228] Davinci-McASP 48460000.McASP:在驱动程序中使用 PM_RATIFY_PLOT_SYNC_SUSP()?
    [2.490958]--- [在此处剪切]-----
    [2.495599]警告:CPU:0 PID:1在 drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler+0x25c/0x36c
    [ 2.504766] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_PER2_P3 (读取):在功能访问期间以用户模式访问数据

    这可能是什么原因?

    我已经搜索了其他错误、在论坛上、我找到了一个线程、该线程中指出了错误、如所示
    -/cpus/cpu@0缺少时钟频率属性
    - omap_hwmod:L3_main_2、使用来自 OCP 的断开 dt 数据
    - IRQ:找不到/ocp/l4@4a000000/SCM@2000/pinmux@1400的 IRQ 域!
    表示 DTS 与硬件设置不匹配。 我在 am571x-idk 和 am572x-idk 上运行了 PSDK 04.02.00.09中预构建的 SD 卡、这些板上存在相同的错误。 这些误差是否与参考设计无关或在参考设计中是否存在误差?

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

    Fredrik、

    [引用 user="FredrikN"]启动崩溃,可能是在 McASP 驱动程序初始化时。

    当 DTS 中没有为 McASP 指定时钟时、与成功引导不同的第一行是
    [2.464364] OMAP_hwmod:McASP1:_WAIT_TARGET_READY 失败:-16
    [2.470228] Davinci-McASP 48460000.McASP:在驱动程序中使用 PM_RATIFY_PLOT_SYNC_SUSP()?
    [2.490958]--- [在此处剪切]-----
    [2.495599]警告:CPU:0 PID:1在 drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler+0x25c/0x36c
    [ 2.504766] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_PER2_P3 (读取):在功能访问期间以用户模式访问数据

    这可能是什么原因? [/报价]

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

    [引用 user="FredrikNy">]我已在 am571x-idk 和 am572x-idk 上运行 PSDK 04.02.00.09中的预构建 SD 卡、并且这些电路板上存在相同的错误。 这些错误是否与参考设计无关或在参考设计中是否存在错误?

    我没有要测试的 IDK 板(am572x 和 am571x)、我只有 AM572x EVM。 但我看到 IDK 板根本不使用 McASP/AUDIO/CODEC。 在启动预构建的二进制文件期间、您是否确定 IDK 板上存在与 McASP 相关的内核错误? 您能否共享引导日志的控制台输出?

    此致、
    帕维尔

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

    您好!

    否、IDK 板上没有与 McASP 相关的内核错误。 我参考了我列出的其他错误(/cpus/cpu@0缺少时钟频率属性...) 这可能表示 DTS (?)有问题。 连接的是来自 am571x idk 的控制台输出。

    e2e.ti.com/.../boot_5F00_log_5F00_am571x_2D00_idk.cap.gz

    此致、

    Fredrik

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

    确保您使用的是适用于 AM571x EVM 板的正确 DTB 文件:

    am571x-idk.dtb -如果未使用 LCD 板、则不使用 PRU ICSS 以太网板
    am571x-idk-lcd-osd101t2045.dtb -使用 LCD osd101t2045板时
    am571x-idk-lcd-osd101t2587.dtb -当使用 LCD osd101t2587板时
    am571x-idk-PRU-Excl-UOI.DTB -当使用 PRU ICSS 以太网板时、不使用 LCD

    DTB 文件位于 rootfs/boot/文件夹中。

    使用 uENV.txt 中的 fdtfile 进行 DTB 文件选择、请查看下面的 Wiki 以了解更多信息:

    processors.wiki.ti.com/.../How_to_Change_dtb_File

    processors.wiki.ti.com/.../Processor_SDK_Linux_Automotive_Software_Developers_Guide

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

    [引用 user="FredrikN">我搜索了其他错误、在论坛上我找到了一个提示错误的主题
    -/cpus/cpu@0缺少时钟频率属性
    - omap_hwmod:L3_main_2、使用来自 OCP 的断开 dt 数据
    - IRQ:找不到/ocp/l4@4a000000/SCM@2000/pinmux@1400的 IRQ 域!
    表示 DTS 与硬件设置不匹配。 我在 am571x-idk 和 am572x-idk 上运行了 PSDK 04.02.00.09中预构建的 SD 卡、这些板上存在相同的错误。 这些误差是否与参考设计无关或在参考设计中是否存在误差?
    [/报价]

    我还检查 AM572x TI EVM 上的 PSDK 4.02预构建映像、并在内核启动期间观察到相同的警告。 由于 McASP/AUDIO 在 AM572x TI EVM 上经过全面测试、这3个警告可被忽略。

    正在启动内核...
    
    [0.000000]在物理 CPU 上引导 Linux 0x0
    [0.000000] Linux 版本4.9.59-ga75d8e9305 (gtbldadm@ubuntu-16)(gcc 版本6.2.1 20161016 (Linaro GCC 6.2-2016.11))#2 SMP 优先于 EST
    2017年12月23日10:02:24日 

    [0.000000]、共个:FDT:机器模型:TI AM5728 EVM 


    [0.001530] CPU:测试写入缓冲器一致性:确定
    [0.001734]/cpus/cpu@0缺少时钟频率属性
    [0.001749]/cpus/cpu@1缺少时钟频率属性 


    [0.204491] OMAP_hwmod:L3_main_2、使用来自 OCP 的断开 dt 数据
    [0.318475] OMAP-hwmod:dcan1:_wait_target_disable 失败 


    [0.494926] IRQ:找不到/ocp/l4@4a000000/SCM@2000/pinmux@1400的 IRQ 域!
    [0.522078]没有 ATAG? 

    此致、
    帕维尔

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

    [引用 user="Fredriknky">DTS 中没有为 McASP 指定时钟时、与成功启动不同的第一行是
    [2.464364] OMAP_hwmod:McASP1:_wait_target_ready 失败:-16

    此错误来自以下内核文件:

    linux-kernel/arch/arm/mach-omap2/omap_hwmod.c

    static int _enable (struct omap_hwmod *oh)

    请启用调试输出 pr_debug(),这样您将获得更详细的消息传递输出。

    看起来 PRCM 中的 McASP1时钟未启用。 您能否提供您在以下寄存器中具有的值:

    CM_IPU_CLKSTCTRL

    CM_IPU_McASP1_CLKCTRL

    另请注意、McASP1_ahclkx_mux 时钟来自 SYS_clkin2、即22.5792MHz 固定时钟、源自 AM572x EVM 上提供的辅助振荡器(OSC1)(SYS_CLK2)。 请确认您在 AM571x OSC1引脚上连接了类似的22.5792MHz 辅助振荡器。 使用示波器检查您是否具有来自该 OSC1的有效且稳定的22.5792MHz 信号输出。

    此致、
    帕维尔

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、AM571x OSC1引脚上没有连接22.5792MHz 辅助振荡器。 是否有任何方法可以将其配置为以不同的方式使用20MHz 主时钟、或者是否必须等到有新的电路板版本?

    这些寄存器似乎也没有正确设置。 寄存器 CM_IPU_CLKSTCTRL (0x4A00 5540)设置为0x0000 0001、CM_IPU_McASP1_CLKCTRL (0x4A00 5550)设置为0x003 0000。 应在何处设置这些寄存器? 我查找了 am572x EVM 的相应更改、但找不到它们的设置位置。

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

    [引用 USER="FredrikN">]不、AM571x OSC1引脚上没有连接22.5792MHz 辅助振荡器。 是否有任何方法可以将其配置为以不同的方式使用20MHz 主时钟、或者是否必须等到新的电路板版本?

    是的、您可以。 您应更改以下 DTS 代码:

    McASP1{
       #sound-di-cells =<0>;
       分配的时钟=<&McASP1_ahclkx_mux>;
       -assigned 时钟父节点=<&sys_clkin2>;
      +分配的时钟父级=</ABE_24m_fclk>;
       状态="正常";

    您可以使用 ABE_24m_fclk 或 CM_IPU_McASP1_CLKCTRL[27:24] CLKSEL_AHCLKX 中列出的另一个时钟信号。 这对应于以下 linix 代码:

    McASP1_ahclkx_mux:McASP1_ahclkx_mux@550{
          #clock-cells =<0>;
          兼容="ti、mux-clock";
          时钟=<&ABE_24m_fclk>、<&ABE_SYS_clk_div>、<&func_24m_clk>、<&ATL_clk3_ck>、<&ATL_clkin2_ck>、<&ATL_clkIN2_ck>、 &ATL_clkin1_ck>、<&ATL_clk0_ck>、<&SYS_clk2>、<&ref_clk0_ck>、<&ref_clkin1_ck>、 <&ref_clkin2_ck>、<&ref_clkin3_ck>、<&MLB_clk>、<&mlbp_clk>;
          TI、bit-shift =<24>;
          reg =<0x0550>;
       };

    Abe_24m_fclk 来自 DPLL_ABE、为24MHz、Abe_sys_clk_div 来自 OSC0、为20MHz。

    [引用 user="FredrikN">这些寄存器似乎也没有正确设置。 寄存器 CM_IPU_CLKSTCTRL (0x4A00 5540)设置为0x0000 0001、CM_IPU_McASP1_CLKCTRL (0x4A00 5550)设置为0x003 0000。 应在何处设置这些寄存器? 我查找了 am572x EVM 的相应更改、但找不到它们的设置位置。

    在 am57xx-beagle-x15-common.dtsi 文件中启用 McASP3 (设置 PRCM 寄存器):

    mcasp3{.m&mcasp3}
       #sound-di-cells =<0>;
       分配的时钟=<&mcasp3_ahclkx_mux>;
       分配的时钟父级=<&sys_clkin2>;
       status ="确定"; -->这将启用 PRCM 时钟

    确保对 McASP1执行相同的操作时、在正确的 DTS 文件中执行相同的操作、然后将此文件生成到 DTB 文件。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用实际存在的时钟、一切都能更好地工作。 我还必须将时钟更改为 tlv320aic3104编解码器、但我们可以播放声音。

    谢谢、
    Fredrik