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 接口

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/842530/am3358-mcasp-interface

器件型号:AM3358
主题中讨论的其他器件: TLV320AIC3104TLV320AIC3007TLV320AIC3106AM3352EVMK2G

您好!

我正在尝试确定是否可以将 AM3358上的 TDM 连接到语音芯片上的 PCM 接口。 PCM 接口具有 PCLK、FSYNC、DTX 和 DRX、信号与此类似。

 在 AM3358上、我有 CLK、FS 和 AXR[n]。  

在语音芯片上、它可配置为支持每125us 帧8-128 (8位)个时隙、PCLK 范围为256KHz - 8.192MHz。  我是否能够使其与此语音芯片配合使用?  

谢谢你

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

    您好!

    有关 AM335x McASP 接口的详细说明、请参阅:

     AM335x 数据表修订版 K 的第7.11节
    AM335x 技术参考手册第22节修订版 P.

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

    您好、Biser、

    我已阅读数据表和 TRM。 我很难理解解释 TDM 的22.3.3.1部分。 我能否使用 AXR[0]连接到 TX、使用 AXR[1]连接到语音芯片上的 RX?  如果是、是否有任何示例说明如何在 DTS 中进行设置?

    谢谢你

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

    您好、Biser、

    我正在尝试为语音芯片编写驱动程序。 是否有人可以用以下代码解释串行目录:

    &McASP0{
    pinctrl-names ="default";
    pinctrl-0 =<&McASP0_PINs>;
    状态="正常";
    OP-MODE =<0>;/* MCASP_IIS_MODE */
    TDM-SLOTS =<2>;
    /* 16串行器*/
    serial-dir =</* 0:非活动、1:TX、2:Rx *
    1 0 0 0 0
    >;
    tx-num-evt =<32>;
    Rx-num-evt =<32>;
    };

    谢谢你

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

    Samer、

    [引用 user="Samer Abbas "]我是否可以使用 AXR[0]连接到 TX 和 AXR[1]连接到语音芯片上的 RX?

    是的。

    [引用 user="Samer Abbas "]如果是,是否有任何示例说明如何在 DTS 中设置它?

    您可以查看 AM335x TI PSDK Linux DTS 文件:

    {PSDK}/board-support/linux-4.19.38/arch/arm/boot/dts/am335x-evm.dts

    McASP1{
       #sound-di-cells =<0>;
       pinctrl-names ="default"、"sleep";
       pinctrl-0 =<&McASP1_PINs>;
       pinctrl-1 =<&McASP1_PINS_SLEEP>;

       状态="正常";

       OP-MODE =<0>;         /* MCASP_IIS_MODE */
       TDM-SLOTS =<2>;
       /* 4个串行器*/
       serial-dir =< /* 0:非活动、1:TX、2:Rx *
          0 0 1 2
       >;
       tx-num-evt =<32>;
       Rx-num-evt =<32>;
    };

     

    在此 DTS 文件中、AXR[2]配置为 TX、AXR[3]配置为 RX

    您还可以检查 am57xx-beagle-x15-common.dtsi 文件、其中 AXR[0]配置为 TX、AXR[1]配置为 RX

    /* 4个串行器*/
       serial-dir =<   /* 0:非活动、1:TX、2:Rx *
          1 2 0 0

    此致、
    帕维尔

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

    [引用 user="Samer Abbas ]'我正在尝试为语音芯片编写驱动程序。 是否有人可以在以下代码中解释串行目录:

    在此代码中、您将为 TX (发送)配置 McASP0 AXR[0]引脚、而 McASP0 AXR[n]的其余引脚处于非活动状态。

    另请参见以下文件:

    Linux-4.19.38/sound/soc/co/ti/Davinci-McAP.c

    Linux-4.19.38/bindings/sound/davinci-mcasp-audio.txt

    此致、
    帕维尔

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

    您好、Pavel、

    感谢您的回答。

    我的电路板设计基于 BeagleBone、因此由于 RGMII1连接到 LAN8710、McASP1引脚不可用。 在 McASP0上、我连接了 TLV320AIC3104。

    是否仍然可以将语音芯片连接到 McASP0或 McASP1?

    语音芯片需要 SPI 和 TDM/PCM。 我有可用于 SPI 的引脚、但我不确定 MCASP。

    谢谢、

    Samer

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

    Samer、

    是的、您可以将 AIC3x 编解码器连接到定制板上的 McASP0。 在 BeagleBone Black 板中、默认情况下、我们将 TDA19988 HDMI 发送器连接到 McASP0模块、您可以将此 McASP0节点从 TDA19988更新到 TLV320AIC3104:

    Linux-4.19.38/arch/arm/boot/dts/AM335x-bonebblack-common.dtsi

    您可以参阅以下 DTS 文件以了解 McASP0到 tlv320aic3007编解码器连接的示例:

    Linux-4.19.38/arch/arm/boot/dts/AM335x-wega.dtsi

    您可以参阅以下 DTS 文件以了解 McASP3到 tlv320aic3104编解码器连接的示例:

    Linux-4.19.38/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi


    此致、
    帕维尔

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

    Pavel、

    似乎存在沟通错误。 让我来解释一下我的应用。 在我的定制板上、我已经将 AIC3x 编解码器连接到 McASP0、并且由于这些引脚使用 RGMII、McASP1引脚不可用。

    我想将电话的另一个音频接口(FXO/FXS)连接到我的定制板、它需要 TDM 引脚。 如何将这款新的电话芯片连接到 AM335x、同时仍保持 McASP0上的 AIC3x?

    谢谢、

    Samer

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

    Samer、

    要将两个外部音频芯片连接到 McASP0、请参阅以下用户指南:

    请查看第4.4.1.1节、我们提供了 HDMI 发送器+ DAC 的示例、我们还提供了 ADC+ DAC


    5.1数字音频接口链接-  McASP6连接了3个编解码器

    此致、
    帕维尔

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

    [引用用户="Pavel Bodev"]

    5.1数字音频接口链接-  McASP6连接了3个编解码器

    [/报价]

    Pavel、

    在哪里可以获得有关一个 MCASP 连接到多个编解码器的这种情况的更多详细信息?

    对于我的应用、在一种情况下、我将 AIC3x 用作音频输出设备、在一种情况下、我将具有用于音频输入和输出的电话芯片、两者都将连接到 McASP0。

    谢谢、

    Samer

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

    Samer、

    检查以下 e2e 螺纹:

    此致、
    帕维尔

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

    Pavel、

    [引用用户="Pavel Bodev"]

    Linux/AM3352:支持 TDM 的多编解码器操作

    TI E2E 支持论坛
    器件型号:AM3352工具/软件:Linux Hi、我们有一个使用 AM335x 处理器和3个 TLV320AIC3106编解码器的设计、在 TDM 模式下使用 McASP 进行连接。 该拓扑结构看起来类似于 SPRAC09A (http://……

    [/报价]

    在此线程中、您建议只修改 DTS、以便在一个 MCASP 上添加多个编解码器支持。 没有这方面的例子。 您能否解释一下我需要在以下 DTS 中更改什么才能为 McASP1上的另一个编解码器添加支持。

    Sound{
    compatible ="简单音频卡";
    简单音频卡、name ="AM335x-evm";
    简单音频卡、widget =
    "耳机"、"耳机插孔"、
    "线路"、 "线路输入";
    简单音频卡、路由=
    "耳机插孔"、"HPLOUT"、
    "耳机插孔"、"HPROUT"、
    "LINE1L"、"线路输入"、
    "LINE1R"、"线路输入";
    简单音频卡、格式="DSP_b";
    简单音频卡、位时钟主器件=<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;
    simple-audio-card、bitclock-倒 转;
    
    simple-audio-card、CPU{
    sound-dai =<&McASP1>;
    };
    
    sound_master:simple-audio-card、codec{
    sound-dai =<&incaic3106>;
    system-clock-frequency =<&McAtrl =<&ptrl
    1
    
    
    
    ;}sepningse-pins
    
    
    =<&pins =<&pningsref;<&ptrl =<&pintrl =<&pintrl 1;<pningsepse-pins =<&ningse-pins;}<&
    
    状态="正常";
    
    运算模式=<0>; /* mcsp_iis_mode */
    tdm-slots =<2>;
    /* 4个串行器*/
    serial-dir =</* 0:非活动、1:TX、2:Rx */
    0 1 2
    >;
    TX-Rx-evt =<32>;num-num-evt
    =<32>;
    }; 

    谢谢、

    Samer

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

    Samer、

    您可以参阅 EVMK2G DTS 文件和用户指南:

    Linux-4.19.38/arch/arm/boot/dts/keystone-k2g-evm.dts

    我们将 McASP2连接到了两个编解码器:TLV320AIC3106和 Sii9022 HDMI 发送器

    有关一般 DTS 指南、请参阅以下 txt 文件:

    Linux-4.19.38/Documentation/devicetree/bindings/sound/simple-card.txt

    以下 e2e 线程也可能会有所帮助:

    此致、
    帕维尔

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

    [引用用户="Pavel Bodev"]

    您可以参阅 EVMK2G DTS 文件和用户指南:

    Linux-4.19.38/arch/arm/boot/dts/keystone-k2g-evm.dts

    [/报价]

    Pavel、

    感谢您提供信息。 我将尝试 EVMK2G DTS 文件中使用的方法。

    此外、在 EVMK2G 中、两个编解码器都通过 I2S 进行连接、但在我的配置中、一个将通过"DSP_b"进行连接、另一个将通过"TDM"进行连接。 这是否会导致任何问题?

    谢谢、

    Samer

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

    [引用 user="Samer Abbas ]*还有一件事、在 EVMK2G 中、两个编解码器都通过 I2S 进行连接、但在我的配置中、一个将通过"DSP_B"进行连接、另一个将通过"TDM"进行连接。 这是否会导致任何问题?

    以下文件列出了可用的格式选项:

    linux-kernel/sound/soc/co-core.c - I2S、right_j、left_j、dsp_a、dsp_b、 AC97、PDM、MSB、lsb

    您可以将 DSP_b 用于编解码器1,而将另一个选项用于编解码器2。 下面的 DTS 文件中显示了这种情况:

    Linux-4.19.38/arch/arm/boot/dts/stihxxx-b2120.dtsi

    simple-audio-card、di-link0{
             /* HDMI */
             格式="I2S";

    简单音频卡、DAI-link1{
             /* DAC */
             格式="I2S";

    simple-audio-card、di-Link2{
             /* SPDIF */
             格式="left_j";

    另请参阅下面的 TXT 文件:

    Linux-4.19.38/Documentation/devicetree/bindings/sound/st、sti-asoc-card.txt

    从 AM335x McASP 侧来看、这些格式会影响达芬奇_MCBSP_TXFMCTL_REG 和达芬奇_MCBSP_RXFMCTL_REG 寄存器。 确保每个编解码器都有正确的 McASP FMCTL 设置。

    Linux-4.19.38/sound/soc/co/ti/Davinci-McAP.c -> Davinci_McASP_Set_Dai_fmt ()


    此致、
    帕维尔

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

    Pavel、

    现在、对于我的第一个编解码器 TLV320AIC3104、我使用 DSP_b、并且为此使用了以下引脚:McASP0_ACLKx、McASP0_FSX、McASP0_AXR0、McASP0_AXR2。 对于仅使用 PCM 的第二个编解码器 Si3217x、我将使用 I2C 在 McASP0_ACLKx、McASP0_FSX、McASP0_AXR0、McASP0_AXR2等引脚上接收 TDM。 这应该是好的吗? 或者我的方法是错误的吗?

    阅读完您建议的所有文章和设备树后、我现在有了一个设备树。 请查看下面我的部分 DTS 并告诉我这是否起作用:

    Sound0:声音@0{
    兼容="简单音频卡";
    简单音频卡、名称="AM335x-EVM";
    简单音频卡、小工具=
    "耳机"、"耳机插孔"、
    "线路"、 "线路输出"、
    "线路"、"线路输入";
    简单音频卡、路由=
    "耳机插孔"、"HPLOUT"、
    "耳机插孔"、"HPROUT"、
    "LINE1L"、"线路输入"、
    "LINE1R"、"线路输入"
    、"线路输出"、 "LLOUT"、
    "线路输出"、 "RLOUT";
    简单音频卡、DAI-LINK@0{
    格式="dsp_b";
    位时钟主控=<&sound0_0_master>;
    帧主控=<&sound0_master>;
    McA0_0_master>:CPU{
    sound-dai =<&sp0>;
    }
    
    ;CODEC{
    sound =<&sound-clocks =<&clocks&clockse-nation>
    
    
    
    };McAclocks =<&clicks&clocks&clicks&clocks&clocks&clocks&clocks&clock
    
    simple-audio-card、di-link@1{
    format ="I2S";
    bitclock-master =<&sound0_1_master>;
    frame-master =<&sound0_1_master>;
    sound0_1_master: CPU{
    sound-dai =<&McASP0>;
    }
    
    ;CODEC{
    sound-dai =<&s3217x>;
    }clk_clocks =
    <&clk>;"clk_clks"
    
    
    };
    
    &McASP0{
    #sound-di-cells =<0>;
    
    pinctrl-names ="default";
    pinctrl-0 =<&McASP0_PINs>;
    
    状态="确定";
    
    运算模式=<0>;/* mcasp_iis_mode */
    tdm-slots =<2>;
    num-serializer =<16>;
    serial-dir =</* 0:非活动、1:TX、2:Rx */
    2 0 1 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0
    >;
    TX-num-evt =<32>;
    Rx-num-evt =<32>;
    };
    

    在这里、我不确定"tx-num-evt"、"rx-num-evt"和"tdm-slots"。 能否使用 I2S 接收 PCM 数据? 设备树是否正常? 还是需要进行更改?

    谢谢、

    Samer

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

    [引用 USER="Samer Abbas ]]现在、对于我的第一个编解码器 TLV320AIC3104、我使用 DSP_b、并且我使用以下引脚来实现它:McASP0_ACLKx、McASP0_FSX、McASP0_AXR0、McASP0_AXR2。 对于仅使用 PCM 的第二个编解码器 Si3217x、我将使用 I2C 在 McASP0_ACLKx、McASP0_FSX、McASP0_AXR0、McASP0_AXR2等引脚上接收 TDM。 这应该是好的吗? 或者我的方法是否错误?

    当您在两个不同的编解码器之间共享相同的 McASP0引脚时、您将需要多路复用器/缓冲器在这些编解码器之间进行切换。 例如、您可以参阅 EVMK2G 用户指南、第3.28节 McASP 配置3.18音频编解码器


    您的器件树看起来正确、但我无法在我的一侧对其进行测试、因为我没有具有您特定配置的电路板。 因此、您需要在定制板上测试此 DTS、就像查看它一样、我们无法确定它是否正常工作。

    有关"tx-num-evt"、"rx-num-evt"和"tdm-slots"的更多信息、 您可以参阅以下 TXT 文件、并检查 MCAASP 驱动程序如何处理这些文件:

    Linux-4.19.38/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt

    Linux-4.19.38/sound/soc/co/ti/Davinci-McAP.c

     

    此致、
    帕维尔

x 出现错误。请重试或与管理员联系。