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.

[参考译文] TLV320AIC3106:当编解码器附带外部固定振荡器时的器件树配置

Guru**** 2474360 points
Other Parts Discussed in Thread: AM67A, TLV320AIC3106

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1533971/tlv320aic3106-device-tree-configurations-when-the-codec-is-supplied-with-an-external-fixed-oscillator

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

工具/软件:

在我们的应用中、TLV320AIC3106 编解码器连接了一个外部 12.288MHz 振荡器、然后该编解码器连接到 AM67a SoC 的 McASP0 接口。 请参阅以下器件树摘录。 由于 MCLK 未连接到 SoC McASP 接口、因此编解码器是时钟主器件。

   MAIN_MCASP0_PINS_DEFAULT:MAIN-MCASP0-DEFAULT 引脚{
       pinctrl-single、pins =<
              来自编解码器的 J722S_IOPAD (0x1a4、PIN_INPUT、0)/*(D25) McASP0_ACLKX <- BCLK *
           J722S_IOPAD (0x1a8、PIN_INPUT、 0) /*(C26)  来自编解码器的 McASP0_AFSX <- LRCLK */
           J722S_IOPAD (0x1a0、PIN_OUTPUT、0) /*(F23) McASP0_AXR0  -> TX 到编解码器*/
           J722S_IOPAD (0x19c、PIN_INPUT、 0) /*(B25) McASP0_AXR1  <-来自编解码器的 RX */
       >;
   };

   CLK_AUDIO_osc:CLK-AUDIO-osc{
   兼容=“固定时钟“;
   #clock-cells =<0>;
   时钟频率=<12288000>;
   clock-output-names =“tlv320aic3106-MCLK";“;
   };

   codec_audio:声音{
       compatible =“simple-audio-card";“;
       simple-audio-card、name =“J722S-EVM";“;
       简单音频卡、小工具=
           “耳机“、   “耳机插孔“、
           “线路“、       “线路输入“、
           “麦克风“、   “麦克风插孔“;
       简单音频卡、路由=
           “耳机插孔“、   “HPLOUT",“,</s>、
           “耳机插孔“、   “HPROUT",“,</s>、
           “LINE1L",“,       "Line、"Line In"“ In",“,</s>、
           “LINE1R",“,       "Line、"Line In"“ In",“,</s>、
           “MIC3R",“,"Microphone、"Microphone Jack"“ Jack",“,</s>、        
           “麦克风插孔“、   “麦克风偏置“;
       简单音频卡、格式=“dsp_b";“;
       simple-audio-card、bitclock-master =<&sound_master>;
       simple-audio-card、frame-master =<&sound_master>;
       简单的音频卡,位时钟反转;

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

       sound_master:简单音频卡、编解码器{
           sound-dai =<&tlv320aic3106>;
           Clocks =<&clk_audio_osc>;
       };
   };

   tlv320aic3106:音频编解码器@1b{
       #sound-dai-cells =<0>;
       兼容=“ti、tlv320aic3106“;
       REG =<0x1b>;
       ai3x-micbias-vg =<1>; /* 2.0V */
       AVDD-SUPPLY =<&vCODEC_3V3>;
       IOVDD-SUPPLY =<&vCODEC_3V3>;
       DRVDD-SUPPLY =<&vCODEC_3V3>;
       DVDD-SUPPLY =<&vCODEC_1v8>;

   };  

&McASP0{
   状态=“正常“;
   #sound-dai-cells =<0>;
   pinctrl-names =“default";“;
   pinctrl-0 =<&MAIN_McASP0_pins_default>;
   OP-MODE =<0>;/* MCASP_IIS_MODE */
   TDM 时隙=<2>;
   serial-dir =</* 0:不活动、1:TX、2:Rx */
          1 0 2 0
          0 0 0 0
          0 0 0 0
          0 0 0 0
   >;
};   

检测到编解码器、并且可以看到用于 aplay -l 命令的声卡、

