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.

[参考译文] AM3352:McASP 与 McBSP 的接口、用于32个语音通道

Guru**** 2577385 points
Other Parts Discussed in Thread: AM3352, TLV320AIC3106

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/628563/am3352-mcasp-interface-with-mcbsp-for-32-speech-channels

器件型号:AM3352
主题中讨论的其他器件: TLV320AIC3106

您好!

我们希望通过连接 AM3352 McASP 和 TMS320C5502 McBSP 来支持32个语音通道。  

我们有以下理解:

为此、我们可以使用 AM3352 McASP TDM 流。

我们可以在 TMS320C5502 DSP 中生成2MHz 时钟和8kHz Fsync、并将其提供给 AM3352 McASP (AM3352 McASP 处于从模式)

每个语音通道需要8位。 因此、我们可以在 AM3352 McASP 中进行相同的配置。

我们有以下问题:

1.我们的理解是否正确? 我们的解决方案是否可行?

我们希望使用 Linux 内核4.x 我们能否在 Linux 中支持我们的功能?

我们在 TMS320C5502 DSP 端使用 DMA 来获取 McBSP 中的数据。 我们如何在 AM3352中使用 DMA?

我们的要求非常具体。 我们不希望使用 ALSA 驱动程序来满足我们的要求。 是否有任何参考驱动程序可用于此目的?

请返回您的输入。 我们的项目正处于设计可行性阶段。 我们寻求帮助以确保我们可以继续使用该处理器。

此致、

