主题中讨论的其他器件:PCM5102A、 PCM5102、 SysConfig
工具/软件:
主要问题: 是否可以将 AM6254 McASP1置于同步模式 如应用手册"SPRACK0 McASP 设计指南-提示、技巧和实际示例"的第4.3节(图13)所述?
应用手册说我可以在 ACLKXCTL 中设置此项、但查看 TRM SPRUIV7B 的第14.8.1.1.16.1节。不清楚是否可以这样做。
我使用的是 Linux TISDK v09.01.00.08。
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.
工具/软件:
主要问题: 是否可以将 AM6254 McASP1置于同步模式 如应用手册"SPRACK0 McASP 设计指南-提示、技巧和实际示例"的第4.3节(图13)所述?
应用手册说我可以在 ACLKXCTL 中设置此项、但查看 TRM SPRUIV7B 的第14.8.1.1.16.1节。不清楚是否可以这样做。
我使用的是 Linux TISDK v09.01.00.08。
问题:如果我正在启用 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。
在音频测试运行时、我检查时钟状态、如前面所示。
问题:
尊敬的 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 虚拟编解码器。
因此、实际上我正在尝试实现这个 McASP1时钟=> MCASP2时钟、McASP0时钟。
使用 AM6254是否可以这样做?
我从本应用手册的第4.2.1.1节( https://www.ti.com/lit/an/sprac97/sprac97.pdf)获得了这项技术
尊敬的 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://lore.kernel.org/all/20230807202159.13095-1-francesco@dolcini.it/
据我所知、以下是我认为器件树中的时钟配置。 您能否请仔细查看、以便可以从 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
我非常感谢任何指导。
您好、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 中的错误器件树时钟分配是否可以解释此行为?
感谢您的帮助!