root@j722s-evm:/home/root avplay -l
****播放硬件设备列表****
卡 0:虚拟[Dummy]、设备 0:虚拟 PCM [Dummy PCM]
 副装置:8/8.
 SUBDEVICE #0:SUBDEVICE #0
 SubDevice #1:SubDevice #1
 SubDevice #2:SubDevice #2
 SUBDEVICE #3:SUBDEVICE #3
 SUBDEVICE #4:SUBDEVICE #4
 SUBDEVICE #5:SUBDEVICE #5
 SUBDEVICE #6:SUBDEVICE #6
 SUBDEVICE #7:SUBDEVICE #7
卡 1:回送【回送】、设备 0:回送 PCM [回送 PCM]
 子设备:7/8
 SUBDEVICE #0:SUBDEVICE #0
 SubDevice #1:SubDevice #1
 SubDevice #2:SubDevice #2
 SUBDEVICE #3:SUBDEVICE #3
 SUBDEVICE #4:SUBDEVICE #4
 SUBDEVICE #5:SUBDEVICE #5
 SUBDEVICE #6:SUBDEVICE #6
 SUBDEVICE #7:SUBDEVICE #7
卡 1:回送【回送】、设备 1:回送 PCM [回送 PCM]
 副装置:8/8.
 SUBDEVICE #0:SUBDEVICE #0
 SubDevice #1:SubDevice #1
 SubDevice #2:SubDevice #2
 SUBDEVICE #3:SUBDEVICE #3
 SUBDEVICE #4:SUBDEVICE #4
 SUBDEVICE #5:SUBDEVICE #5
 SUBDEVICE #6:SUBDEVICE #6
 SUBDEVICE #7:SUBDEVICE #7
卡 2:J722SEVM [J722S-EVM]、器件 0:2b00000.audio-controller-tlv320aic3x-hifi tlv320aic3x-hifi-0 [2b00000.audio-controller-tlv320aic3x-hifi tlv320aic3x-hifi-0]
 子设备:1/1
 SUBDEVICE #0:SUBDEVICE #0

但是、当播放文件时、会抛出错误。

root@j722s-evm:/home/root、avplay -D plughw:2、0 test.wav   
播放 wave 'test.wav ':有符号 16 位小端字节序,速率 44100 Hz,立体声
aplay:pcm_write:2178:写入错误:输入/输出错误

启用调试后、以下内容会打印到 dmesg

[Jun30 09:47] 2b00000.audio-controller-tlv320aic3x-hifi: ASOC:tlv320aic3x-hifi <-> 2b00000.audio-controller 信息:
[ +0.011289] 2b00000.audio-controller-tlv320aic3x-hifi: ASOC:速率掩码 0x7fe
[ +0.007870] 2b00000.audio-controller-tlv320aic3x-hifi: ASOC:通道  最小值 2 最大值 2
[ +0.008033] 2b00000.audio-controller-tlv320aic3x-hifi: ASOC:速率最小 8000 最大 96000
[ +0.01031] tlv320aic3x 3-001b:更新 tlv320aic3x-hifi 播放的 DAI 路由
[ +0.008084]用于 2b00000.audio-controller 播放的 DaVinci -McASP 2b00000.audio-controller:更新 DAI 路由
[ +0.642632] ASOC-simple-card 声音:回放写入超时(DMA 或 IRQ 故障?)
[+0.671987] ASOC-simple-card sound:回放写入超时 (DMA 或 IRQ 故障?)
[ +5.215939] 2b00000.audio-controller-tlv320aic3x-hifi: ASOC:Pop wq 检查:播放状态:不活动等待:是