Amit Shah。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    先生、有任何更新吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、

    1.是的、AM335x McASP 应该能够作为时钟从器件运行并接收 TDM 数据格式。 在8kHz 频率下、32个通道和每通道8位、您将需要2.048MHz 的位时钟。

    2.最新版本的 Linux 处理器 SDK 使用版本4.9的 Linux 内核。 我们的 EVM (参考设计)使用"单一音频卡" Linux 驱动程序将 McASP 外设/驱动程序连接到外部音频器件/编解码器(BeagleBone Black 上的 HDMI 芯片和其他 EVM 上的 tlv320aic3106音频编解码器)。 在您的情况下、您需要为 DSP 侧创建自己的简单编解码器、以提供给简单音频卡节点。 您还可以在简单音频卡节点中指定 TDM 插槽数量和插槽宽度、如 devicetree 绑定文档中所述。

    3. McASP Linux 驱动程序使用 DMA,这一点由设备树节点中的配置以及 McASP 驱动程序本身所证明。

    4.您是否询问是否需要 ALSA 驱动程序来描述系统的 DSP 端? 如果是、您可以创建一个非常简单的编解码器(如上面的#2中所述)、该编解码器基本上只描述了数据的通道、速率和格式、然后在简单音频卡节点中使用它。

    Jason Reeder

    ----------------------------------------

    以下是 Linux 处理器 SDK 中需要查看的一些内容: software-dl.ti.com/.../index_FDS.html

    您将在 board-support/linux-4.9.xx......//文件夹中找到 Linux 内核存储库。 以下位置基于该文件夹

    简单音频卡绑定文档:
    Documentation/devicetree/bindings/sound/simple-card.txt
    Documentation/devicetree/bindings/sound/tdm-slot.txt


    简单音频卡 AM335x 示例用法(请查看以下文件中的"声音"节点):
    arch/arm/boot/dts/AM335x-bonebblack.dts (显示了 HDMI 编解码器)
    arch/arm/boot/dts/am335x-evmsk.dts (显示 tlv320aic3106编解码器)
    arch/arm/boot/dts/AM335x-evm.dts (显示了 tlv320aic3106编解码器)


    显示 AM335x 器件 DMA 配置的 McASP 定义节点:
    arch/arm/boot/dts/am33xx.dtsi (查找 McASP0和 McASP1节点)


    此 wiki 页面介绍了需要为 DSP 端创建的简单编解码器驱动程序:
    processors.wiki.ti.com/.../Sitara_Linux_Audio_DAC_Example

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

    感谢您的回复。 根据您的建议、我们应该为您提供简单的音频卡来支持我们的功能。 我也有以下疑问:
    我们将连续发送和接收32个通道的数据。 是否有任何基准标记可用于 MIPS?
    2.简单音频卡是否支持较低级别的 DMA 利用?
    根据 AM3352数据表、EDMA 中最多存在64个通道、EDMA 缓冲器为512字节(32 x 16 = 2ms 缓冲器)。 传输的速度
    所有32个通道每5ms 进行一次 DMA 传输? 如何实现?

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

    您在 DT 中需要满足您的需求的类似信息:

    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 =<32>; /* 32个通道*/
    /* 4个串行器*/
    serial-dir =</* 0:非活动、1:TX、2:Rx *
    0 0 1 2
    >;
    tx-num-evt =<32>;
    Rx-num-evt =<32>;
    };

    听起来{
    兼容="简单音频卡";
    simple-audio-card、name ="AM335x-32channel-card";

    /*根据编解码器的不同,您需要自定义小工具*/
    simple-audio-card、小工具=
    "耳机"、"耳机插孔";
    简单音频卡,路由=
    "耳机插孔"、"HPLOUT"、
    "耳机插孔"、"HPROUT";
    simple-audio-card、format ="DSP_b";
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;
    简单音频卡、位时钟反转;

    简单音频卡、CPU{
    Sound-Dai =<&McASP1>;
    };

    sound_master:simple-audio-card、codec{
    Sound-Dai =<您的编解码器>;
    系统时钟频率=<24000000>;对于编解码器*/
    };
    };

    您需要在 McASP1节点中进行调整:您将使用哪个 McASP、将使用哪个串行器(串行目录)、可能也需要根据您的需求调整 TX/Rx-num-evt (McASP FIFO 阈值)。

    您可以通过以下方式使用设置进行测试:
    aplay -Dplughw:0、0 --period-time=50000……

    您能不能更详细地解释一下:
    4. 我们的要求非常具体。 我们不希望使用 ALSA 驱动程序来满足我们的要求。 是否有任何参考驱动程序可用于此目的?"

    在 Linux 中、McASP 只能通过 ALSA 用作音频设备。

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

    尊敬的 Peter:

    感谢您的回复。 因此我们可以使用简单的音频卡。 使用 AMIX 命令、我们可以单独控制所有32个通道。 如果我们的理解不正确、请更正我。

    我在这方面有以下问题:

    32通道的64kbps 数据传输和接收的 MIPS 消耗是多少?

    2、DMA 是在驱动程序中自动分配还是在 DT 中自动分配、我们必须配置相同的内容?

    3.我们假设在使用 DDR3存储器时,DMA 存储器不是问题。 我们最多可以为 DMA 分配64K 内存。

    您能更详细地解释一下吗:

    -'4. 我们的要求非常具体。 我们不希望使用 ALSA 驱动程序来满足我们的要求。 是否有任何参考驱动程序可用于此目的?"

    --在 Linux 中,McASP 只能通过 ALSA 用作音频设备。

    我们不会在设计中使用任何编解码器。 相反、我们将 AM3352 McASP 连接到 TMS320C5502 McBSP。 我们将有32个语音通道。 所有语音信道将根据存在的呼叫单独控制。

    在 C5502 DSP 端、我们将为所有32个通道连续发送/接收数据。 如果任何通道上没有语音数据、则应根据 A-Law 或 M-Law 发送/接收"0xAA"或"0x55"。 因此、AM3352 McASP 将在 McASP 上持续发送/接收数据。

    由于我们的设计不包含任何编解码器、我们是否有可能使用 McASP 和 DMA 源文件并为我们的应用创建我们自己的驱动程序?


    此致、

    Amit Shah。

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

    2.所有这些都要小心,只需添加绑定即可使声卡正常工作。
    3.当然可以

    简单的音频卡需要编解码器节点、您可以尝试使用多个编解码器简单卡与 Linux、SPDIF-DIR 和 Linux、SPDIF-DIT "编解码器"配合使用、或使虚拟编解码器可通过 DT 使用(有多个文章、补丁程序在那里、但不在主线内核中)。

    正如您提到的、您将需要始终以32通道模式运行 McASP、并且您的应用程序应处理通道。 McASP 和 EDMA 将只是流式传输数据。

    创建新驱动程序:当然、您可以这样做、但我不会这样做。 在 ALSA/ASOC 下、我们可以很好地覆盖您所需的功能、我认为新驾驶员(您需要维护)不会给您带来任何好处。

    此致、
    Peter