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.

[参考译文] AM625:McASP1同步模式

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1490528/am625-mcasp1-sync-mode

器件型号:AM625
主题中讨论的其他器件:PCM5102APCM5102SysConfig

工具/软件:

主要问题: 是否可以将 AM6254 McASP1置于同步模式 如应用手册"SPRACK0 McASP 设计指南-提示、技巧和实际示例"的第4.3节(图13)所述?

应用手册说我可以在 ACLKXCTL 中设置此项、但查看 TRM SPRUIV7B 的第14.8.1.1.16.1节。不清楚是否可以这样做。

我使用的是 Linux TISDK v09.01.00.08

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

    尊敬的 Dan:

    对延迟的回复表示歉意。 我想您看到的是错误的第14.8.1.1.16.1节。 本节介绍的是 CFG_ACLK R 控制  不是 CFG_ACLK X CTL 寄存器。
    请检查 第14.8.1.1.28节 CFG_ACLKXCTL 寄存器 。 您可以在其中的第6位找到同步模式选项。  

    此致、
    Ritapravo

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

    明白了、谢谢。

    我正在尝试测试此功能、但它似乎无法正常工作。

    我将24.5MHz 位时钟和48kHz FS 时钟路由到下面所示的引脚、我已经验证了示波器上的信号是否正常。

    然后检查 AM62上 McASP1时钟的状态:

    :使用 k3conf 时,我不应该看到上面突出显示的时钟的频率吗?

    我已验证 SYNC 模式设置正确:

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

    问题:如果我正在启用 SYNC 模式、是否需要任何其他设置来支持此模式?

    我在设置模式后读取时钟错误。

    read CFG_XSTAT                                                      
        MCASP0                                                              
        Value at addr 0x2b000c0 = 0x10c                                     
        MCASP1                                                              
        Value at addr 0x2b100c0 = 0x10c                                     
        MCASP2                                                              
        Value at addr 0x2b200c0 = 0x10c                                     
    
    read CFG_RSTAT                                                      
        MCASP0                                                              
        Value at addr 0x2b10080 = 0x104 
        MCASP1                                                              
        Value at addr 0x2b10080 = 0x104 
        MCASP2                                                              
        Value at addr 0x2b10080 = 0x104

    我正在尝试将此输入时钟用作 McASP0、McASP1和 MCASP2的时钟主器件。

    以 McASP1为例、我使用以下设备树代码执行此操作:

    	mcasp1: audio-controller@2b10000 {
    		compatible = "ti,am33xx-mcasp-audio";
    		reg = <0x00 0x02b10000 0x00 0x2000>,
    		      <0x00 0x02b18000 0x00 0x400>;
    		reg-names = "mpu","dat";
    		interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>,
    				<GIC_SPI 237 IRQ_TYPE_LEVEL_HIGH>;
    		interrupt-names = "tx", "rx";
    
    		dmas = <&main_bcdma 0 0xc501 0>, <&main_bcdma 0 0x4501 0>;
    		dma-names = "tx", "rx";
    
    		clocks = <&k3_clks 191 0>;
    		clock-names = "fck";
    		assigned-clocks = <&k3_clks 191 0>;
    		assigned-clock-parents = <&k3_clks 191 2>;
    		power-domains = <&k3_pds 191 TI_SCI_PD_EXCLUSIVE>;
    		status = "disabled";
    	};
    	
    		zynq_pcm5102a: pcm5102a@1 {
    		#sound-dai-cells = <0>;
    		compatible = "ti,pcm5102a";
    		status = "okay";
    	};
    
    	zynq_audio: sound@1 {
    		compatible = "simple-audio-card";
    		simple-audio-card,name = "TIZynq";
    		simple-audio-card,format = "dsp_b";
    		simple-audio-card,bitclock-master = <&zynq_audio_master>;
    		simple-audio-card,frame-master = <&zynq_audio_master>;
    		//simple-audio-card,bitclock-inversion;
    
    		simple-audio-card,cpu {
    			sound-dai = <&mcasp1>;
    			dai-tdm-slot-num = <16>;
    			dai-tdm-slot-width = <32>;
    		};
    
    		zynq_audio_master: simple-audio-card,codec {
    			#sound-dai-cells = <0>;
    			sound-dai = <&zynq_pcm5102a>;
    		};
    	};
    	
    		mcasp1_pins_default: mcasp1-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x0118, PIN_INPUT, 1) /* (D25) MMC2_CLK.MCASP1_ACLKR */
    			AM62X_IOPAD(0x0124, PIN_INPUT, 1) /* (A23) MMC2_SDCD.MCASP1_ACLKX */
    			AM62X_IOPAD(0x0120, PIN_INPUT, 1) /* (C24) MMC2_CMD.MCASP1_AFSR */
    			AM62X_IOPAD(0x0128, PIN_INPUT, 1) /* (B23) MMC2_SDWP.MCASP1_AFSX */
    			AM62X_IOPAD(0x0114, PIN_OUTPUT, 1) /* (B24) MMC2_DAT0.MCASP1_AXR0 */
    			AM62X_IOPAD(0x0110, PIN_INPUT, 1) /* (C25) MMC2_DAT1.MCASP1_AXR1 */
    			AM62X_IOPAD(0x010c, PIN_OUTPUT, 1) /* (E23) MMC2_DAT2.MCASP1_AXR2 */
    			AM62X_IOPAD(0x0108, PIN_INPUT, 1) /* (D24) MMC2_DAT3.MCASP1_AXR3 */
    		>;
    	};
    
    
    &mcasp1 {
    	status = "okay";
    	#sound-dai-cells = <0>;
    
    	pinctrl-names = "default";
    	pinctrl-0 = <&mcasp1_pins_default>;
    
    	op-mode = <0>;          /* 0 = MCASP_IIS_MODE or MCASP_TDM_MODE*/
    	tdm-slots = <16>; 		/* TDM slots used */
        tdm-slot-width = <32>;   /* 32-bit per channel */
    
    	/* McASP1 has 6 available serializers */
    	num-serializer = <6>;
        serial-dir = <
            1 2 1 2 /* TX (1), RX (2) */
            0 0 /* Unused serializers */
        >;
    
        tx-num-evt = <0>;  /* Number of transmit DMA events */
        rx-num-evt = <0>;  /* Number of receive DMA events */
    };

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

    尊敬的 Dan:

    对延迟深表歉意。

    根据您的设备树、我解读了以下信息、如果我错了、请纠正我:

    您的编解码器是时钟输入器(sound_master)、因此我假设您应该在 AHCLKX 上看到24.5 MHz、在 AFSX 上看到48kHz。

    此外、由于 AHCLKXCTL 寄存器值为0x00180020、因此已启用 SYNC 模式。

    为什么要在设备树中按如下所示添加分配时钟、分配时钟父级?

    Clocks =<&K3_CLKS 191 0>;
    时钟名称="fck";
    Assigned-clocks =<&K3_CLKS 191 0>;
    assigned-clock-parter =<&k3_CLKS 191 2>;

    此致、

    Suren

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

    您好、Suren、

    我正在将24.5 MHz ACLKX 和48kHz AFSX 路由到 Zynq SoC 的 AM62 McASP1发送侧。 我通过 k3conf 手动启用 SYNC 模式、以便在 AM62上使用它们。 这些时钟位于这些线路上、具有良好的信号完整性。

    在 AM62上、我将每个 MCASP 器件设置为来自虚拟编解码器 pcm5102a 的主时钟接收器、以运行 MCASP I2S 和 DSP_b 接口。 McASP0和 MCASP2的设置与 McASP1非常相似

    我保留了 assigned-clock 和 assigned-clock-parriental 属性、就像它们最初位于 SDK v9.1.0.8的 k3-am62-main.dtsi 中一样。 所有 MCASP 配置文件都保持不变。

    在 Linux 中、当我使用命令列出 MCASP 器件时、它们看起来是正确的 aplay -L and cat /proc/asound/cards    

    但是、当我尝试在这些带有 aplay 和 speaker-test 的 I2S 和 DSP_b 接口上输出音频时、AM62不会发出 bitclk 或 fsclk。

    在音频测试运行时、我检查时钟状态、如前面所示。

    问题:

    1. 我可以检查哪些其他设置或寄存器、以验证 MCASP 是否从所提供的时钟开始正常运行?
    2. 是否有办法在器件树中设置 SYNC 模式? 是否有相关的器件树设置可确保满足以下条件?

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

    尊敬的 Dan:

    MCASP 的 AHCLKX 上是否显示了24.5 MHz 时钟?  

    这是 MCLK 吗? 在你之前的答复中,你提到了24.5 MHz 的 Bitclock。

    我刚才提到了下面的入门,它说这:

    这就是为什么您可能无法在 ACLKR 和 AFSR 上看到时钟的原因。

    参考资料: www.ti.com/.../5993647158001

    此致、

    Suren

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

    尊敬的 Dan:

    您能否分享先显示所有 MCASP 和编解码器的原理图?

    我同意您不需要提供 AHCLKX (MCLK)、并且您只需要从您的编解码器向 MCASP 提供 ACLKX 和 AFSX。

    如果我理解正确、您尝试在 McASP1上使用同步模式、一旦配置完毕、是否采用 ACLKR 向其他一些编解码器提供位时钟?

    为 McASP0和 MCASP2提供时钟的人员。

    此致、

    Suren

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

    您好、Suren、

    如果我理解正确、您正尝试在 McASP1上使用同步模式、一旦配置完毕、将使用 ACLKR 向其他一些编解码器提供位时钟?

    是的、正确。 我想从 McASP1 ACLKR 获取时钟并将其提供给 pcm5102a 虚拟编解码器。

    • McASP0正在将 ACLKX 和 AFSX 输出到外部器件。 它从 pcm5102a 虚拟编解码器获取时钟。
    • MCASP2正在将 ACLKX 和 AFSX 输出到外部设备。 它从 pcm5102a 虚拟编解码器获取时钟。

    因此、实际上我正在尝试实现这个 McASP1时钟=> MCASP2时钟、McASP0时钟。

    使用 AM6254是否可以这样做?

    我从本应用手册的第4.2.1.1节( https://www.ti.com/lit/an/sprac97/sprac97.pdf)获得了这项技术

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

    尊敬的 Dan:

    您期望虚拟编解码器在硬件中如何向 McASP0和 MCASP2提供时钟? 由于该编解码器(虚拟 PCM5102)不在 AM62x 上、没有展示这一点的连接?  

    此致、

    Suren

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

    尊敬的 Dan:

    我是否需要设置 DCCCLKSRC0/DCCCLKSRC1寄存器才能运行这个 AUDIO_EXT_REFCLK1的 MCASP?

    运行 MCASP 时不需要这些寄存器。

    我看到引脚 k25可以是1.8V 或3.3V。 是否需要为此引脚执行显式的电源组分配、或者如果将引脚多路复用模式设置为正确、则默认情况下是否为1.8V?

    如果您使用 SysConfig 工具进行引脚多路复用、则可执行此操作。  

    在时钟转储中、似乎 MCASP 和 BOARD0时钟没有显示正确的频率。 我还能检查什么?

    k3conf 转储时钟不会在 PIN 级别转储时钟。  您可能必须使用逻辑分析仪来探测这些引脚、以查看您提供的时钟是否正确配置。  

    如果从外部为 AUDIO_EXT_REFCLK1提供正确的时钟、请使用 MCASP 的 AHCLKx/R 引脚分配的正确时钟父母和分配的时钟相应地配置器件树。

    此致、

    Suren

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

    您好、Suren、

    感谢您提供的信息。

    对于5/5中的之前器件树代码、我使用示波器探测 McASP0和 MCASP2上的 ACLKX、AFSX、在尝试通过 aplay 运行接口时未看到任何内容。

    我将以下示例中的所有信息合并在一起、因为我确定这些信息是适用的。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1272002/am623-audio_ext_refclk1-input/4844633

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1271393/am623-mcasp-i2s-master

    https://lore.kernel.org/all/20230807202159.13095-1-francesco@dolcini.it/

    https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am62x/clocks.html#device-wise-clock-id-list-for-am62x-soc

    据我所知、以下是我认为器件树中的时钟配置。 您能否请仔细查看、以便可以从 AUDIO_EXT_REFCLK1生成 MCASP 2.4576 MHz ACLKX 和48kHz AFSX? 以下示例仅适用于 McASP0。

    k3-am62-main.dtsi

    -分配的时钟父设备157的时钟 ID 10不是时钟 ID 11-18。 我希望这个时钟来自输入引脚 K25外部。

    - McASP0使用时钟15、DEV_MCASP0_MCASP0_AHCLKX_PIN、其具有分配的父选项时钟19 (DEV_MCASP0_MCASP0_AHCLKR_PIN_PAREN_Board_0_AUDIO_EXT_REFCLK1_OUT)

    -我指定希望 MCASP 时钟频率为具有分配时钟速率的2.4576 MHz

    		audio_refclk1: clock@82e4 {
    			compatible = "ti,am62-audio-refclk";
    			reg = <0x82e4 0x4>;
    			clocks = <&k3_clks 157 10>;
    			assigned-clocks = <&k3_clks 157 10>;
    			assigned-clock-parents = <&k3_clks 157 10>;
    			#clock-cells = <0>;
    		};
    		
    		
    		
    		
    	mcasp0: audio-controller@2b00000 {
    		compatible = "ti,am33xx-mcasp-audio";
    		reg = <0x00 0x02b00000 0x00 0x2000>,
    		      <0x00 0x02b08000 0x00 0x400>;
    		reg-names = "mpu","dat";
    		interrupts = <GIC_SPI 236 IRQ_TYPE_LEVEL_HIGH>,
    				<GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>;
    		interrupt-names = "tx", "rx";
    
    		dmas = <&main_bcdma 0 0xc500 0>, <&main_bcdma 0 0x4500 0>;
    		dma-names = "tx", "rx";
    
    		clocks = <&k3_clks 190 15>;
    		clock-names = "fck";
    		assigned-clocks = <&k3_clks 190 9>, <&k3_clks 190 15>;  /*Clock ID: DEV_MCASP0_MCASP_AHCLKR_PIN, DEV_MCASP0_MCASP_AHCLKX_PIN*/
    		assigned-clock-parents = <&k3_clks 190 13>, <&k3_clks 190 19>; /*Clock ID: DEV_MCASP0_MCASP_AHCLKR_PIN_PARENT_BOARD_0_AUDIO_EXT_REFCLK1_OUT*/
    		assigned-clock-rates = <24576000>, <24576000>;
    		power-domains = <&k3_pds 190 TI_SCI_PD_EXCLUSIVE>;
    		//status = "disabled";
    	};

    k3-am62x-sk-common.dtsi

    -我指定我要输出来自 I2S 接口上 audio_refclk1的2.4576 MHz 时钟

    	mcasp0_pins_default: mcasp0-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x01a4, PIN_OUTPUT, 0) /* (B20) MCASP0_ACLKX */
    			AM62X_IOPAD(0x01a8, PIN_OUTPUT, 0) /* (D20) MCASP0_AFSX */
    			AM62X_IOPAD(0x01a0, PIN_OUTPUT, 0) /* (E18) MCASP0_AXR0 */
    			AM62X_IOPAD(0x019c, PIN_INPUT, 0) /* (B18) MCASP0_AXR1 */
    		>;
    	};
    	
    &mcasp0 {
    	status = "okay";
    	#sound-dai-cells = <0>;
    
    	pinctrl-names = "default";
    	pinctrl-0 = <&mcasp0_pins_default>;
    
    	op-mode = <0>;          /* 0 = MCASP_IIS_MODE or MCASP_TDM_MODE*/
    	tdm-slots = <2>;		/* I2S slots */
    
    	/* McASP0 has 4 available serializers */
    	num-serializer = <2>;
    	serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
    	       1 2 0 0
    	>;
    	tx-num-evt = <32>;
    	rx-num-evt = <32>;
    };
    
    
    	ble_pcm5102a: pcm5102a@0 {
    		#sound-dai-cells = <0>;
    		compatible = "ti,pcm5102a";
    		status = "okay";
    	};
    
    	ble_audio: sound@0 {
    		compatible = "simple-audio-card";
    		simple-audio-card,name = "EagleBLE";
    		simple-audio-card,format = "i2s";
    		simple-audio-card,bitclock-master = <&ble_audio_master>;
    		simple-audio-card,frame-master = <&ble_audio_master>;
    
    		simple-audio-card,cpu {
    			sound-dai = <&mcasp0>;
    			dai-tdm-slot-num = <2>;
    			dai-tdm-slot-width = <32>;
                system-clock-frequency = <24576000>;
    			system-clock-direction-out;
    		};
    
    		ble_audio_master: simple-audio-card,codec {
    			#sound-dai-cells = <0>;
    			sound-dai = <&ble_pcm5102a>;
    			clocks = <&audio_refclk1>;
    		};
    	};

    我通过向 McASP0发送音频来测试此器件树代码

    aplay -D 可播放:0、0 -c 2 -r 48000 -f S24_LE /dev/zero

    借助此器件树代码、我可以看到以下结果。 绿色结果符合我的预期、而红色结果似乎有问题

    这种内核时钟错误是有道理的、但我不确定它是否阻止了某些器件正常工作。

    root@am62xx-evm:~# dmesg | grep clk
    [    0.907279] clk: failed to reparent clk:157:10 to clk:157:10: -22
    [    0.907549] clk: failed to reparent clk:157:10 to clk:157:10: -22

    我非常感谢任何指导。

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

    尊敬的 Dan:

    我给你发了一封私人邮件。 请回复。  

    此致、

    Suren

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

    您好、Suren、

    非常感谢您的建议。

    将设备树更改为以下内容后、当我在上一个响应中运行 avplay 命令时、可以看到

    引脚(B20、McASP0_ACLKX)上的12.5 MHz、引脚(D20、McASP0_AFSX)上的195.31kHz。

    但是、我期望引脚(B20、MCASP0_ACLKX)上有2.4576 MHz、引脚(D20、MCASP0_AFSX)上有48kHz。

    	ble_pcm5102a: pcm5102a@0 {
    		#sound-dai-cells = <0>;
    		compatible = "ti,pcm5102a";
    		status = "okay";
    	};
    
    	ble_audio: sound@0 {
    		compatible = "simple-audio-card";
    		simple-audio-card,name = "EagleBLE";
    		simple-audio-card,format = "i2s";
    		simple-audio-card,bitclock-master = <&soc_audio_master0>;
    		simple-audio-card,frame-master = <&soc_audio_master0>;
    
    		soc_audio_master0: simple-audio-card,cpu {
    			sound-dai = <&mcasp0>;
    			dai-tdm-slot-num = <2>;
    			dai-tdm-slot-width = <32>;
                system-clock-frequency = <24576000>;
    			system-clock-direction-out;
    		};
    
    		ble_audio_master: simple-audio-card,codec {
    			#sound-dai-cells = <0>;
    			sound-dai = <&ble_pcm5102a>;
    			clocks = <&audio_refclk1>;
    		};
    	};

    因此、似乎 McASP0未正确提供时钟源。

    5月7日发布的 k3-am62-main.dtsi 中的错误器件树时钟分配是否可以解释此行为?

    感谢您的帮助!

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

    尊敬的 Dan:

    您能否共享完整的器件树文件以进行分析? 最新的 12.5 MHz BCLK,以及195.31 FSX。  

    此致、

    Suren

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

    尊敬的 Dan:

    我们明天来看一下相关内容并进行调试。

    此致、

    Suren

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

    您好、Suren、

    将提供给 AUDIO_EXT_REFCLK1的 MCLK 降低到12.288 MHz 并为指定该频率后

    • AUDIO_refclk1:时钟@82e4和 McASP0:音频控制器@2b00000节点中分配的时钟速率
    • 简单音频卡、CPU 节点中的系统时钟频率

    McASP0最终开始生成3.072 MHz 和48kHz I2S 时钟。

    非常感谢您的帮助!