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.

[参考译文] AM3358:在 McASP TDM4 中生成 50%占空比 FSYNC

Guru**** 2837190 points

Other Parts Discussed in Thread: AM3358

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1628617/am3358-generating-50-duty-cycle-fsync-in-mcasp-tdm4

部件号: AM3358

我已经设法使用传输多通道音频 DSP_B 消耗量。
但是、为了使下一个节点正确接收它、请参阅 50%占空比 FSYNC (对于通道对 0/1 2/3 )。

为了实现 50%占空比、我将其配置为 具有 TDM 多通道设置的 I2S 格式 如下面的 DT 所示。

fragment@3 {
        target = <&mcasp0>;
        __overlay__ {
            compatible = "ti,am33xx-mcasp-audio";

            status = "okay";
            #sound-dai-cells = <0>;

            pinctrl-names = "default";
            pinctrl-0 = <&mcasp0_pins>;

            op-mode = <0>;
            tdm-slots  = <4>;
            slot-width = <32>;

            num-serializer = <4>;
            serial-dir = <0 0 1 0>;
        };
    };

fragment@5 {
        target-path = "/";
        __overlay__ {
            sound {
                compatible = "simple-audio-card";
                simple-audio-card,name = "locofield-mcasp";
                simple-audio-card,format = "i2s";
...


但是、只有前两个通道是输出的。 我理解这是预期现象、因为 I2S 基本上是双通道格式、但问题在于 TDM 配置本身似乎被忽略

 

换句话说、对于  具有 32 位时隙的 TDM4 我需要 SCLK (BCLK)= 6.144MHz

image.png

 

是否有任何方法可以实现所需的结果、即使通过修改也是如此  AFSXCTL 寄存器(偏移 ACh) 还是应用其他一些低级解决方法?

image.png

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

    您好、Ko:
    查看它。 我们将在本周结束时回来。

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

    您好、
    您是否还可以共享引脚多路复用配置?
    此外、您使用的是哪个 SDK 版本?

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

    您好、

    我使用的是 BeagleBone Black 无线、内核版本为 6.16.12-bone25。

    这是 pinmux 配置。

    fragment@1 {
            target = <&am33xx_pinmux>;
            __overlay__ {
                mcasp0_pins: mcasp0_pins {
                    pinctrl-single,pins = <
                    /*  offset    mask   value  */
                        0x06c     0x00   0x07
                        0x190     0x00   0x00
                        0x194     0x10   0x00
                        0x19c     0x00   0x02
                        0x1ac     0x30   0x00
                    >;
                };
            };
        };

    我还在考虑修改内核代码以实现自定义驱动程序。
    调整是否有意义 ACLKXCTL 改为注册? 如果修改 AFSXCTL 还 不够、这可能是另一种可能的方法。

    static int __davinci_mcasp_set_clkdiv(struct davinci_mcasp *mcasp, int div_id,
    				      int div, bool explicit)
    {
    	...
    
    	case MCASP_CLKDIV_BCLK:			/* BCLK divider */
    		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
    			       ACLKXDIV(div - 1), ACLKXDIV_MASK);
    		mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
    			       ACLKRDIV(div - 1), ACLKRDIV_MASK);
    		if (explicit)
    			mcasp->bclk_div = div;
    		break;
    		
    	...

    在调用栈中:
    DaVinci _McASP_HW_params
    ㄴ----- davinci_McASP_calc_clk_div
    ㄴ---- DaVinci _McASP_set_clkdiv
    ㄴ------ __DaVinci _McASP_set_clkdiv

    即使它仍在 2 通道模式下运行、也似乎可以实现相同的效果 BCLK 4 通道配置。

    谢谢你。
    LocoField

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

    您好、

    如果我理解正确、您可以在 AM3358 BeagleBone Black 上正常运行多通道音频(4 通道)播放、是这样吗?

    现在您正在尝试录制多通道音频(4 通道)。  

    仅供参考: TDM-SLOTS、可以被认为是与 频道相关的东西。 TDM 时隙= 2 表示 1 个帧有 2 个时隙。
    tdm-slot 2 表示一个串行器可用于立体声音频。 对于 8 通道音频、我假设使用 4 个串行器。

    您是否可以尝试启用两个串行器并在 AXR0 和 AXR1 上捕获数据、同时在您的设置中都显示两个通道数据?

    此致

    Suren

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

    您好、Suren、

    是的、我在 AM3358 BeagleBone Black 上实现了 4 通道回放功能、但只在中 DSP_A/DSP_B 消耗量。
    但是、我无法在当前工作区中使用 DSP 模式。

    此外、我不想多渠道讨论 录制
    在我的设置中、 AXR2 节点 DRX0 AD2428 (Analog Devices)。
    然后、该主节点将音频传输到另一个 AD2428 子节点 连接到扬声器。

    还可以使用 AD2428 DRX1 接收多达 8 声道音频。
    但据我所知、在这种情况下、BCLK 要求非常严格。

    我的实际音频数据仅为 2 通道
    我真正需要的只是一个 更快的 BCLK 适用于 AD2428 时钟要求和放大器的 PBTL 配置。
    AD2428 使用 BCLK 和 LRCK (FSYNC) 作为其同步基准、因此这些信号的时序和占空比至关重要。

    如下图所示、我也希望在 BeagleBone 上实现更高的 BCLK 和 50%占空比 FSYNC。


    示例:使用 ADI SHARC 处理器生成的 TDM8 数据(参考实现)

    谢谢你
    Ko Eunsang

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

    您好、Ko:
    为延迟道歉、内部讨论。 明天会回来的。

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

    您好、Suren。

    你是对的。 启用两个串行器后、我就能够输出了 TDM4 32 位 I2S 数据成功。
    修改后的 DT 如下所示。

        fragment@1 {
            target = <&am33xx_pinmux>;
            __overlay__ {
                mcasp0_pins: mcasp0_pins {
                    pinctrl-single,pins = <
                    /*  offset    mask   value  */
                        0x06c     0x00   0x07
                        0x190     0x00   0x00
                        0x194     0x10   0x00
                        0x198     0x00   0x00
                        0x19c     0x00   0x02
                        0x1ac     0x30   0x00
    
                        /* gpio1_27 (OSC EN)    */
                        /* mcasp0_aclkx (BCLK)  */
                        /* mcasp0_fsx (WCLK)    */
                        /* mcasp0_axr0 (Data0)   */
                        /* mcasp0_axr2 (Data2)   */
                        /* mcasp0_ahclkx (MCLK) */
                    >;
                };
            };
        };
        
        fragment@3 {
            target = <&mcasp0>;
            __overlay__ {
                compatible = "ti,am33xx-mcasp-audio";
    
                status = "okay";
                #sound-dai-cells = <0>;
    
                pinctrl-names = "default";
                pinctrl-0 = <&mcasp0_pins>;
    
                op-mode = <0>;
                tdm-slots  = <2>;
                slot-width = <32>;
    
                num-serializer = <4>;
                serial-dir = <1 0 1 0>;
            };
        };
    

    但是、是否有任何方法可以更改 串行器顺序
    例如、在当前设置中:

    • AXR0 配置
      0-左前
      2 — 左后-> 1
    • AXR2 配置
      1 — 右前-> 2
      3 — 右后

    这使用以下测试命令:

    speaker-test -D hw:0,0 -c4 -r48000 -F S32_LE -t sine

    我将继续调查 AD2428 DRX[n]采样 效果。

    此致、
    LocoField

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

    您好:
    感谢您的查询。 有关专家因** TI 印度**假期而离职。
    请预计响应会延迟。 感谢您的耐心和理解。

    此致、
    TI E2E 支持团队
    ——
    *这是一个自动通知。*

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

    您好、

    但是、是否有任何方法可以更改 串行器顺序 ?

    如果您尝试交错渠道、我觉得它会解决问题。

    我认为用户空间通道映射可能是最好的方法。 通道重映射可以在 PulseAudio 和管道中完成。

    在内核驱动程序方面、它可以完成、但从内核版本到版本不能很好地维护它。

    希望这有所帮助

    此致

    Suren