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.

[参考译文] TLV320AIC3100:tlv320aic31xx-codec 1-0018:无法复位器件:-6

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1400355/tlv320aic3100-tlv320aic31xx-codec-1-0018-could-not-reset-device--6

器件型号:TLV320AIC3100

工具与软件:

大家好!

我将在我们的项目中使用"TLV320AIC3100"。 我将"IMX8MM"与 Linux 内核5.4.70配合使用。 我能够探测编解码器驱动程序。 下面是我的 dmesg 日志。

[    4.267295] asoc-simple-card sound-tlv320aic: tlv320aic31xx-hifi <-> 30030000.sai mapping ok
[    4.275771] asoc-simple-card sound-tlv320aic: ASoC: no DMI vendor name!
[    4.286372] tlv320aic31xx-codec 1-0018: Could not reset device: -6

我的 dts 文件如下所示。

  sound-tlv320aic {
    compatible = "simple-audio-card";
    simple-audio-card,name = "tlv320aic-audio";
    simple-audio-card,format = "i2s";
    simple-audio-card,frame-master = <&cpudaitlv>;
    simple-audio-card,bitclock-master = <&cpudaitlv>;
    simple-audio-card,widgets =
        "Microphone", "Microphone Jack",
        "Line", "Line In Jack",
        "Line", "Line Out Jack",
        "Headphone", "Headphone Jack",
        "Speaker", "Speaker Jack";
    simple-audio-card,routing =
        "Headphone Jack", "HPL",
        "Headphone Jack", "HPR",
        "MIC1LM","Microphone Jack",
        "MIC1RP","Microphone Jack",
        "MIC1LP","Microphone Jack",
        "Speaker Jack", "SPK";

    cpudaitlv: simple-audio-card,cpu {
      sound-dai = <&sai3>;
      clocks = <&clk IMX8MM_CLK_SAI3_ROOT>;
      dai-tdm-slot-num = <2>;
      dai-tdm-slot-width = <32>; 
    };

    simple-audio-card,codec {
        sound-dai = <&tlv320aic>;
        clocks = <&clk IMX8MM_CLK_SAI3_ROOT>;
    };
  };

&i2c2 {
    clock-frequency = <400000>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_i2c2>;
    status = "okay";

  tlv320aic: tlv320aic@18 {
    #sound-dai-cells = <0>;
    compatible = "ti,tlv320aic3100";
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_gpio_wlf>;
    ti,reset-gpio = <&gpio3 0 GPIO_ACTIVE_LOW>;
    reg=<0x18>;
    ai31xx-micbias-vg = <MICBIAS_2_0V>;
    status = "okay";
  };
};

&sai3 {
    #sound-dai-cells = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_sai3>;
    assigned-clocks = <&clk IMX8MM_CLK_SAI3>;
    assigned-clock-parents = <&clk IMX8MM_AUDIO_PLL2_OUT>;
    assigned-clock-rates = <11289600>;
    status = "okay";
};

pinctrl_gpio_wlf: gpiowlfgrp {
        fsl,pins = <
            MX8MM_IOMUXC_NAND_ALE_GPIO3_IO0     0xd6
        >;
};

我将 PLL2用于频率为"11289600"的 SAI3根时钟。 我还在"tlv320aic31xx.c"中添加了电流频率的 PLL 参数 、如下所示:

{11289600,  44100,  8, 0,   128,   8,  2,   128,   8,  2},

