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:McASP3测试

Guru**** 2609955 points
Other Parts Discussed in Thread: AM5718, TLV320AIC3104, BEAGLEBOARD-X15

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/574916/linux-mcasp3-testing

主题中讨论的其他器件:AM5718DRA72TLV320AIC3104BeagleBoard-X15

工具/软件:Linux

您好!

我们已开发出采用 AM5718 处理器的定制板、并使用 ti-processor-sdk-linux-am57xx-evm-02.00.01.07。 我们在板上有 McASP3接口、对于 MCLK、我们已连接到 AM5718处理器的 B26焊球。 在 AM572x EVM 中、它连接到 D18。 如何在 DTS 文件中修改此设置以生成器件的 MCLK、其余所有引脚都连接到 McASP3信号、与 AM572x EVM 类似。 另外、请向我推荐 McASP3接口的测试程序、我以前从未使用过此接口。

此致、

Ganesh

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

    DRA72x TI EVM (J6Eco)采用与定制板相同的方法、它使用引脚 B26为 AIC3x 芯片提供 MCLK 时钟。 了解如何在 DRA72 DTS 文件中应用此功能。

    要测试 McASP3、您可以使用 aplay/arecord 工具和/或回放/录制应用程序。 有关更多信息、请参阅以下 wiki 页面:

    processors.wiki.ti.com/.../Linux_Core_Audio_User's_Guide
    processors.wiki.ti.com/.../Sitara_Linux_Audio_Sample_Application_Overview
    processors.wiki.ti.com/.../Sitara_SDK_Linux_Audio_ALSA_User_Space

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

    您好、Pavel、

    我尝试修改 DTS 与 DRA72 DTS 文件类似。 我已附加 DTS 文件。 请检查我是否收到以下错误:

    e2e.ti.com/.../2543.DTS.txt

    [1.762663]  clk:无法将 ATL_clkin2_ck 重新父级到 DPLL_AE_M2_ck:-22

    [1.771629]  dra7-ATL:4843c000.ATL 的探测器失败,错误为-22

    此致、

    Ganesh

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

    [引用 user="Ganesh Tenka"][1.762663]  clk:无法将 atl_clkin2_ck 重新父级到 DPLL_Abe_m2_ck:-22[/引用]

    这一行(来自 dts.txt)看起来可疑:

    mcasp3{.m&mcasp3}

    fclk_parent ="atl_clkin2_ck);

    在 AM572x EVM 中、我们具有:

    mcasp3{.m&mcasp3}

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



    这意味着我们设置位 CM_L4PER2_MCASP3_CLKCTRL[23:22] CLKSEL_AHCLKX = 0x7:选择 SYS_CLK2


    在 DRA72x EVM 中、我们具有:

    mcasp3{.m&mcasp3}

       分配的时钟=<&mcasp3_ahclkx_mux>;
       分配的时钟父级=<&ATL_clkin2_ck>;


    这意味着我们设置位 CM_L4PER2_MCASP3_CLKCTRL[23:22] CLKSEL_AHCLKX = 0x4:选择 ATL CLK2


    您对 SP3 McAahclkx 时钟源的看法是什么? 可用选项在 CLKSEL_AHCLKX 位中选择。

     

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于 McASP3 fclk (aux_clk)、默认情况下使用 DPLL_ABE (per_ABE_X1_GFCLK)、请参阅 M_L4PER2_MCASP3_CLKCTRL[23:22] CLKSEL_AUX_CLK = 0x0

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

    您好、Pavel、

    因为我必须根据 dra72来做,所以我在我的 DTS 中添加了以下行:

    &ATL{
    状态="正常";

    分配的时钟=<&ATL_clkin2_ck>;
    分配的时钟父级=<&DPLL_ABE_M2_CK>;
    分配的时钟速率=<564400>;

    atl2{
    AWS = ;/*Mux 模式4*/
    };
    };

    mcasp3{.m&mcasp3}
    #sound-di-cells =<0>;
    分配的时钟=<&mcasp3_ahclkx_mux>;
    分配的时钟父级=<&sys_clkin2>;
    状态="正常";

    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>;
    };

    我仍然会得到该误差、

    [1.774577] clk:无法将 atl_clkin2_ck 重新父级连接到 DPLL_AE_m2:-22
    [1.781419] dra7-ATL:4843c000.ATL 的探测器失败,错误为-22

    由于未配置该时钟、我将获得以下结果:

    root@am57xx-EVM:~# aplay audio.wav
    [317.325534] 平台4843c000.ATL:atl2尚未配置
    audio.wav:没有这样的文件或目录



    此致、
    Ganesh

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

    让我首先澄清一下您的设置。

    在 AM572x TI EVM 上、我们有:

    - McASP3连接到 TLV320AIC3104

    McASP3是 FSX/WCLK 和 ACLKX/BCLK 主设备,TLV320AIC3104是从设备

    - McASP3使用这些引脚连接到 AIC3104:
    mcasp3_FSX ---- > WCLK
    mcasp3_aclkx -- >BCLK
    mcasp3_axr0 ---- >DIN
    mcasp3_axr1<---- DOUT

    - AM572x 引脚 D18 (模式 clkout2)用于为 MCLK 供电:
    AM572x clkout2 --- > MCLK

    - clkout2信号来自 SYS_clk2 (OSC1)、CM_CLKSEL_CLKOUTMUX2[4:0] CLKSEL = 0x1

    -SP3 McAauxclk 来自 per_abe_x1_gfclk、后者来自 DPLL_ABE
    CM_L4PER2_MCASP3_CLKCTRL[23:22] CLKSEL_AUX_CLK = 0x0

    - AM572x 引脚 B26 (xref_clk2)设置为 GPIO6_19

    -不使用 McASP3_AHCLKX 功能时钟:
    McASP_AHCLKXCTL[15] HCLKXM = 1
    McASP_ACLKXCTL[5] CLKXM = 1

    除了 AIC3104 MCLK 的时钟(您使用的是 B26而不是 D18)之外、您能否确认您的 AM571x 定制板上具有相同的设置? 您还有其他差异吗?

    另请参阅以下应用手册是否将提供帮助:

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

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另请注意、xref_clk2信号(在引脚 B26上)仅为输入、您不能使用 xref_clk2为 AIC3104 MCLK 提供时钟。 应使用 mcasp3_ahclkx (模式3)。 在 DRA72x 中、引脚 B26具有模式5 (ATL_clk2)、该模式不适用于 AM57x 器件。

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

    Pavel、

    在我们的定制板中、除了 AIC3104 MCLK 的时钟之外、所有内容仅与 AM572x 相同、并且 Osio IC 也发生了变化。

    现在、我收到以下错误。 我使用的是 TLV320AIC3104音频 IC

    root@am57xx-EVM:~# arecord -d 10 -f cd -t wav audio.wav                                             

    录制波'audio.wav':[79.107645] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.

    有符号16位小端序、速率44100Hz、立体声

    A 记录:PCM_READ:2039:读取错误:输入/输出错误

    root@am57xx-EVM:~# aplay audio.wav

    播放波'audio.wav':[94.597618] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.

    有符号16位小端序、速率44100Hz、立体声

    e2e.ti.com/.../4428.am57xx_2D00_beagle_2D00_x15.txt

    e2e.ti.com/.../2235.McASP3_5F00_Clock.txt

    我怀疑 I2C 接口不工作。 或者我在 DTS 文件中缺少任何内容?

    此致、

    Ganesh

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

    Ganesh、

    [引用 USER="Ganesh Tenka"]在我们的定制板中,除了 AIC3104 MCLK 的时钟之外,所有内容都仅与 AM572x 相同,而且 Osio IC 也发生了变化。

    这话什么意思? 您在音频 IC 中有哪些变化?

    [引用 USER="Ganesh Tenka"]录制波'audio.wav':[79.107645] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121[/报价]

    您是否为音频 IC (aic3104)提供 MCLK? 确保您具有从引脚 B26 (模式 mcasp3_ahclkx)到 AIC3104 MCLK 的时钟信号。 您可以使用示波器进行检查。 您能否为我提供 CTRL_CORE_PAD_XREF_CLK2寄存器的值? 您可以使用 devmem2工具从用户空间获取该内容。 此外、默认情况下、在 McASP 级别不启用 ahclkx。 您是否已修改 平台驱动程序(sound/soc/co/Davinci/Davinci-McAP.c)来启用此功能?

    此致、
    帕维尔

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

    抱歉、这是一个错误"音频 IC 也发生了变化"。 音频 IC 也与 AM572x :TLV320AIC3104相同。
    root@am57xx-EVM:~# devmem2 0x4A00369C
    /dev/mem 已打开。
    映射到地址 bb6fe0000的内存。
    在地址0x4A00369C (0xb6fe069c):0x00010003处读取

    在示波器中看到过、我没有在 B26上获得时钟。 我尚未修改(sound/soc/co/Davinci/Davinci-McAP.c)文件中的任何内容。

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

    Ganesh、

    [引用 USER="Ganesh Tenka]root@am57xx-EVM:~ evmem2 0x4A00369C
    /dev/mem 已打开。
    映射到地址 bb6fe0000的内存。
    在地址0x4A00369C (0xb6fe069c)读取:0x00010003

    您在 CTRL_CORE_PAD_XREF_CLK2寄存器中具有正确的值。

    [引用用户="Ganesh Tenka">在示波器中看到过、我没有在 B26上获取时钟。 我尚未修改(sound/soc/co/Davinci/Davinci-McAP.c)文件中的任何内容。

    您应该从 McASP3模块启用 AHCLKX 输出。 这应该在 Davinci-McAP.c 文件中完成。 更多详细信息、请参阅 AM571x TRM、第24.6.4.2.1节 MCASP 发送时钟

    一个内部生成的高频时钟可被选择性地驱动到 AHCLKX 引脚上、以使 Tx 部件作为其它部件的参考时钟
    系统中的组件。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意、J5Eco (TI811x) EVM 和代码使用 mcasp2_ahclkx 为 AIC3x MCLK 供电。 您可以重新使用 J5Eco McASP 驱动程序。

    Davinci-McAP.c

    /* TI811x AIC_MCLK <- McASP2_AHCLKX (引脚分配)*/
    switch (dev->clk_input_pin){
    案例 MCASP_AHCLKX_IN:
    McASP_CLR_BIits (base + DaVinci_MCASP_Pdir_REG、AHCLKX);
    中断;
    案例 MCASP_AHCLKX_OUT:
    McASP_SET_BIits (base + DaVinci_MCASP_Pdir_REG、AHCLKX);
    中断;

    ti811xevm.c

    /* McASP2_AHCLKX 输出为编解码器 CLK*/
    .clk_input_pin= MCASP_AHCLKX_OUT、


    总之、您应该在 Davinci-McASP.c 中将 Pdir[27] AHCLKX 设置为1

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    我修改了 DaVincia-McAP.c 文件、

    静态 int Davinci_McASP_SET_SYSCLK (struct snd_soc_dai * dai、int clk_id、
    unsigned int freq、int dir)

    struct Davinci_McASP *McASP = snd_soc_da_get_drvdata (dai);

    PM_runtime_get_sync (McASP->dev);
    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);
    #if 0
    if (dir =snd_SOC_clock_out){
    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);
    printk (Kern_info "AHCLKX =%x、方向被设定\n"AHCLKX);
    }否则{
    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);
    printk (Kern_info "AHCLKX =%x、方向被清除\n"AHCLKX);

    #endif
    McASP->SYSCLK_freq = freq;

    Pm_runtime_put (McASP->dev);
    返回0;


    但仍然无法正常工作。

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

    [引用用户="Ganesh Tenka"]但仍不起作用。

    您是否意味着您仍然没有在引脚 B26 (模式 mcasp3_ahclkx)上获得时钟信号? 您是否在其他 McASP3时钟引脚(aclkx、FSX)上有时钟信号?

    您能否为我提供 McASP3模块寄存器和 McASP3 Pinmux 设置转储? 应该在使用 devmem2工具执行 aplay 命令后获得这些值。

    此致、
    帕维尔

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

    Pavel、


    我有 MCLK 和 AFSX 的测试点。 我对这两个信号没有任何了解。

    root@am57xx-EVM:~ a# aplay -l
    ****播放硬件设备列表****
    卡0:BeagleBoardX15 [BeagleBoard-X15]、器件0:Davinci-McAP.0-tlv320aic3x-htlv320aic3x-hifi 0 []
     子设备:1/1
     子设备#0:子设备#0
    root@am57xx-EVM:~# arecord -d 10 -f cd -t wav audio.wav
    录制波'audio.wav':[179.927527] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.
    有符号16位小端序、速率44100Hz、立体声
    A 记录:PCM_READ:2039:读取错误:输入/输出错误
    root@am57xx-EVM:~# aplay audio.wav
    播放波'audio.wav':[272.277579] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.
    有符号16位小端序、速率44100Hz、立体声

    McASP3信号:

    root@am57xx-EVM:~# devmem2 0x4A00369C
    /dev/mem 已打开。
    映射到地址0xb6fac000的内存。
    在地址 0x4A00369C (0xb6fac69c)读取:0x00010003

    root@am57xx-EVM:~# devmem2 0x4A003724
    /dev/mem 已打开。
    映射到地址 bb6f59000的内存。
    在地址 0x4A003724 (bb6f59724)读取:0x00040000
    root@am57xx-EVM:~# devmem2 0x4A003728
    /dev/mem 已打开。
    映射到地址 bb6f21000的内存。
    读取地址 0x4A003728 (bb6f21728):0x00040000
    root@am57xx-EVM:~# devmem2 0x4A00372C
    /dev/mem 已打开。
    映射到地址 bb6fc8000的内存。
    在地址 0x4A00372C (bb6fc872c):0x00040000处读取
    root@am57xx-EVM:~# devmem2 0x4A003730
    /dev/mem 已打开。
    映射到地址 bb6f03000的内存。
    在地址 0x4A003730 (bb6f03730):0x00040000处读取

    我认为对于 devmem2、我们无法读取 McASP3寄存器、我会遇到以下错误。

    root@am57xx-EVM:~# devmem2 0x48468000
    /dev/mem 已打开。[476.766543] -------- [在此处剪切]-----
    [476.772498] 警告:CPU:0 PID:762 at drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler + 0x248/0x34c ()
    [476.782019] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_PER2_P3 (读取):在功能访问期间以用户模式进行数据访问
    [476.793629] 链接的模块:gdbserverproxy (O) cryptodev (O) cmemk (O) xhci_plat_hcd xhci_hcd usbcore dwc3 udc_core omapdrm_pVR (O) phy_omapn
    [476.821153] CPU:0 PID:762 Comm:devmem2被污染:G          O   4.1.1.13-g8dc6617 #38
    [476.829189] 硬件名称:通用 DRA72X (平展器件树)
    [476.835308] 回溯:
    [476.837780] [ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [476.845379]  r7:c030ff28 R6:00000093 R5:c08c990c R4:00000000
    [476.851101] [ ](show_stack)从[ ](dump_stack+0x9C/0xdc)
    [476.858359][  ](dump_stack)从[ ](warn_slESpath_common+0x88/b8)
    [476.866480]  R5:00000009 R4:dfd65e00
    [476.870088] [ ](warn_slowpath_common)、来自[ ](WARN_RASPH_FMt+0x38/0x40)
    [476.878819]  R8:c07cf664 r7:00000002 R6:ee962610 R5:c07cf724 R4:c07cf7c8
    [476.885591] [ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x248/0x34c)
    [476.894496]  R3:ee962480 R2:c07cf7c8
    [476.898098]  R4:80080003
    [476.900652][  ](L3_interrupt_handler)、来自[ ](handle_irq_event_perpu + 0x80/0x13c)
    [476.909994]  R10:c08f2729 R9:ee947780 R8:00000017 r7:00000000 R6:00000000 R5:ee9477e0
    [476.917893]  R4:ee962980
    [476.920447] [ ](handle_irq_event_perpu)、来自[ ](handle_IRQ_EVENT+0x44/0x64)
    [476.929354]  R10:be8d2b14 R9:00000001 R8:ee806000 r7:00000000 R6:ee962980 R5:ee9477e0
    [476.937252]  R4:ee947780
    [476.939805][  ](handle_irq_event)从[ ](handle_fasteoi_IRQ+b0x8/0x17c)
    [476.948362]  r7:00000000 R6:c08b1a7c R5:ee9477e0 R4:ee947780
    [476.954077] [ ](handle_fasteoi_IRQ)、来自[ ](generic_handle_IRQ+0x34/0x44)
    [476.962721]  r7:00000000 R6:00000000 R5:00000017 R4:00000017
    [476.968438] [ ](generic_handle_IRQ)、来自[ ](_handle_domain_IRQ+0x64/bb)
    [476.977171]  R5:00000017 R4:c08a6d2c
    [476.980778] [ ](_handle_domain_IRQ)、来自[ ](GIC_Handle_IRQ+0x2C/0x64)
    [476.989161]  R9:00000001 R8:30c5387d r7:fa212000 R6:dfd65fb0 R5:c08ac950 R4:fa21200c
    [476.996979] [ ](GIC_Handle_IRQ)、来自[ ](_IRQ_USR+0x48/0x60)
    [477.004491] 异常堆栈(0xdfd65fb0至0xdfd65ff8)
    [477.009564] 5fa0:                                    b6fae960 00010320 b6fac6e8 0d6914
    [477.01777] 5fc0:00000000 00020f5c b6fa0000 b6fa04c0 00000002 00000001 be8d2b14 b6faa000
    [477.025988] 5fe0:00020f5c be8d2aa8 00010400 b6f90ad4 200b0030 ffffff
    [477.032627]  r7:30c5387d R6:ffff R5:200b0030 R4:b6f90ad4
    [477.038337] --[结束线迹05259e3cd2a6c788 ]--

    映射到地址 bb6faa000的内存。
    [477.043155] 未处理故障:异步外部中止(0x1211)、0x00000000
    [477.053829] PgD = d5016d40
    [477.056545] [000000000000]* PgD=ae3b7003、* PMD=adf0e003、* Pte=00000000
    在地址 0x48468000 (bb6faa000)上读取:0x00000000
    e2e.ti.com/.../8713.DTS.txt

    此致、

    Ganesh

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

    [引述 USER="Ganesh Tenka">我有 MCLK 和 AFSX 的测试点。 我对这两个信号没有任何了解。[/quot]

    您是否意味着您在引脚 B26 (xref_clk2.mcasp3_ahclkx)和 F15 (mcasp3_FSX.mcasp3_FSX)上有测试点? 您是否在播放/录制执行期间探测这些信号?

    [引用 USER="Ganesh Tenka"]我认为,对于 devmem2,我们无法读取 McASP3寄存器,我会遇到以下错误。

    您能否在 McASP 驱动程序的 McASP_START_Rx()函数末尾转储 McASP3寄存器:

    Linux 内核/sound/soc/co/Davinci/Davinci-McAP.c

    静态空 McASP_START_Rx (结构 DaVinci_McASP * McASP)

    /*启用接收 IRQ */
       McASP_SET_BITS (McASP、DaVinci_MCASP_EVTCTLR_REG、
                McASP->IRQ_Request[SNDRV_PCM_STREAME_CAPTURE]);

    //此处添加 McASP3寄存器转储、McASP3引脚多路复用转储和 CM_L4PER2_MCASP3_CLKCTRL


    然后、当您执行 arecord 命令时、您应该得到正确的值。 为了从 Linux 内核打印这些寄存器、您应该将物理地址转换为虚拟地址。

    此致、
    帕维尔

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

    Pavel、


    您是否意味着您在引脚 B26 (xref_clk2.mcasp3_ahclkx)和 F15 (mcasp3_FSX.mcasp3_FSX)上有测试点? 您是否在播放/录制执行期间探测这些信号?

    是的、执行时我在 CRO 中看到的信号。 什么也不来。


    我尝试使用中的以下代码打印消息

    Linux 内核/sound/soc/co/Davinci/Davinci-McAP.c

    静态空 McASP_START_Rx (结构 DaVinci_McASP * McASP)


    我收到了以下代码的内核严重错误。 我不确定它是否将物理地址正确转换为虚拟地址。 帮助我如何在内核代码中打印寄存器值、然后我可以与您分享寄存器值。



    virt_addr = phys_TO_virt (0x48468000);
    printk (kern_info "虚拟地址为%x\n",virt_addr);
    printk (kern_info "虚拟地址为%x,值为%x\n", virt_addr,*virt_addr);



    此致、

    Ganesh

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

    要检查内核中的寄存器、应首先将物理地址转换为虚拟地址。 您需要使用 Linux 内核或映射系统调用将物理内存映射到虚拟内存。 例如、有关如何使用 ioremap 映射 USB 物理寄存器、请参阅 USB-musb.c

    静态空__iomem *OTG_base;

    OTG_BASE = ioremap (OMAP34XX_HSUSB_OTG_BASE、SZ_4K);

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

    Pavel、

    请在以下文件中找到寄存器转储:

    e2e.ti.com/.../7824.McASP3-Registers.txt

    此致、

    Ganesh

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

    我看到您有 XREF_CLKOUT2 =10003。 请将位[18] INPUTENABLE 设置为1。 需要进行重定时、请参阅 AM571 TRM 第18.4.6.1.1节"焊盘配置寄存器"和24.6.2.1 McASP 信号"

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

    Ganesh、

    关于 McASP3寄存器转储、我看到 MCASP_Pdir/0x48468014为0x1、这是不正确的。 您已为[28]afsx、[27ahclkx 和[26]aclkx 位设置了输入(值0)。

    REG_ADDRESS =48468014,值=1.  



    请在 Davinci-McAP.c 中添加 printk()函数,以了解该流程是如何进行的。

    静态 int Davinci_McASP_SET_DAI_fmt (struct snd_SoC_Dai * cpu_dai、unsigned int fmt)

       struct Davinci_McASP *McASP = snd_soc_da_get_drvdata (cpu_dai);
       int ret = 0;
       u32 data_delay;
       bool FS_POL_Rising;
       bool inV_fs = false;


    +printk (输入 Davinci_McASP_Set_Dai_fmt ()/n");

    switch (fmt & snd_SOC_DAIFMT_MASTER_MASK){
       案例 SND_SOC_DAIFMT_CBS_CFS:
          /*编解码器是时钟和帧从器件*/

          +printk ("case snd_SOC_DAIFMT_CBS_CFS/n");
          McASP_SET_BITS (McASP、DaVinci_MCASP_ACLKXCTL_REG、ACLKXE);
          McASP_SET_BITS (McASP、DaVinci_MCASP_TXFMCTL_REG、AFSXE);

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

          McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、ACLKX | ACLKR);
          McASP_SET_BITS (McASP、DaVinci_MCASP_Pdir_REG、AFSX | AFESR);
          McASP->BCLK_MASTER = 1;
          中断;

    .

    静态 int Davinci_McASP_SET_SYSCLK (struct snd_soc_dai * dai、int clk_id、unsigned int freq、int dir)

       struct Davinci_McASP *McASP = snd_soc_da_get_drvdata (dai);

      +printk (输入 DaVinci_McASP_SET_SYSCLK ()/n");

    PM_runtime_get_sync (McASP->dev);
       if (dir =snd_SOC_clock_out){

         +printk ("dir =snd_SOC_clock_out/n");
          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);

    .

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

    在代码中、我看到 AM57x McASP3设置为从器件、而编解码器设置为主器件:

    - McASP3使用这些引脚连接到 AIC3104:
    mcasp3_FSX <---- WCLK
    mcasp3_aclkx <--- BCLK
    mcasp3_axr0 ---- >DIN
    mcasp3_axr1<---- DOUT
    clkout2 --- > MCLK

    您是否对以下两个文件进行了任何更改或使用了默认文件?
    Linux-4.1.13/sound/soc/co/Davinci/Davinci-evm.c
    linux-4.1.13/sound/soc/co-core.c

    将一个额外的 printk()放入 Davinci-McASP.c 中

    静态 int Davinci_McASP_SET_DAI_fmt (struct snd_SoC_Dai * cpu_dai、unsigned int fmt)


    案例 SND_SOC_DAIFMT_CBM_CFM:
    /*编解码器是时钟和帧主控*/
    +printk ("case snd_SOC_DAIFMT_CBM_CFM/n");
    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、
    我在日志中获取的 Printk 语句、
    [10.859472] VDD_3V3:由 ldo1供电
    [10.863471] AIC_DVDD_FIXED:由 VDD_3V3供电
    [11.313642]案例 SND_SOC_DAIFMT_CBM_CFM/n
    [ 11.322350] ASOC-simple-card sound@0:tlv320aic3x-hifi <->48468000 McASP 映射正常
    [13.545695] usbcore:注册的新接口驱动程序 usbfs
    [13.551917] usbcore:注册的新接口驱动程序集线器

    您是否对以下两个文件进行了任何更改或使用了默认文件?
    没有、我正在使用默认值、根据您在前面提到的建议、只有 DaVinci_McASP_SET_SYSCLK 函数发生了变化。


    此致、
    Ganesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    执行 aplay 命令后是否有一些 printk 语句?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ganesh、
    我正面临着与你类似的问题。
    您能不能告诉我您是如何转储 McASP 寄存器的。

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

    您好、深

    您可以打印寄存器转储、如下所示

     静态空__iomem *mcasp3_base;
    uint32_t value、ui_temp;

    mcasp3_base = ioremap (0x4A009868、4);
    值= __raW_readl (mcasp3_base);     
    printk (Kern_info "CM_L4PER2_MCASP3_CLKCTRL %x\n"、值);

    此致、

    Ganesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Pavel、
    在引导日志中、我会得到这样的结果、
    [8.029371] AIC_DVDD_FIXED:由 VDD_3V3供电
    [8.274890]输入 DaVinci_McASP_SET_SYSCLK ()
    [8.279211] dir =snd_SOC_clock_out
    [8.283462]输入 DaVinci_McASP_SET_DAI_fmt ()
    [8.287919]案例 SND_SOC_DAIFMT_CBM_CFM
    [8.292323] ASOC-simple-card sound@0:tlv320aic3x-hifi <->48468000 McASP 映射正常
    [8.667313] ldo4:由 EVM_3V3_SD 供电

    在执行 aplay 时、
    root@am57xx-EVM:~# aplay audio.wav
    播放波'audio.wav':[31.606595]输入 DaVinci_McASP_set_Dai_fmt ()
    有符号16位小端序、速率44100Hz、立体声
    [31.611713]案例 SND_SOC_DAIFMT_CBM_CFM
    [31.620693] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.

    root@am57xx-EVM:~# arecord -d 10 -f cd -t wav audio.wav
    录制波'audio.wav':[211.687119]输入 DaVinci_McASP_set_Dai_fmt ()
    有符号16位小端序、速率44100Hz、立体声
    [211.692425]案例 SND_SOC_DAIFMT_CBM_CFM
    [211.701314] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.
    [211.711864] CM_L4PER2_MCASP3_CLKCTRL 2.
    [211.715718]**** PINMUX 值******* /
    [211.719832] MCASP3_ACLKX == 40000
    [211.719832] MCASP3_FSX = 40000
    [211.719832] MCASP3_AXR0 = 40000
    [211.719832] MCASP3_AXR1 = 40000
    [211.733104] XREF_CLKOUT2 =10003
    [211.736516]**** McASP3配置 寄存器转储寄存器******* /
    [211.741935] Reg_address =48468000,value =44307b02
    [216.746058] Reg_address =48468ff4,value =0
    [216.746058] Reg_address =48468ff8,value =0
    /******* 寄存器转储**** /(我已共享)
    [216.755850] Reg_address =48468ffc,value =0
    [216.755850]
    A 记录:PCM_READ:2039:读取错误:输入/输出错误


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

    谢谢 Ganesh、

    我还将获得相同的 tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121 错误

    我将尝试添加寄存器转储。 您在 McASP-Davinci.c 的哪个函数中添加了该函数? 请告诉我

    谢谢

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

    在 McASP_START_Rx 函数中、最后 因此、每当您执行 arecord 命令时、您都将获得寄存器值。

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

    Ganesh、

    [引用 user="Ganesh Tenka">在引导日志中、我会得到这样的结果、
    [8.029371] AIC_DVDD_FIXED:由 VDD_3V3供电
    [8.274890]输入 DaVinci_McASP_SET_SYSCLK ()
    [8.279211] dir =snd_SOC_clock_out
    [8.283462]输入 DaVinci_McASP_SET_DAI_fmt ()
    [8.287919]案例 SND_SOC_DAIFMT_CBM_CFM
    [8.292323] ASOC-simple-card sound@0:tlv320aic3x-hifi <->48468000 McASP 映射正常
    [8.667313] ldo4:由 EVM_3V3_SD 供电
    [/报价]

    修改 McASP 驱动程序、如下所示:

    案例 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);


    请告诉我结果。

    此致、
    帕维尔

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

    通过上述更改、

    我正在获取 MCLK、在执行 aplay 和 arecord 命令时、MCLK = 20MHz 我正在获取。 我在 WCLK 上没有得到任何时钟信号
    在寄存器转储中、
    root@am57xx-EVM:~# arecord -d 10 -f cd -t wav audio.wav
    录制波'audio.wav':[392.807162]输入 DaVinci_McASP_set_Dai_fmt ()
    有符号16位小端序、速率44100Hz、立体声
    [392.812451]案例 SND_SOC_DAIFMT_CBM_CFM
    [392.821346] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.
    [392.829397] CM_L4PER2_MCASP3_CLKCTRL 2.
    [392.833249]***** PINMUX 值******* /
    [392.837364] MCASP3_ACLKX == 40000
    [392.837364] MCASP3_FSX =40000
    [392.837364] MCASP3_AXR0 =40000
    [392.837364] MCASP3_AXR1 =40000
    [392.850636] XREF_CLKOUT2 == 10003
    [392.854049]***** McASP3配置 寄存器转储寄存器******* /
    [392.859468] Reg_address =48468000,value =44307b02

    [392.864886] Reg_address =48468004,value =1.
    [392.864886] Reg_address =48468008,值=0

    [392.874681] Reg_address =4846800c,value =0
    [392.874681] Reg_address =48468010,value =0
    ------------------------------------------------------------------
    [392.884475] Reg_address =48468014,value =8000001
    ----------------------------------------------------
    [392.884475] Reg_address =48468018,value =0

    [397.87261] arecord:PCM_Read:2039:read error:input/output error
    root@am57xx-EVM:~# aplay audio.wav
    播放波'audio.wav':[444.127207]输入 DaVinci_McASP_set_Dai_fmt ()
    有符号16位小端序、速率44100Hz、立体声
    [444.132024]案例 SND_SOC_DAIFMT_CBM_CFM
    root@am57xx-EVM:~#



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

    [引用 user="Ganesh Tenka"]我正在获取 MCLK,在执行 aplay 和 arecord 命令时,MCLK = 20MHz 我正在获取。

    那么、您最终在 B26引脚(xref_clk2.mcasp3_ahclkx)上有为 AIC3x MCLK 输入供电的时钟、它是20MHz、这是正确的吗?

    请注意、在 AM572x TI EVM 上、我们有22.5792MHz 时钟来提供 AIC3x MCLK 输入。 如果提供20MHz 而不是22.5792MHz 不会导致任何问题、我将咨询音频编解码器团队。

    [引用用户="Ganesh Tenka"[392.850636] XREF_CLKOUT2 =10003

    请尝试 bit [18] INPUTENABLE = 1、如下所示为 AM571x TRM:

    注意:为了使 mcaspx_aclkx、mcaspx_ahclkx 和 mcaspx_aclkr 信号正常工作、相应 CTRL_core_pad_x 寄存器的 INPUTENABLE 位应出于重定时的目的设置为0x1。

    此致、
    帕维尔

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

    如果您计划为 AIC3104 MCLK 使用20MHz 时钟、则需要修改 AIC3x 驱动程序。 如果 AIC3104接收到20MHz MCLK、则需要配置内部 PLL。 基本而言、多个采样率(在本例中为11.2896MHz、22.5792MHz)的时钟频率不需要 PLL。 其余频率确实需要 PLL 调节。

    在 AM572x TI EVM 中、22.5792MHz 时钟来自 OSC1 (辅助振荡器)、20MHz 时钟来自 OSC0 (主系统振荡器)。

    您的定制板上是否安装了 OSC1? 如果是、它提供的频率是多少?

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

    感谢您的快速响应。
    我们有具有22.5792MHz 的辅助振荡器。 请建议在这两种情况下修改设置的位置。
    1、如果是 OSC0 (主系统振荡器)、您可以建议进行更改
    2.如果是 OSC1 (辅助振荡器),您可以建议进行更改。

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

    应在 mcasp3_ahclkx 引脚输出上生成22.5792MHz。 有关如何完成此操作的更多信息、请参阅 AM571x TRM (PRCM 和 McASP 章节)和时钟树工具

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

    感谢您的快速响应。 我知道 PRCM 和 McASP 中有这种情况。 我请求您说明需要更改哪个文件才能使用 OSC1 (辅助振荡器)。 您能建议进行哪些更改。

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

    您能否至少为我提供以下两位文件中的值?

    CM_L4PER2_MCASP3_CLKCTRL[27:24] CLKSEL_AHCLKX (物理地址为0x4A009868)
    McASP_AHCLKXCTL[15] HCLKXM (物理地址为0x484640B4)

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

    Pavel、

    中的值
    CM_L4PER2_MCASP3_CLKCTRL 2、[27:24]为0意味着0x0:选择 ABE_24M_GFCLK

    McASP_AHCLKXCTL 188000、MCASP_AHCLKXCTL[15]= 1、0x1:来自输出的内部发送高频时钟源
    可编程高时钟分频器。

    请尝试 bit [18] INPUTENABLE = 1、如下所示为 AM571x TRM:

    注意:为了使 mcaspx_aclkx、mcaspx_ahclkx 和 mcaspx_aclkr 信号正常工作、相应 CTRL_core_pad_x 寄存器的 INPUTENABLE 位应出于重定时的目的设置为0x1。

    仅启用引脚配置寄存器的第18位。

    [24.393131]  MCASP3_ACLKX = 40000
    [24.393131]   MCASP3_FSX =40000
    [24.393131]  MCASP3_AXR0 =40000
    [24.393131]  MCASP3_AXR1 =40000




    此致、
    Ganesh

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

    [引用 USER="Ganesh Tenka"] CM_L4PER2_MCASP3_CLKCTRL 2、[27:24]为0表示0x0:选择 ABE_24M_GFCLK[/QUE]

    您能否尝试使用 CM_L4PER2_MCASP3_CLKCTRL[27:24] CLKSEL_AHCLKX = 0x7 (SYS_CLK2来自 OSC1)、您在 MCLK 引脚输入中的频率是多少?

    [引用用户="Ganesh Tenka"] MCBSP_AHCLKXCTL[15]= 1[/引用]

    现在保持 MCASP_AHCLKXCTL[15]=1

    [引用用户="Ganesh Tenka"]

    请尝试 bit [18] INPUTENABLE = 1、如下所示为 AM571x TRM:

    注意:为了使 mcaspx_aclkx、mcaspx_ahclkx 和 mcaspx_aclkr 信号正常工作、相应 CTRL_core_pad_x 寄存器的 INPUTENABLE 位应出于重定时的目的设置为0x1。

    仅启用引脚配置寄存器的第18位。

    [24.393131]  MCASP3_ACLKX = 40000
    [24.393131]   MCASP3_FSX =40000
    [24.393131]  MCASP3_AXR0 =40000
    [24.393131]  MCASP3_AXR1 =40000

    [/报价]

    我在这里不明白你的观点。 您对 McASP3 Pinmux 进行了哪些修改?为什么?

    我在该帖子中建议:

    将 XREF_CLKOUT2位[18]修改为1、不会再增加、也不会减少。

    我担心、当我建议您修改特定的内容时、您不会修改特定的设置、而是修改其他设置、因此我们无法解决问题。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要在 Linux 内核中设置 CM_L4PER2_MCASP3_CLKCTRL[27:24] CLKSEL_AHCLKX = 0x7 (SYS_CLK2来自 OSC1)、您可以尝试如下修改 DTS:

    mcasp3{.m&mcasp3}
    #sound-di-cells =<0>;
    状态="正常";
    pinctrl-0 =<&mcasp3_PINS_DEFAULT>;
    分配的时钟=<&mcasp3_ahclkx_mux>;
    +分配的时钟父项=<&sys_clkin2>;



    有关"分配的时钟父级"的更多信息、请参阅以下文件:

    Linux-kernel/Documentation/devicetree/bindings/Clock/clock-bindings.txt
    linux-kernel/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi

    修改后、再次检查[27:24] CLKSEL_AHCLKX 中的值。 如果它更改为0x7、则再次检查 MCLK 的频率。

    如果 MCLK 的频率仍然为20MHz (而不是22.5792MHz)、请继续进行以下修改。 在 Davinci-McASP/c 驱动程序中、将 DaVinci_MCASP_AHCLKXCTL_REG[15] AHCLKXE 从1更改为0、然后再次检查 MCLK 频率。

    如果 MCLK 的频率仍然为20MHz (而不是22.5792MHz)、请继续进行以下修改。 在 Davinci-McASP/c 驱动程序中、将 Davinci_MCASP_Pdir_REG[27] AHCLKX 从1更改为0、然后再次检查 MCLK 频率。

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



    mcasp3{.m&mcasp3}
    #sound-di-cells =<0>;
    状态="正常";
    pinctrl-0 =<&mcasp3_PINS_DEFAULT>;
    分配的时钟=<&mcasp3_ahclkx_mux>;
    +分配的时钟父项=<&sys_clkin2>;




    根据上述更改建议、
    [29.492963]案例 SND_SOC_DAIFMT_CBM_CFM
    [29.501876] tlv320aic3x-codec 0-0018:无法同步寄存器0x1-0x1。 -121.
    [29.557849] CM_L4PER2_MCASP3_CLKCTRL 7000002
    [29.562225] MCBSP_AHCLKXCTL 188000
    [29.565726] CM_L4PER2_MCASP3_CLKCTRL 7000002

    这意味着 CLKSEL_AHCLKX=0x7、MCLK 我们得到的频率为180.63MHz、是22.5792的倍数、在某种情况下、它似乎被乘以8。


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

    Ganesh、

    [引用用户="Ganesh Tenka"[29.557849] CM_L4PER2_MCASP3_CLKCTRL 7000002

    看起来是正确的。

    [引用用户="Ganesh Tenka"][29.562225] MCASP_AHCLKXCTL 188000[/quot]

    是否可以尝试使用 MCASP_AHCLKXCTL[15] HCLKXM = 0? 在本例中、您的频率是多少? 要将 DaVinci_MCASP_AHCLKXCTL_REG [15] AHCLKXE 设置为1、您需要修改 DaVincia-McAP.c 驱动程序、DaVinci_McASP_SET_SYSCLK ()函数

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

    [引用 user="Ganesh Tenka"]表示 CLKSEL_AHCLKX=0x7,MCLK 我们得到的频率为180.63MHz,是22.5792的倍数,在某种情况下,它似乎被乘以8。

    那么、当 CLKSEL_AHCLKX = 0x0时、mcasp3_ahclkx 引脚输出为20MHz、而当 CLKSEL_AHCLKX = 0x7时、mcasp3_ahclkx 引脚输出为180.63MHz?

    这种180.63MHz 频率看起来可疑、您能否再次检查? 在 AM571x DM 中(表7-48。 McASP3的时序要求)、AHCLKX 的最小周期时间为20ns、这对应于50MHz 的最大频率、而您在这里有180.63MHz。

    此致、
    帕维尔

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

    您好、Pavel、

    根据您的建议、我们添加了以下内容、

    mcasp3{.m&mcasp3}

    #sound-di-cells =<0>;

    状态="正常";

    pinctrl-0 =<&mcasp3_PINS_DEFAULT>;

    分配的时钟=<&mcasp3_ahclkx_mux>;

    +分配的时钟父项=<&sys_clkin2>;

    &ATL{

        pinctrl-names ="default";

        pinctrl-0 =<&ATL_PINs>;

        分配的时钟=<&ABE_DPLL_SYS_clk_mux>、

                 <&ATL_gfclk_mux>、

                 <DPLL_AE_ck >、

                 <DPLL_AEM2x2_ck >、

                 <&ATL_clkin2_ck>;

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

        分配的时钟速率=<0>、<0>、<180633600>、<361267200>、<564400>;

        状态="正常";

        atl2{

            BWS = ;

            AWS = ;

        };

    };

    我们添加了 ATL 节点、之后我们将获得180.6336MHz。 稍后、我们更改为22579200、然后得到22.5792MHz。

    现在、我们运行 arecord 命令时还会遇到无法同步寄存器错误。请建议您不要执行其他操作。

     

    谢谢、此致、

    N. V.Subbaiah

     

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

    Subbaiah、

    [引用用户="nallapaneni venkata subbaia"]

    &ATL{

        pinctrl-names ="default";

        pinctrl-0 =<&ATL_PINs>;

        分配的时钟=<&ABE_DPLL_SYS_clk_mux>、

                 <&ATL_gfclk_mux>、

                 <DPLL_AE_ck >、

                 <DPLL_AEM2x2_ck >、

                 <&ATL_clkin2_ck>;

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

        分配的时钟速率=<0>、<0>、<180633600>、<361267200>、<564400>;

        状态="正常";

        atl2{

            BWS = ;

            AWS = ;

        };

    [/报价]

    AM571x 器件中没有 ATL 模块、请删除 DTS 中对 ATL 的任何引用

    [引用用户="nallapaneni venkata subbaia"]

    mcasp3{.m&mcasp3}

    #sound-di-cells =<0>;

    状态="正常";

    pinctrl-0 =<&mcasp3_PINS_DEFAULT>;

    分配的时钟=<&mcasp3_ahclkx_mux>;

    +分配的时钟父项=<&sys_clkin2>;

    [/报价]

    按以下方式更新并重试:

    分配的时钟=<&mcasp3_ahclkx_mux>;

    +分配的时钟父项=<&sys_clkin2>;

    +分配的时钟速率=<22579200>;

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


    按如下方式更新并尝试:

    分配的时钟=<&mcasp3_ahclkx_mux>;

    +分配的时钟父项=<&sys_clkin2>;

    +分配的时钟速率=<22579200>;


    MCLK 仍为20MHz。


    如果 MCLK 的频率仍然为20MHz (而不是22.5792MHz)、请继续进行以下修改。 在 Davinci-McASP/c 驱动程序中、将 DaVinci_MCASP_AHCLKXCTL_REG[15] AHCLKXE 从1更改为0、然后再次检查 MCLK 频率。

    MCLK = 20MHz。

    如果 MCLK 的频率仍然为20MHz (而不是22.5792MHz)、请继续进行以下修改。 在 Davinci-McASP/c 驱动程序中、将 Davinci_MCASP_Pdir_REG[27] AHCLKX 从1更改为0、然后再次检查 MCLK 频率。

    MCLK = 0。


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

    为了从 AM571x 引脚 B26 (xref_clk2.mcasp3_ahclkx)提供 AIC3x MCLK、您已从默认 PSDK 中修改以下两项:

    - DTS 文件
    - Davinci-McBSP.c 文件

    您能否确认我的理解是否正确? 如果是、请向我提供 DTS 文件和 Davinci-McAP.c 文件以供审核。

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

    [引用 user="Ganesh Tenka">更新如下并尝试:

    分配的时钟=<&mcasp3_ahclkx_mux>;

    +分配的时钟父项=<&sys_clkin2>;

    +分配的时钟速率=<22579200>;


    MCLK 仍为20MHz。
    [/报价]

    那么、您有以下设置吗?

    CM_L4PER2_MCASP3_CLKCTRL[27:24] CLKSEL_AHCLKX = 0x7 (SYS_CLK2)

    McASP_AHCLKXCTL[15] HCLKXM=1 (内部 AHCLKX)

    McASP_Pdir[27] AHCLKX=1 (输出)

    在此设置中、AIC3x MCLK 上的频率为20MHz、对吧? 对于此设置、我们有以下流程:

    OSC0 (20MHz)-> ABE_DPLL -> AUXCLK -> McASP3 -> mcasp3_ahclkx -> AIC3x MCLK

    [引用 USER="Ganesh Tenka">如果 MCLK 的频率仍然为20MHz (而不是22.5792MHz),请继续进行以下修改。 在 Davinci-McASP/c 驱动程序中、将 DaVinci_MCASP_AHCLKXCTL_REG[15] AHCLKXE 从1更改为0、然后再次检查 MCLK 频率。

    MCLK = 20MHz。
    [/报价]

    那么、您有以下设置吗?

    CM_L4PER2_MCASP3_CLKCTRL[27:24] CLKSEL_AHCLKX = 0x7 (SYS_CLK2)

    McASP_AHCLKXCTL[15] HCLKXM=0 (外部 AHCLKX)

    McASP_Pdir[27] AHCLKX=1 (输出)

    在此设置中、AIC3x MCLK 上的频率为20MHz、对吧?

    [引用 USER="Ganesh Tenka">如果 MCLK 的频率仍然为20MHz (而不是22.5792MHz),请继续进行以下修改。 在 Davinci-McASP/c 驱动程序中、将 Davinci_MCASP_Pdir_REG[27] AHCLKX 从1更改为0、然后再次检查 MCLK 频率。

    MCLK = 0。 [/报价]

    请切换回 MCASP_Pdir[27] AHCLKX=1 (输出)

    此致、
    帕维尔

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

    这种用例似乎是不可能的、请参阅以下 e2e 文章:

    e2e.ti.com/.../1782796

    作为一种权变措施、我们可以做的是:

    唯一可用于输出 AHCLKX 的时钟就是 AUXCLK。 因此、您需要配置时钟以将22.5792 MHz 时钟连接到 AUXCLK。 如果您不使用 DPLL_ABE,我相信您可以实现以下目标:

    OSC1 (22.5792MHz)-> SYS_CLK2 -> PRCM -> ABE_DPLL_SYS_CLK -> ABE_DPLL_CLK -> DPLL_ABE -> CLKOUT_M2 (PER_ABE_X1_GFCLK)-> MCASP3模块-> mcasp3_ahclkx MCLK -> MCLK 引脚

    选择 SYS_CLK2作为 ABE_PLL 的输入
    ·CM_CLKSEL_ABE_PLL_SYS[0] CLKSEL = 0x1
    ·CM_CLKSEL_ABE_PLL_REF[0] CLKSEL = 0x0

    选择 PER_ABE_X1_GFCLK 作为 MCASP3_AUX_GFCLK 的源
    ·CM_L4PER2_MCASP3_CLKCTRL[23:22] CLKSEL_AUX_CLK = 0x0

    这意味着 DPLL_ABE 未在系统的其他位置使用、只需将 M2分频值设置为/1即可配置为旁路模式。

    您可以使用 omapconf 工具来查看是否在其他地方使用了 DPLL_ABE、还可以检查各种频率:

    omapconf 工具是一款 Linux 用户空间独立应用程序、旨在为诊断包括 OMAP 和 DRA7xx 在内的 TI 处理器提供一种简单快捷的方法。 有关 omapconf 的源代码和更多信息,请访问 https://github.com/omapconf。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pavel、

    通过包含前面提到的 ATL 节点、我将获得 MCLK = 22.5792MHz、并且寄存器值与您的建议相同。

    选择 SYS_CLK2作为 ABE_PLL 的输入
    ·CM_CLKSEL_ABE_PLL_SYS[0] CLKSEL = 0x1
    ·CM_CLKSEL_ABE_PLL_REF[0] CLKSEL = 0x0

    选择 PER_ABE_X1_GFCLK 作为 MCASP3_AUX_GFCLK 的源
    ·CM_L4PER2_MCASP3_CLKCTRL[23:22] CLKSEL_AUX_CLK = 0x0

    root@am57xx-EVM:~# devmem2 0x4AE06118
    /dev/mem 已打开。
    映射到地址 bb6fdc000的内存。
    在地址 0x4AE06118 (0xb6fdc118)处读取:0x00000001
    root@am57xx-EVM:~# devmem2 0x4AE06108
    /dev/mem 已打开。
    映射到地址 bb6fc5000的内存。
    在地址 0x4AE06108 (bb6fc5108)上读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x4A009868
    /dev/mem 已打开。
    映射到地址 bb6f81000的内存。
    在地址 0x4A009868 (bb6f81868):0x07030000处读取
    root@am57xx-EVM:~#

    但日志没有变化、仍然得到 PCM_Read:2039:read error:input/output error

    请找到日志、

    e2e.ti.com/.../2746.Board_5F00_Log.txt

    此致、

    Ganesh