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.

[参考译文] TLV320AIC3110:在 tlv320aic3110上单击声音

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1174790/tlv320aic3110-click-sound-on-tlv320aic3110

器件型号:TLV320AIC3110

大家好、我正在尝试将 tlv320aic3110集成到 stm32mp135板中。 到目前为止、我已经使它能够将芯片识别为声卡:

~# aplay -l

**** List of PLAYBACK Hardware Devices ****

card 0: MySound [MySound], device 0: 44004000.audio-controller-tlv320aic31xx-hifi tlv320aic31xx-hifi [44004000.audio-controller-tlv320aic31xx-hifi tlv320aic31xx-hifi]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

我已经为器件树编写了以下内容:

sound0: sound@0 {
    compatible = "simple-audio-card";
    simple-audio-card,name = "MySound";
    simple-audio-card,widgets =
        "Microphone", "Microphone Jack",
        "Headphone", "Headphone Jack",
        "Speaker", "Speaker";
    simple-audio-card,routing =
        "MIC1LP", "Microphone Jack",
        "MIC1RP", "Microphone Jack",
        "MIC1LP", "MICBIAS",
        "MIC1RP", "MICBIAS",
        "Headphone Jack", "HPL",
        "Headphone Jack", "HPR",
        "Speaker", "SPL",
        "Speaker", "SPR";
    simple-audio-card,format = "i2s";
    simple-audio-card,bitclock-master = <&sound0_master>;
    simple-audio-card,frame-master = <&sound0_master>;
    simple-audio-card,bitclock-inversion;

    simple-audio-card,cpu {
        sound-dai = <&i2s1>;
        system-clock-frequency = <12000000>;
    };

    sound0_master: simple-audio-card,codec {
        sound-dai = <&codec>;
        system-clock-frequency = <12000000>;
    };
};

...

&pinctrl {
	codec_pins_a: codec_pins_a {
		pins1 {
			pinmux = <STM32_PINMUX('F', 8, GPIO)>;	/* AUDIO_PWR_EN1 */
			bias-pull-up;
		};

		pins2 {
			pinmux = <STM32_PINMUX('F', 6, GPIO)>;	/* RESET */
			bias-disable;
		};

		pins3 {
			pinmux = <STM32_PINMUX('A', 3, AF5)>,	/* I2S1_SDO */
					 <STM32_PINMUX('A', 6, AF5)>,	/* I2S1_SDI */
					 <STM32_PINMUX('B', 1, AF5)>,	/* I2S1_BITCLK / I2S1_CK */
					 <STM32_PINMUX('B', 0, AF5)>,	/* I2S1_WORDCLK / I2S1_MCK */
					 <STM32_PINMUX('D',  9, AF13)>,	/* CLK1_A / LCD_CLK */
					 <STM32_PINMUX('B', 10, GPIO)>;	/* K81_AUD_MUTE */
		};
    };
};

&i2s1 {
	// pinctrl-names = "default";
	// pinctrl-0 = <&i2s1_pins>;
	status = "okay";
	#clock-cells = <0>;
	clock-names = "pclk", "i2sclk", "x8k", "x11k";
	clocks = <&rcc SPI5>,
			 <&rcc SPI1_K>,
			 <&rcc SAI1_K>,
			 <&rcc SAI2_K>;
};

&i2c1 {
    codec: codec@18 {
        compatible = "ti,tlv320aic3110";
        reg = <0x18>;
        // pinctrl-names = "default";
        pinctrl-0 = <&codec_pins_a>;
        #sound-dai-cells = <0>;
        status = "okay";

        system-clock-frequency = <100000>;

        ai31xx-micbias-vg = <MICBIAS_2_0V>;

        reset-gpios = <&gpiof 6 GPIO_ACTIVE_LOW>;

        /* Regulators */
        HPVDD-supply = <&scmi_v3v3_sw>;
        SPRVDD-supply = <&scmi_vdd_usb>;
        SPLVDD-supply = <&scmi_vdd_usb>;
        AVDD-supply = <&scmi_v3v3_sw>;
        IOVDD-supply = <&scmi_v3v3_sw>;
        DVDD-supply = <&scmi_v1v8_periph>;
    };
};

修改amixer/中显示的参数后alsamixer、我终于能够听到一些声音、但在我尝试播放 wav 文件或speaker-test命令后、这只是一个短暂的"咔嗒"声。 顺便说一下、两个命令都保持"被阻止"。 如果我在计算机上运行它们、则播放声音、然后自行关闭、在板上、它们将保持执行状态、直到我手动停止它们。

