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.

[参考译文] TLV320AIC3120EVM-U:Linux 引导时编解码器时钟错误

Guru**** 2470720 points
Other Parts Discussed in Thread: TLV320AIC3120EVM-U, TLV320AIC3120

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1229159/tlv320aic3120evm-u-codec-clock-error-at-linux-boot-time

器件型号:TLV320AIC3120EVM-U
主题中讨论的其他器件: TLV320AIC3120

我们正在使用 连接到 SDTM32MP135-DK 的 TLV320AIC3120EVM-U。

只有扬声器连接到  LV320AIC3120EVM-U、不使用麦克风。

连接如下:

出现以下错误:

声卡未找到 MCLK1并且时钟未启用。

器件树如下所示:

sound: sound {
compatible = "audio-graph-card";
label = "STM32MP135F-DK";
routing = "Playback", "MCLK1"; 
dais = <&sai1a_port>;
status = "okay";
};
 
&i2c1{
tlv320aic31xx: tlv320aic31xx@18 {
	compatible = "ti,tlv320aic3120";
	reg = <0x18>;
	ai31xx-micbias-vg = <MICBIAS_2_5V>;
	reset-gpios = <&gpioe 5 GPIO_ACTIVE_LOW>;
	HPVDD-supply = <&scmi_vdd>;
	SPRVDD-supply = <&scmi_vdd>;
	SPLVDD-supply = <&scmi_vdd>;
	AVDD-supply = <&scmi_vdd>;
	IOVDD-supply = <&scmi_vdd>;
	DVDD-supply = <&scmi_v1v8_periph>;
	clocks = <&sai1a>;
	clock-names = "MCLK1";
 
	ports {
			#address-cells = <1>;
			#size-cells = <0>;
			tlv320aic31xx_tx_port: port@0 {
				reg = <0>;
	         		tlv320aic31xx_tx_endpoint: endpoint {
					remote-endpoint = <&sai1a_endpoint>;
				};
			};
 		};	
  };
};
 
&sai1{
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sai1a_pins_mx>;
	pinctrl-1 = <&sai1a_sleep_pins_mx>;
	status = "okay";
	/* USER CODE BEGIN sai1 */
	clocks = <&rcc SAI1>, <&scmi_clk CK_SCMI_PLL3_Q>, <&scmi_clk CK_SCMI_PLL3_R>;
	clock-names = "pclk", "x8k", "x11k";
	/* USER CODE END sai1 */
 
	sai1a:audio-controller@4400a004{
		status = "okay";
		/* USER CODE BEGIN sai1a */
		compatible = "st,stm32-sai-sub-a";
		#clock-cells = <0>;
		dma-names = "tx";
		clocks = <&rcc SAI1_K>;
		clock-names = "sai_ck";
 
		sai1a_port: port {
			sai1a_endpoint: endpoint {
				remote-endpoint = <&tlv320aic31xx_tx_endpoint>;
				format = "i2s";
				mclk-fs = <512>;
			};
		};
		/* USER CODE END sai1a */
	};
};

要创建设备树 、我们使用作为参考页面:SAI 设备树配置- stm32mpu、"3.3.1   SAI 设置 为主时钟提供"

我们怎样解决这个问题呢? 是否建议更改器件树或硬件连接?

此致

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

    嗨、大家好、

    在我支持您之前、请先向我提供内核版本。

    您将使用哪种代码?

    我想了解更多项目信息。

    下面是有关如何设置 i2c 器件的示例

        i2c2:I2C@e400a000{

          状态="正常";

          pinctrl-0 =<&i2c2_pins_a>;

          时钟频率=<400000>;

          tlv320aic31xx:tlv320aic31xx@18{

            兼容="ti, tlv320aic3120";

            寄存器=<0x18>;

            状态="可以";

            ai31xx-micbias-vg = ;

            #sound-Da-cells =<0>;

            RESET-GPIO =<&GPIO 6 GPIO_ACTIVE_LOW>;

     

            HPVDD-SUPPLY =<和 FIXED_HPVDD>;

            SPRVDD -供应=<和 fixed_sprvdd>;

            SPLVDD-SUPPLY =<和 fixed_splvdd>;

            AVDD-SUPPLY =<和 FIXED_AVDD>;

            IOVdd-supply =<和 fixed_IOVdd>;

            DVDD-SUPPLY =<和 FIXED_DVDD>;

          };

        };

    以下是有关如何设置为从站的示例:

      声音{

        兼容="简单音频卡";

        simple-audio-card、name ="SpiritBear";

        simple-audio-card、MCLK-FS =<250>;

        simple-audio 卡、格式="I2S";

        simple-audio-card、widget =

        "麦克风"、"MIC";

        简单音频卡、路由=

        "MIC1LP"、"MIC"、

        "MIC1RP"、"MIC"、

        "MIC1LM"、"MIC"、

        "ADC"、"MIC"、

        "MIC"、"MICBIAS";

        简单音频卡、CPU{

          sound-Dai =<&i2s0>;

        };  

        简单音频卡、编解码器{

          sound-Dai =<&tlv320aic31xx>;

        };

      };

    以下是有关如何设置为主站的示例:

      声音{

        兼容="简单音频卡";

        simple-audio-card、name ="SpiritBear";

        simple-audio-card、MCLK-FS=<250>;

        simple-audio 卡、格式="I2S";

        simple-audio-card、bitclock-master =<&tlv320aic3120codec>;

        simple-audio-card、frame-master =<&tlv320aic3120codec>;

        simple-audio-card、widget =

        "麦克风"、"MIC";

        简单音频卡、路由=

        "MIC1LP"、"MIC"、

        "MIC1RP"、"MIC"、

        "MIC1LM"、"MIC"、

        "AIF 输出"、"MIC"、

        "捕获"、"MIC"、

        "ADC"、"MIC"、

        "MIC"、"MICBIAS";

     

        简单音频卡、CPU{

          sound-Dai =<&i2s0>;

        };

     

        tlv320aic3120codec:simple-audio-card、codec{

          sound-Dai =<&tlv320aic31xx>;

        };

      };

    我想知道您是要将编解码器设置为主器件还是从器件?

    我认为设置为主器件比设置主器件更简单。  

    期待您的反馈。

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

    我们在 GitHub 中使用 Linux 内核- STMicroelectronics/Linux:Linux 内核源树 v5.15

    编解码器驱动程序为 v5.15-stm32mp STMicroelectronics/Linux··GitHub 上的 Linux/tlv320aic31xx.c

    我们的编解码器 tlv320aic3120是 SAI1微处理器外设的从器件、我们只需要驱动扬声器。

    连接和器件树信息在上方。

    我们需要重现的音频文件具有48kHz 的采样频率和1536kbit/s 的位速率 音频文件是立体声的、但编解码器是单声道的。 可能会有问题? 在最终应用中、我们将仅使用单声道音频文件。

    最好将主时钟或位时钟用作 PLL 源?

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

    没问题、即使单声道播放、采样率仍然是48kHz、位时钟仍然是1.536MHz (48kHz * 2个通道* 16位)。 在某些平台中、两个通道将传输相同的单声道音频数据。

    位时钟对于器件树设置会更简单。