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.
您好!
我们使用 ti-processor-sdk-linux-am57xx-evm-05.02.00.10开发了一款带有 AM5718处理器的定制板。 在播放音频的过程中、我们面临着这个问题、我们列出了补丁和参数、这些补丁和参数是为了获得音频而更改的、但我们无法使音频播放。 对于我们的处理器、为了使音频播放、MCLK 应该是20MHz、但在应用以下更改后、我们将 MCLK 设置为50MHz。 请仔细查看我们 所附的补丁和日志、并建议我们应修改哪些参数、以使 MCLK 达到20MHz、作为核心、从而播放音频。
我们在 Davinci-McAP.c 中添加了突出显示的部分
静态 int Davinci_McASP_SET_SYSCLK (struct snd_soc_dai * dai、int clk_id、
unsigned int freq、int dir)
{
静态空__iomem *mcasp3_base;
uint32_t value/*、ui_temp*/;
struct Davinci_McASP *McASP = snd_soc_da_get_drvdata (dai);
printk (Kern_info "Enter Davinci_McASP_Set_SYSCLK ()\n");
PM_runtime_get_sync (McASP->dev);
printk (Kern_info "dir =snd_SOC_clock_out\n");
McASP_CLR_BIits (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_in){
switch (clk_id){
案例 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);
中断;
案例 MCASP_CLK_HCLK_AUXCLK:
McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKXCTL_REG、
AHCLKXE);
McASP_SET_BITS (McASP、DaVinci_MCASP_AHCLKRCTL_REG、
AHCLKRE);
中断;
默认值:
dev_err (McASP->dev、"无效的 clk id:%d\n"、clk_id);
转至输出;
}
}否则{
/*选择 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);
}
#endif
mcasp3_base = ioremap (0x4A00369C、4);
值= __raW_readl (mcasp3_base);
printk (Kern_info "XREF_CLKOUT2 ==%x \n"、value);
(void)__raW_writel (0x10003,mcasp3_base);
mcasp3_base = ioremap (0x4A003774、4);
值= __raW_readl (mcasp3_base);
(void)__raW_writel (0x4000A、mcasp3_base);
mcasp3_base = ioremap (0x48440216-4);
值= __raW_readl (mcasp3_base);
(void)__raW_writel (value|0x2,mcasp3_base);
/*
*当选择 AHCLK X/R 作为输出时、表示 HCLK 为
*相同的时钟-通过 AUXCLK 提供。
*
McASP->SYSCLK_freq = freq;
//输出:
Pm_runtime_put (McASP->dev);
返回0;
}
am571x-idk.dts 文件:
声音0:声音@0{
兼容="简单音频卡";
simple-audio-card、name ="AM571x";
simple-audio-card、小工具=
"线路"、"线路输出"、
"线路"、"线路输入";
简单音频卡,路由=
"线路输出"、 "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 =<&mcasp3>;
系统时钟频率=<564800>;
};
sound0_master:simple-audio-card、codec{
sound-dai =<&tlv320aic3104>;
时钟=<&clkout2_clk>;
//时钟=<&ATL_clkin2_ck>;
};
};
mcasp3_PINS_DEFAULT:mcasp3_PINS_DEFAULT{
pinctrl-single、pins =<
0x29c ((0x40000)|PIN_OUTPUT 上拉| MUX_MODE3)/* clk2。 *
0x328 ((0xC0000)| MUX_MODE0)/* mcasp3_FSX.McASP1_FSX *
0x324 (((0x40000)| MUX_MODE0)/* mcasp3_aclkx.McASP1_aclkx *
0x32c ((0xC0000)| MUX_MODE0)/* mcasp3_axr0.McASP1_axr0 *
0x330 (((0xC0160)| MUX_MODE0)/* mcasp3_axr1.McASP1_axr1 *
>;
};
i2c1{(&I)
状态="正常";
时钟频率=<400000>;
tlv320aic3104:tlv320aic3104@18{
#sound-di-cells =<0>;
兼容="ti、tlv320aic3104";
reg =<0x18>;
分配的时钟=<&clkoutmux2_clk_mux>;
分配的时钟父节点=<&sys_clk2_dclk_ddiv>;
adc -稳定-ms =<40>;
AVDD-SUPPLY =<&VDD_3V3>;
IOVdd-supply =<&VDD_3V3>;
DRVDD-SUPPLY =<&VDD_3V3>;
DVDD 电源=<&AIC_DVDD>;
状态="正常";
};
};
mcasp3{.m&mcasp3}
#sound-di-cells =<0>;
状态="正常";
pinctrl-0 =<&mcasp3_PINS_DEFAULT>;
分配的时钟=<&mcasp3_ahclkx_mux>;
分配的时钟父级=<&sys_clkin2>;
分配的时钟速率=<22579200>;
OP-MODE =<0>; /* MCASP_IIS_MODE */
TDM-SLOTS =<2>;
/* 4个串行器*/
serial-dir =< /* 0:非活动、1:TX、2:Rx *
1 2 0 0
>;
tx-num-evt =<8>;
Rx-num-evt =<8>;
};
谢谢、此致
Prasad。
波图鲁、您好!
您正使用哪个 AM571x 器件引脚为 AIC3104编解码器 MCLK 输入提供20MHz 的频率? 是 D18 xref_clk0.clkout2还是 B26 xref_clk2.mcasp3_ahclkx?
如果使用 D18 xref_clk0.clkout2、请提供以下寄存器值:
CM_COREAON_CLKOUTMUX2_CLKCTRL
CM_CLKSEL_CLKOUTMUX2
CTRL_CORE_PAD_XREF_CLK0
您可以使用 devmem2工具在用户空间中获取这些寄存器值。
此致、
帕维尔
您好、Pavel、
对于到 AIC3104编解码器的20MHz 时钟信号、MCLK 输入是我们 正在使用的 B26 xref_clk2。
这些是我们在记录 audio.wav 时获得的值
root@am57xx-EVM:~# arecord -d 10 -f cd -t wav audio.wav
录制波'audio.wav':[103.949895] 外壳 SND_SOC_DAIFMT_CBM_CFM
有符号16位小端序、速率44100Hz、立体声
[104.065280] CM_L4PER2_MCASP3_CLKCTRL 7000002
[104.069668] MCASP_AHCLKXCTL 180000
[104.073172] CM_L4PER2_MCASP3_CLKCTRL 7000002
[104.077546]***** PINMUX 值******* /
[104.081659] MCASP3_ACLKX == 40000
[104.081659] MCASP3_FSX = 40000
[104.081659] MCASP3_AXR0 = 40000
[104.081659] MCASP3_AXR1 = 40000
[104.094931] XREF_CLKOUT2 == 10003
[104.098344] XREF_CLKOUT2 =10003
[104.101757]***** McASP3配置 寄存器转储寄存器******* /
root@am57xx-EVM:~#
谢谢、此致
P. Venkata Prasad
Prasad、
[引用 USER="Potturu Venkata Prasad"]对于 AIC3104编解码器的20MHz 时钟信号,MCLK 输入是我们 正在使用的 B26 xref_clk2。
根据我的理解、您正在尝试通过引脚 B26 xref_clk2.mcasp3_ahclkx 提供 AIC3x MCLK。 请注意、在此引脚上、您可以导出 McASP3辅助时钟、使其通过 HCLKXDIV 分频器。 完整的时钟路径为:
DPLL_ABE -> PER_ABE_X1_GFCLK -> MCASP3_AUX_GFCLK -> MCASP3_FCLK (AUXCLK)->分频器 HCLKXDIV -> mcasp3_ahclkx 引脚
[引用用户="Potturu Venkata Prasad"][104.069668] MCASP_AHCLKXCTL 180000[/QUEST]
McASP_AHCLKXCTL[15] HCLKXM 应为1
查看以下 e2e 线程以了解详情:
此致、
帕维尔
您好!
本论坛中讨论的全部内容与 我们使用的电路板相关、而该电路板由我们的高级开发人员使用 ti-processor-sdk-linux-am57xx-evm-02.00.01.07开发。 但现在我们转向 ti-processor-sdk-linux-am57xx-evm-05.02.00.10、我们将面临 MCLK 问题、而不是在该引脚上获得20MHz 的频率、而是50MHz 的频率。 因此、请指导我们需要重点关注哪些内容才能播放音频。
https://e2e.ti.com/support/legacy_forums/embedded/linux/f/354/p/574916/2139528#2139528
我们还会附加修改后的达芬奇文件、请仔细阅读该文件以及我们需要关注的更多内容。
e2e.ti.com/.../8154.davinci_2D00_mcasp.c
谢谢、此致
P. Venkata Prasad。
Prasad、
我建议您在 PSDK v2.00.01.07和 PSDK v5.02.00.10中对 McASP3模块进行寄存器转储。 确保 在 PSDK v2.00.01.07和 PSDK v5.02.00.10之间为 McASP3模块设置相同的寄存器
此致、
帕维尔
您好、Pavel、
感谢您的快速响应。
我们比较了 PSDK v2.00.01.07和 PSDK v5.02.00.10中 McASP3模块的寄存器转储、并发现了以下一些差异。
REG_ADDRESS =48468000,值=44307b03 PSDK v5.02.00.10
REG_ADDRESS =48468000,值=44307b02 PSDK v2.00.01.07
REG_ADDRESS =48468004,值=2. PSDK v5.02.00.10
REG_ADDRESS =48468004,值=1. PSDK v2.00.01.07
REG_ADDRESS =48468084,值=1. PSDK v5.02.00.10
REG_ADDRESS =48468084,值=0 PSDK v2.00.01.07
REG_ADDRESS =484681c4,value =4ec096e0 PSDK v5.02.00.10
reg_address =484681c4,value =c140a2c0 PSDK v2.00.01.07
我们尝试根据下面的 PSDK v2.00.01.07更改 Reg_address 值、但仍然获得50MHz、并且我们获得的 OMAP-hwmod:mcasp3:_wait_target_disable 失败。 请向我们推荐20MHz 所需关注的内容。
静态空 McASP_START_Rx (结构 DaVinci_McASP * McASP)
{
/*启用接收 IRQ */
McASP_SET_BITS (McASP、DaVinci_MCASP_EVTCTLR_REG、
McASP->IRQ_Request[SNDRV_PCM_STREAME_CAPTURE]);
mcasp3_base = ioremap (0x48468000、4);
(void)__raW_writel (0x44307b02、mcasp3_base);
mcasp3_base = ioremap (0x48468004、4);
(void)__raW_writel (0x1,mcasp3_base);
mcasp3_base = ioremap (0x48468084、4);
(void)__raW_writel (0x0、mcasp3_base);
mcasp3_base = ioremap (0x484681c4、4);
(void)__raW_writel (0xc140a2c0、mcasp3_base);
}
谢谢、此致
P. Venkata Prasad。
[引用用户="Potturu Venkata Prasad"]
我们比较了 PSDK v2.00.01.07和 PSDK v5.02.00.10中 McASP3模块的寄存器转储、并发现了以下一些差异。
REG_ADDRESS =48468000,值=44307b03 PSDK v5.02.00.10
REG_ADDRESS =48468000,值=44307b02 PSDK v2.00.01.07
REG_ADDRESS =48468004,值=2. PSDK v5.02.00.10
REG_ADDRESS =48468004,值=1. PSDK v2.00.01.07
REG_ADDRESS =48468084,值=1. PSDK v5.02.00.10
REG_ADDRESS =48468084,值=0 PSDK v2.00.01.07
REG_ADDRESS =484681c4,value =4ec096e0 PSDK v5.02.00.10
reg_address =484681c4,value =c140a2c0 PSDK v2.00.01.07
[/报价]
这些 McASP3寄存器不会影响 mcasp3_ahclkx 频率值。 请提供以下适用于 PSDK 2.00和5.02的寄存器
McASP_Pdir
McASP_GBLCTL
McASP_ACLKXCTL
McASP_AHCLKXCTL
CTRL_CORE_PAD_XREF_CLK2
CM_L4PER2_MCASP3_CLKCTRL
CM_CLKSEL_PER_ABE_X1_GFCLK_MCBSP_AUX
CM_CLKSEL_ABE_PLL_REF
CM_CLKSEL_ABE_PLL_SYS
DPLL_ABE 寄存器:
CM_CLKSEL_DPLL_ABE
CM_CLKMODE_DPLL_ABE
CM_DIV_M2_DPLL_ABE
CM_DIV_M3_DPLL_ABE
CM_AUTOIDLE_DPLL_ABE
CM_IDLEST_DPLL_ABE
此致、
帕维尔
您好、先生、
请查找随附的 PSDK 2.00和5.02寄存器转储值
e2e.ti.com/.../register_5F00_dump.zip
谢谢、此致、
Prasad。
Prasad、
对于 McASP3模块寄存器、应在 McASP 驱动程序的 McASP_START_Rx()函数末尾转储:
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寄存器转储(MCASP_Pdir、MCASP_GBLCTL、MCASP_ACLKXCTL、MCASP_AHCLKXCTL) 和//CM_L4PER2_MCASP3_CLKCTRL
}
我还需要 CM_CLKSEL_SYS 和 CTRL_CORE_BOOTTrap 寄存器的寄存器转储。 您可以使用 devmem2工具获取该值。
此外、我还看到 DPLL_ABE 寄存器在 PSDK v2.00和 v5.02之间具有不同的值。 您需要跟踪源代码并对齐这些寄存器值。
此致、
帕维尔
您好、先生、
请找到以下寄存器转储值。
PSDK05的示例
CM_CLKSEL_SYS
root@am57xx-EVM:~# devmem2 0x4AE06110
/dev/mem 已打开。
映射到地址 bb6f66000的内存。
在地址 0x4AE06110 (bb6f66110)处读取:0x00000002
root@am57xx-EVM:~#
CTRL_CORE_BOOTTrap
root@am57xx-EVM:~# devmem2 0x4A0026C4
/dev/mem 已打开。
映射到地址 bb6fb000的内存。
在地址 0x4A0026C4 (bb6fbb6c4):0x00008122处读取
root@am57xx-EVM:~#
PSDK02的示例
CM_CLKSEL_SYS
root@am57xx-EVM:~# devmem2 0x4AE06110
/dev/mem 已打开。
映射到地址 bb6f93000的内存。
在地址 0x4AE06110 (bb6f93110)上读取:0x00000002
CTRL_CORE_BOOTTrap
root@am57xx-EVM:~# devmem2 0x4A0026C4
/dev/mem 已打开。
映射到地址 bb6fa2000的内存。
在地址 0x4A0026C4 (b6fa26c4):0x00008122处读取
谢谢、此致。
Prasad。
您好、先生、
我们已按如下方式放置寄存器转储值、通过此更改、我们在录制时获得20MHz MCLK、在播放时获得100MHz MCLK。
静态空 McASP_START_Rx (结构 DaVinci_McASP * McASP)
{
…
/*启用接收 IRQ */
McASP_SET_BITS (McASP、DaVinci_MCASP_EVTCTLR_REG、
McASP->IRQ_Request[SNDRV_PCM_STREAME_CAPTURE]);
mcasp3_base = ioremap (0x4A0051EC、4);
(void)__raW_writel (0x00800000、mcasp3_base);
mcasp3_base = ioremap (0x4A0051E0、4);
(void)__raW_writel (0x00000005、mcasp3_base);
mcasp3_base = ioremap (0x4A0051E4、4);
(void)__raW_writel (0x00000002、mcasp3_base);
}
我们在尝试 arecord -d 10 -f cd -t wav audio.wav 时观察到的另一件事是、它在 PSDK_05中的10秒后退出、但在 PSDK_02中持续进行记录、直到我们中断(Control+C)。 这是否会导致任何问题?
谢谢、此致、
Prasad。
Prasad、
CM_CLKSEL_SYS 和 CTRL_CORE_BOOTTrap 寄存器看起来正确。
请在 McASP 驱动程序的 McASP_START_Rx ()函数的末尾提供 McASP3模块寄存器、CM_L4PER2_MCASP3_CLKCTRL 和 DPLL_ABE 寄存器的寄存器转储。
应该存在一些差异。 找到它后、您可以在 PSDK v5.02中开始跟踪源代码、其中该寄存器值已从 PSDK v2.00更改为该源代码
此致、
帕维尔
[引用 user="Potturu Venkata Prasad"]我们已将寄存器转储值如下所示,通过该更改,我们在记录时得到20MHz MCLK,在播放时得到100MHz MCLK。
那么、现在您对音频录制还可以吗?
然后、请在 McASP 驱动程序的 McASP_START_TX ()函数末尾提供 McASP3模块寄存器 CM_L4PER2_MCASP3_CLKCTRL 和 DPLL_ABE 寄存器的寄存器转储。
[引用 user="Potturu Venkata Prasad"]*在尝试 arecord -d 10 -f cd -t wav audio.wav 时,我们观察到的另一件事是,在 PSDK_05中,它在10秒后退出,但在 PSDK_02中,它持续进行记录,直到我们中断(Control+C)。 这是否会导致任何问题?
我认为这对 MCLK 频率没有任何影响。
此致、
帕维尔
您好、先生、
通过以下更改、我们可以在播放和录制时获得20MHz MCLK、但在录制时却可以退出、而不会中断。
在 PSDK02中、只有当我们中断时、它才会退出。
静态空 McASP_START_TX (结构 DaVinci_McASP * McASP)
{
…………
/*启用发送 IRQ */
McASP_SET_BITS (McASP、DaVinci_MCASP_EVTCTLX_REG、
McASP->IRQ_REQUES[SNDRV_PCM_STREPLAY_REPLAY]);
mcasp3_base = ioremap (0x4A009868、4);
值= __raW_readl (mcasp3_base);
printk (Kern_info "CM_L4PER2_MCASP3_CLKCTRL %x\n"、值);
mcasp3_base = ioremap (0x4A0051EC、4);
(void)__raW_writel (0x00800000、mcasp3_base);
mcasp3_base = ioremap (0x4A0051E0、4);
(void)__raW_writel (0x00000005、mcasp3_base);
mcasp3_base = ioremap (0x4A0051E4、4);
(void)__raW_writel (0x00000002、mcasp3_base);
}
静态空 McASP_START_Rx (结构 DaVinci_McASP * McASP)
{
…………
/*启用接收 IRQ */
McASP_SET_BITS (McASP、DaVinci_MCASP_EVTCTLR_REG、
McASP->IRQ_Request[SNDRV_PCM_STREAME_CAPTURE]);
mcasp3_base = ioremap (0x4A009868、4);
值= __raW_readl (mcasp3_base);
printk (Kern_info "CM_L4PER2_MCASP3_CLKCTRL %x\n"、值);
mcasp3_base = ioremap (0x4A0051EC、4);
(void)__raW_writel (0x00800000、mcasp3_base);
mcasp3_base = ioremap (0x4A0051E0、4);
(void)__raW_writel (0x00000005、mcasp3_base);
mcasp3_base = ioremap (0x4A0051E4、4);
(void)__raW_writel (0x00000002、mcasp3_base);
}
root@am57xx-EVM:~# arecord -d 10 -f cd -t wav audio.wav
录制波'audio.wav':[61.650541] 输入 DaVinci_McASP_set_Dai_fmt ()
有符号16位小端序、速率44100Hz、立体声
[61.656009] 案例 SND_SOC_DAIFMT_CBM_CFM
[61.719878] CM_L4PER2_MCASP3_CLKCTRL 7000002
[61.724258] MCASP_AHCLKXCTL 180000
[61.727762] CM_L4PER2_MCASP3_CLKCTRL 7000002
[61.732135] /***** PINMUX 值******* /
[61.736249] MCASP3_ACLKX = 40000
[61.736249] MCASP3_FSX = c0000
[61.736249] MCASP3_AXR0 =c0000
[61.736249] MCASP3_AXR1 = c0000
[61.749523] XREF_CLKOUT2 == 10003
[61.752936] XREF_CLKOUT2 == 10003
[61.756349]/**** McASP3配置 寄存器转储寄存器******* /
[61.761770] DaVinci_MCBSP_Pdir_REG 8000001
超赞!!! (最长400.777ms)[ 72.778083] CM_L4PER2_MCASP3_CLKCTRL 7000002
[72.785277] MCASP_AHCLKXCTL 180000
[72.788780] CM_L4PER2_MCASP3_CLKCTRL 7000002
[72.793153] /**** PINMUX 值******* /
[72.797266] MCASP3_ACLKX == 40000
[72.797266] MCASP3_FSX = c0000
[72.797266] MCASP3_AXR0 =c0000
[72.797266] MCASP3_AXR1 == c0000
[72.810539] XREF_CLKOUT2 == 10003
[72.813953] XREF_CLKOUT2 == 10003
[72.817366] /**** McASP3配置 寄存器转储寄存器******* /
[72.822785] DaVinci_MCBSP_Pdir_REG 8000001
root@am57xx-EVM:~#
有关此问题的任何帮助。
谢谢、此致、
Prasad。
Prasad、
[引用 user="Potturu Venkata Prasad"]通过以下更改,我们可以在播放和录制时获得20MHz MCLK,但在录制时却不会中断。
[引用 user="Potturu Venkata Prasad"] root@am57xx-evm:~ arecord -d 10 -f cd -t wav audio.wav [/quot]
当您使用"-d 10"选项时、您的音频录制过程将在10秒后自动停止。
您好、先生、
我们正在获得20MHz MCLK、但在播放音频时无法获得声音。 请就此提供帮助。
谢谢、此致、
Prasad。
Prasad、
[引用 user="Potturu Venkata Prasad"]我们将获得20MHz MCLK [/引用]
由于此 e2e 线程主题是"mcasp3 MCLK 问题"、我建议您为新问题打开新的 e2e 线程。
此致、
帕维尔