这里也是我amixer的输出:

Simple mixer control 'Speaker Analog',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 127
  Mono:
  Front Left: Playback 127 [100%] [0.00dB]
  Front Right: Playback 127 [100%] [0.00dB]
Simple mixer control 'Speaker Driver',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 3
  Mono:
  Front Left: Playback 3 [100%] [24.00dB] [on]
  Front Right: Playback 3 [100%] [24.00dB] [on]
Simple mixer control 'Speaker Left',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Speaker Right',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Mic PGA',0
  Capabilities: cvolume cvolume-joined
  Capture channels: Mono
  Limits: Capture 0 - 119
  Mono: Capture 119 [100%] [59.50dB]
Simple mixer control 'ADC',0
  Capabilities: cvolume cvolume-joined cswitch cswitch-joined
  Capture channels: Mono
  Limits: Capture 0 - 64
  Mono: Capture 64 [100%] [12.00dB] [on]
Simple mixer control 'ADC Fine',0
  Capabilities: cvolume cvolume-joined
  Capture channels: Mono
  Limits: Capture 0 - 4
  Mono: Capture 4 [100%] [0.40dB]
Simple mixer control 'DAC',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 175
  Mono:
  Front Left: Playback 175 [100%] [24.00dB]
  Front Right: Playback 175 [100%] [24.00dB]
Simple mixer control 'DAC Left Input',0
  Capabilities: enum
  Items: 'Off' 'Left Data' 'Right Data' 'Mono'
  Item0: 'Mono'
Simple mixer control 'DAC Right Input',0
  Capabilities: enum
  Items: 'Off' 'Right Data' 'Left Data' 'Mono'
  Item0: 'Mono'
Simple mixer control 'HP Analog',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 127
  Mono:
  Front Left: Playback 127 [100%] [0.00dB]
  Front Right: Playback 127 [100%] [0.00dB]
Simple mixer control 'HP Driver',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 9
  Mono:
  Front Left: Playback 9 [100%] [9.00dB] [on]
  Front Right: Playback 9 [100%] [9.00dB] [on]
Simple mixer control 'HP Left',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'HP Output Driver Power-On time',0
  Capabilities: enum
  Items: '0us' '15.3us' '153us' '1.53ms' '15.3ms' '76.2ms' '153ms' '304ms' '610ms' '1.22s' '3.04s' '6.1s'
  Item0: '6.1s'
Simple mixer control 'HP Output Driver Ramp-up step',0
  Capabilities: enum
  Items: '0ms' '0.98ms' '1.95ms' '3.9ms'
  Item0: '3.9ms'
Simple mixer control 'HP Right',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'MIC1LM M-Terminal',0
  Capabilities: enum
  Items: 'Off' 'FFR 10 Ohm' 'FFR 20 Ohm' 'FFR 40 Ohm'
  Item0: 'FFR 10 Ohm'
Simple mixer control 'MIC1LM P-Terminal',0
  Capabilities: enum
  Items: 'Off' 'FFR 10 Ohm' 'FFR 20 Ohm' 'FFR 40 Ohm'
  Item0: 'FFR 10 Ohm'
Simple mixer control 'MIC1LP P-Terminal',0
  Capabilities: enum
  Items: 'Off' 'FFR 10 Ohm' 'FFR 20 Ohm' 'FFR 40 Ohm'
  Item0: 'FFR 10 Ohm'
Simple mixer control 'MIC1RP P-Terminal',0
  Capabilities: enum
  Items: 'Off' 'FFR 10 Ohm' 'FFR 20 Ohm' 'FFR 40 Ohm'
  Item0: 'FFR 10 Ohm'
Simple mixer control 'Output Left From Left DAC',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Output Left From MIC1LP',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Output Left From MIC1RP',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Output Right From MIC1RP',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Output Right From Right DAC',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Volume Soft Stepping',0
  Capabilities: enum
  Items: 'fast' 'slow' 'disabled'
  Item0: 'fast'

i2cdump我的输出:

~# i2cdump -f -y 0 0x18
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 00 01 56 03 91 07 14 90 00 00 90 82 00 80 80    ..?V?????..??.??
10: 08 00 90 82 80 80 04 00 00 00 01 0c 00 08 88 00    ?.?????...??.??.
20: 00 00 00 00 80 33 11 00 00 00 00 00 00 00 00 00    ....?3?.........
30: 00 00 00 02 32 12 03 02 02 11 10 00 01 04 00 3c    ...?2??????.??.<
40: 0c 30 30 00 6f 38 00 00 00 00 00 ee 10 d8 7e e3    ?00.o8.....???~?
50: 00 00 00 28 00 00 00 00 7f 00 00 00 00 00 00 00    ...(....?.......
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 54 00 00 00 00 00 00 00 00 00 00    .....T..........
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

您能否检查一下我是否做了一些错误的事情、对吧? 如果您需要更多信息、请告诉我

谢谢你

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

    您好!

    我们的音频专家将在假期外出、并将于11月28日返回。 请耐心等待、因为回复会延迟。

    谢谢、

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

    从 i2cdump 中、DAC 和 ADC 均断电。

    请参阅随附的 i2cdump 中的注释。  

    e2e.ti.com/.../i2cdump.txt

    MCLK 是12MHz 吗?

    您可以从该网站下载 PLL 计算器。

    https://www.ti.com/product/TLV320AIC3110

    我已在单元格中输入您的当前设置、如果44.1kHz 是采样率、请将 NDAC 和 NADC 更改为8、如图所示、并将寄存器0x1D 更改为0x00、而不是0x08。

    这仅配置数字端、编解码器将为 BCLK 提供44.1kHz WCLK 和1.4112MHz

    请再次检查您的寄存器设置、以确保您配置正确的路径。

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

    您好!

    您知道如何将寄存器从修改0x1D0x080x00。 这是在器件树中完成的吗? 我已经尝试使用该命令i2cset -f -y 0 0x18 0x1d 0x00,但在重新启动电路板后,该值会返回到以前的状态。

    此外,使用amixer,我启用了 DAC 和 ADC,但显然这还不够。 您还能解释一下我如何启用这两个选项吗?

    谢谢你。

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

    我不是 Linux 专家、因此我将请 Shenghao 提供指导。

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

    您是否尝试了"aplay xxx.wav"而不是 speaker-test 命令? 您可以与我共享 wav 文件吗?

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

    你(们)好

    我认为音频路由可以在回放或录制过程中自动启用 DAC 或 ADC。

    您能告诉我您在播放或录制过程中使用了哪些命令吗? 播放期间、请使用长音频剪辑、并使用示波器捕捉 I2S 时钟。 还会与我分享 I2S 时钟波形?

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

    您好!

    很抱歉、等了一会儿、我和我的同事尝试了一些操作来正确获取波形。

    我们的 MCLK 为10MHz、而不是12MHz。 我忘记对此作出回应。

    我们正在尝试播放这个 wav 文件:

    /cfs-file/__key/communityserver-discussions-components-files/6/CantinaBand3.wav

    以下是波形:

    MCLK (黄色) DIN (粉色)

    WCLK (黄色) BCLK (粉色)

    WCLK (黄色) DIN (粉色)

    ~# aplay /mnt/usb/CantinaBand3.wav &
    ~# Playing WAVE '/mnt/usb/CantinaBand3.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
    
    ~#
    ~# i2cdump -f -y 0 0x18
    No size specified (using byte-data access)
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: 00 00 01 56 03 91 08 12 40 00 00 8f 82 00 80 80    ..?V????@..??.??
    10: 08 00 85 86 80 80 04 00 00 00 01 0c 00 0c 88 00    ?.?????...??.??.
    20: 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00    ....?...........
    30: 00 00 00 02 32 12 03 02 02 11 10 00 01 04 00 14    ...?2??????.??.?
    40: 00 d8 d8 00 6f 38 00 00 00 00 00 ee 10 d8 7e e3    .??.o8.....???~?
    50: 00 00 80 00 00 00 00 00 7f 00 00 00 00 00 00 00    ..?.....?.......
    60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    70: 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00    .....?..........
    80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
    f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

    如果您需要其他信息、请告诉我。

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

    i2cdump 显示 DAC (寄存器63 (0x3F))和 ADC 均已断电。

    您是否尝试启用 DAC?

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

    请使用示波器获取 I2C 和 I2S 序列。 我想知道 I2S clk 是否早于代码工作? 理论上、I2S 必须早于上的代码。

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

    您好!

    我使用启用了 DAC 和 ADCamixer。 这还不够吗? 如果没有、我如何启用它们? 这是在器件树中还是在其他地方完成的?

    Simple mixer control 'ADC',0
      Capabilities: cvolume cvolume-joined cswitch cswitch-joined
      Capture channels: Mono
      Limits: Capture 0 - 64
      Mono: Capture 24 [38%] [-8.00dB] [on]
    Simple mixer control 'ADC Fine',0
      Capabilities: cvolume cvolume-joined
      Capture channels: Mono
      Limits: Capture 0 - 4
      Mono: Capture 4 [100%] [0.40dB]
    Simple mixer control 'DAC',0
      Capabilities: pvolume
      Playback channels: Front Left - Front Right
      Limits: Playback 0 - 175
      Mono:
      Front Left: Playback 175 [100%] [24.00dB]
      Front Right: Playback 175 [100%] [24.00dB]
    Simple mixer control 'DAC Left Input',0
      Capabilities: enum
      Items: 'Off' 'Left Data' 'Right Data' 'Mono'
      Item0: 'Left Data'
    Simple mixer control 'DAC Right Input',0
      Capabilities: enum
      Items: 'Off' 'Right Data' 'Left Data' 'Mono'
      Item0: 'Right Data'

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

    尊敬的

    这话什么意思? 您能否澄清一下您对"代码工作"的看法?

    谢谢你。

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

    您好!

    根据您共享的 wav 文件、其属性如下、

    您是使用16位48kHz 还是44.1kHz 立体声 wav 文件。 并再次进行测试?

    还有一件事。 根据您的波形、我找不到 bck 的频率。 我可以发现 WS clk 的频率为22.05。

    我想向您检查的另一件事是 aic3110是否设置为主编解码器?

    一般
    完整名称:C:\Users\haodi\Desktop\CantinaBand3.wav
    格式:Wave
    文件大小:129 KiB
    持续时间:3s 0ms
    整体比特率模式:常量
    总比特率:353kb/s

    音频
    格式:PCM
    格式设置,字节序:小
    格式设置,签名:已签名
    编解码器 ID:1.
    持续时间:3s 0ms
    比特率模式:常量
    比特率:352.8 kb/s
    频道:1个频道
    采样率:22.05kHz
    位深度:16位
    流大小:129 KiB (100%)

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

    如何检查 aic3110是否设置为主编解码器?

    关于 BCK 的频率、这是否与我发送的第二幅图像中显示的频率不同?

    WCLK (黄色) BCLK (粉色)

    关于再次测试、我已将原始 wav 文件转换为48KHz 立体声、我将收到此错误:

    ~# aplay 48ECantinaBand3.wav 
    Playing WAVE '48ECantinaBand3.wav' : Signed 16 bi[  166.185832] tlv320aic31xx-codec 0-0018: aic31xx_setup_pll: Sample rate (48000) and format not supported
    [  166.195482] tlv320aic31xx-codec 0-0018: ASoC: error at snd_soc_dai_hw_params on tlv320aic31xx-hifi: -22
    [  166.204394]  44004000.audio-controller-tlv320aic31xx-hifi: ASoC: soc_pcm_hw_params() failed (-22)
    t Little Endian, Rate 48000 Hz, Stereo
    aplay: set_params:1416: Unable to install hw params:
    ACCESS:  RW_INTERLEAVED
    FORMAT:  S16_LE
    SUBFORMAT:  STD
    SAMPLE_BITS: 16
    FRAME_BITS: 32
    CHANNELS: 2
    RATE: 48000
    PERIOD_TIME: (42666 42667)
    PERIOD_SIZE: 2048
    PERIOD_BYTES: 8192
    PERIODS: 4
    BUFFER_TIME: (170666 170667)
    BUFFER_SIZE: 8192
    BUFFER_BYTES: 32768
    TICK_TIME: 0

    这是文件:

    /cfs-file/__key/communityserver-discussions-components-files/6/48ECantinaBand3.wav

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

    WS clk 仍然错误、这次您使用48K-samplerate 波形文件、因此 WS 频率必须为48kHz。

    告诉我您从哪里获得代码?

    您能否检查与以下日志相关的代码有什么问题

    [166.195482] tlv320aic31xx-codec 0-0018:asoc:tlv320aic31xx-hifi 上的 snd_soc_da_hw_params 错误:-22.
    [166.204394] 44004000.audio-controller-tlv320aic31xx-hifi: ASOC:SoC_PCM_HW_params()失败(-22)。

    关于如何 检查 aic3110是设置为主编解码器还是从编解码器、我想知道 您的项目中对 tlv320aic3110的要求是什么? 根据 DTS 设置、您已将其设置为主模式。 这意味着位 clk 和 ws clk 都必须由 tlv320aic3110生成。