您能帮助我解决重置错误吗?

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

    您好!

    如果使用您的 PLL 时钟输入频率、您应该不需要此器件的 PLL。 通过为 TLV320AIC3100使用 CodecControl 软件、看起来您可以关闭 PLL 并使用 NADC=1、mAdc=2、AOSR=128、NDAC=1、MDAC=2、 DOSR= 128和 fsDAC=44100 (正如您已指定的)。 哪个函数获取您写出的 PLL 参数? 由于存在时钟错误、器件很可能无法启动。

    请告诉我您是否能够更改设置以关闭 PLL 并设置这些设置、或者您是否需要更多帮助。

    此致!
    MIR

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

    嗨、Mir、

    感谢您的回复。 我将尝试关闭片上 PLL、并告知您结果。

    谢谢!

    Ajita

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

    嗨、Mir、

    您能指导我关闭片上 PLL 吗? Linux 5.4.70内核具有一个调用"aic31xx_hw_params"函数的 tlv320aic31xx.c 驱动程序。 它始终设置在片上 PLL 上。

    谢谢!
    Ajita

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

    Ajita、您好!

    我明白您的意思了。 您能否将不使用的 PLL 参数设置为1? 这样他们就不会对时钟进行分频。 或者、您可以在内核完成参数设置后发送 I2C 命令。

    此致!
    MIR

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

    MI MIR、

    Linux PLL 无法设置为44100、因为它的频率非常低。 因此、我需要使用片上 PLL 本身。 您能否验证我的片上 PLL 参数、{11289,600,441 00 、8、0、   128、  8、 2128    、8、  2}? 11289600是主机 PLL 频率。

    谢谢!

    Ajita

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

    Ajita、您好!

    此列表对应哪些 PLL 参数? 我要寻找 P、R、J、D、K、 或时钟分频器输入时钟。 如果 P=2、R=8、J=8且 D=0、这应该能满足 FS = 44.1kHz 的要求。 要计算 PLL 是否有效、您可以使用此处提供的 PLL 计算器工具: https://e2e.ti.com/support/audio-group/audio/f/audio-forum/946529/faq-i-need-help-configuring-the-pll-on-my-audio-codec-adc-is-there-an-easy-way-to-do-so

    抱歉、我不知道您的 PLL 参数数组的来源。 您能否提供更多有关它的背景信息、例如您调用它的位置?

    此致!
    MIR

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

    嗨、Mir、


    感谢您指出 PLL 计算器工具。 使用工具后我的参数:

    PLL_CLKIN 11.289600 MHz、P=1、R=1、J=8、D=0、 NADC= 2、mAdc=8、AOSR=128、NDAC=2、MDAC=8、 DOSR= 128

    该设置满足所有 PLL 条件、以达到 DAC_FS 并将 ADC_FS 设置为"44100"Hz"。 但仍然出现复位问题。

    此处显示"tlv320aic31xx.c"驱动程序代码

    谢谢!

    Ajita

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

    好的、感谢您向我展示这部分代码、抱歉我以前没看到过。 看起来器件需要列表中的这些阵列之一。 因此、您可以在此部分中选择其中一行:

      /* 44.1k 速率*/
      {12000,000,441 00、 75265264128、    8、 2128   、8、2}、
      {12000,000,441 00、 84674672128  、  6、 3128   、6、3}、
      
    阵列的参数如下:
      /* MCLK/p  速率 PLL:j  d    dosr ndac MDAC aors nadc mAdc */
    似乎该器件可能只有两种可能的时钟速度、因此您可以选择最接近您的预期的时钟速度、即12000000或12MHz。 如果您尝试执行以下任一操作、它能解决您的问题吗?
    此致!
    MIR
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Mir、

    我们可以根据数据表修改驱动程序代码中的阵列列表。 我的 PLL_CLKIN 无法设置为12MHz。 可设置为11289600Hz 或其倍数。 在这种情况下、您能帮助我吗?

    谢谢!

    Ajita

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

    好的、您的错误可能不是由 时钟 问题引起的。 您是否有更详细的错误日志? 如果代码的哪个部分正在运行、但显示无法重置器件、有什么想法吗? 您要执行哪些步骤来连接设备、或许我可以尝试重新创建它们?

    很抱歉、我不是 Linux 专家。 我们的团队很快会有一位 Linux 音频驱动程序专家、如果我无法解决您的问题、他们会提供帮助。

    此致!
    MIR

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

    嗨、Mir、

    我当时正在经历 tlv320dac3100 。 它具有写入的初始化序列、通过该序列可以使用 I2C 命令配置 DAC。 我可以使用它在 TLV320AIC3100上播放音频。 它确认 IC 处于工作状态、需要在使用前进行配置。 您能为 ADC 提供类似的初始化序列吗? 我想启用麦克风功能。

    谢谢!

    Ajita

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

    您好!

    您可以下载"SLAC366a" CodecControl 软件以初始化器件并将初始化序列记录为 I2C 命令。 以下是一些用于初始化器件的 DAC 和 ADC 路径的示例代码、摘自以下 E2E 文章:

    #------------------ 选择第0页
    W 30 00 00 00
    # s/w reset
    W 30 01 01 01
    # PLL_CLKIN = BCLK、CODEC_CLKIN = PLL_CLK
    W 30 04 07
    W 30 05 91
    W 30 06 20.
    W 30 07 00
    W 30 08 00
    #模式为 I2S、字长为16
    W 30 1b 00
    # NDAC 已上电并设置为4
    第84章我是谁
    # MDAC 已通电并设置为4
    第84章我是谁
    第84章我是谁
    第84章我是谁
    # DOSR = 128、DOSR (9:8)= 0
    W 30 14 00
    # DOSR (7:0)= 128
    W 30 15 80
    #计时结束于此处
    #
    # DAC =>通过引脚禁用音量控制
    W 30 74 00
    # DAC => DRC disable、th 和 hy
    W 30 44 00
    # DAC => 0 db gain left
    W 30 41 00
    # DAC => 0 db gain right
    W 30 42 00
    #------------------ 选择第1页
    W 30 00 01
    #去 POP 音、上电= 800ms、步进时间= 4ms
    W 30 21 4e.
    # HPL 和 HPR 已上电
    W 30 1f c2.
    # LDAC 路由到 HPL、RDAC 路由到 HPR
    西30 23 44.
    # HPL 取消静音并增益1dB
    W 30 28 0e.
    # HPR 取消静音并增益1dB
    > 0e
    # HP 上没有衰减
    W 30 24 00
    W 30 25 00

    # MIC BIAS = AVDD
    宽30 2e 0b
    # MICPGA P = MIC 10k
    W 30 30 40
    # MICPGA M - CM 10k
    > 40.
    #------------------ 选择第0页
    W 30 00 00 00
    #选择 DAC DSP 模式11并启用自适应滤波器
    宽30 3c 0b
    W 30 00 08
    W 30 01 04
    W 30 00 00 00
    # powerup DAC 左右声道(软步进禁用)
    宽30 3f d6
    #取消 DAC 左右通道的静音
    W 30 40 00
    #为 ADC channel 加电
    W 30 51 80
    #撤消 ADC 通道的静音
    W 30 52 00
    #------------------ 选择第1页
    W 30 00 01
    #取消 D 类左侧静音
    宽302a 1c
    #取消 D 类右静音
    宽30 2b 1c
    #启动 D 类驱动程序
    W 30 20 C6
    #将 MIC1LP 和 MIC1RP 连接到扬声器输出
    西30 23 54
    第74章我是谁
    #将模拟衰减器设置为 D 类输出0dB
    # GUI 记录了两次相同的写入
    #可能在 GUI 中有一个错误,但我留下它是必要的
    W 30 26 00
    W 30 26 00