请建议我们的配置中缺少的内容。

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

    您好、

    为延迟道歉、我们的 Linux 专家将很快更新此主题

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

    Hi Hiran:

    您在 McASP0 上看到什么时钟? 与 BCLK/WCLK 一样、您是否还可以提供 McASP0 的寄存器转储?

    调试日志显示速率为 7fe。

    此致、

    Suren

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

    您好、Suren、

    目前这是设置->

    McASP0_ACLKX D25 BCLK
    McASP0_AFSX C26 WCLK
    McASP0_AXR1 B25 DIN
    McASP0_AXR0 F23 DOUT

    不路由 MCLK。

    编解码器 MCLK 由 KC2520Z12.2880C1KX00 提供、该振荡器是一个未连接到 SoC 的外部振荡器。

    您能否详细说明一下您所说的寄存器转储是什么意思? 是否想要相关寄存器的 devmem 输出?

    KR、

    Hiran

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

    是的、Hiran、McASP0 寄存器的 devmem2 输出应该可以帮助我们了解可能出现的问题。

    发出 aplay 命令时、您在 D25 和 C26 上看到的是 BCLK 或 WCLK 的值是多少?  

    此致、

    Suren

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

    你好 Suren、我尝试使用示波器测量时钟。

    但是、当运行该命令时、两条线路上都没有任何 CLK 信号。

    此外、devmem2 出现故障、并出现以下错误-

    root@j722s-evm:/home/root、devmem2 0x02B00000 w
    /dev/mem 已打开。
    映射到地址 0xffff8fa3f000 的存储器。
    总线错误(核心转储)

    我尝试设置 strict_DEVMEM=n 并重新编译内核、结果仍然是相同的。

    (IO_strict_DEVEM [=n] 、strict_DEVMEM [=n])

    KR、

    Hiran

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

    看起来编解码器没有向 MCASP 提供相关时钟、这就是 devmem2 也失败的原因。

    您能否确认编解码器侧的时钟?  

    此致、

    Suren

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

    Hello Suren,编解码器应提供哪些时钟 — WCLK 和 BCLK? 请原谅我的无知。 我不熟悉 McASP。

    KR、

    Hiran

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

    刚刚检查过、没有从编解码器接收到 BCLK/WCLK。 什么可能是罪魁祸首? 没有其他消息打印到 dmesg。 我们是否可以启用任何其他调试日志?

    KR、

    Hiran

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

    您是否已验证编解码器上来自外部振荡器的 MCLK 正确?  如果未 将 MCLK 正确提供给编码的、则编解码器不会生成 BLCK 和 WCLK。  

    此致、

    Suren

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

    是的、外部晶体的 MCLK 似乎很好。  

    在编解码器 MCLK 引脚上测得。

    KR、

    Hiran

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

    您能否说明为什么没有从编解码器生成 BCLK 和 WCLK?  

    此致、

    Suren

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

    请在下面找到编解码器的 regdump、这是在手动取消绑定驱动程序后执行的。

    e2e.ti.com/.../tlv320_5F00_regdump.txt

    是否有任何错误配置? 这由 tlv320aic3x 内核驱动程序绑定和配置。

    KR、

    Hiran

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

    由于驱动程序未绑定、上述问题可能出现故障、请在操作过程中通过 regmap(全部 110 个寄存器)通过/sys/kernel/debug/regmap/3-001b/registers 查找编解码器寄存器转储

    e2e.ti.com/.../tlv320_5F00_regmap_5F00_dump.txt

    KR、

    Hiran

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

    Hi Hiran:

    让我将您的问题发送给我们的音频团队、以获得进一步支持、了解您为什么看不到由编解码器生成的 BCLK 和 WCLK。

    此致、

    Suren

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

    您好、Suren、

    感谢您的帮助。

    KR、

    Hiran

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

    Hi Hiran:

    我看到的第一个问题是采样率为 44.1kHz(使用寄存器 7 设置)而不是 48kHz、因此如果您的 MCLK 为 12.288MHz、44.1k 和 12.288MHz 之间没有整数关系。 器件中的时钟树要求输入时钟是 fsref 的 256 倍、因此如果您在寄存器 0x07 中将其切换到 48kHz、它应该会解决该问题、并且时钟将能够生成。 如果您确实需要 44.1kHz 采样率、我们可以配置 PLL、也可以生成。 通常、44.1kHz 是计算机的默认采样率、看看您是否可以将 Linux 系统更改为以 48K 的速率运行、将 DTS 文件更改为默认值 48K、以便驱动程序发生更改、或以 48K 等速率回放文件 请告诉我您可以更改的内容。  

    此致、
    Mir