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.

[参考译文] Linux/OMAP-L138:处理器 SDK:ARM 上的 Linux 无法与 DSP 上的 McASP 示例共存

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612298/linux-omap-l138-processor-sdk-linux-on-arm-cannot-coexist-with-mcasp-example-on-dsp

器件型号:OMAP-L138

工具/软件:Linux

您好!

这是一个我在各种排列中已经有一段时间的问题、但我曾希望新的 SDK 能够解决其中的一些问题。  如标题所示、我尝试在 DSP 上的 TI-RTOS 上运行 McASP 示例项目、同时在 ARM 上运行 Linux。  以前(使用 MCSDK)我遇到过与 EDMA 相关的问题、我希望用于 Linux 的新 EDMA 驱动程序可以解决这些问题。  目前、我遇到的问题与 DMA 无关、而是与 LPSC 有关。  如果我自己运行 DSP 代码、程序会将音频输入传递到输出。  如果我加载 Linux、然后通过 CCS 加载 DSP 并运行代码、则在 McASP 配置期间代码超时(McASP_drv.c[4084])。  这似乎是由于没有为 McASP 启用 LPSC。  我已验证两种情况下的 LPSC 状态不同。  当 DSP 代码单独运行时、LPSC 将被启用。  当 Linux 处于活动状态时、LPSC 将被禁用。  

我怀疑 Linux DTB 可能与之相关、因此我尝试了 Linux 的两种器件树变体。  在第一个中、McASP 被"禁用"、在第二个中、McASP 被"确定"。  在这两种情况下、McASP 的 LSPC 都被禁用。  在我的内核配置中、声音驱动程序是模块、模块未加载。

最终目标是让两个程序在它们之间运行 IPC、然后从 ARM 加载 DSP。  有关这方面的文档对于新的 SDK 而言似乎有点难找到、因为它们倾向于引用其他器件系列(Keystone II)。  但是、我能够运行 IPC 示例。

有人对我如何使 Linux 和 RTOS 同时运行有任何见解吗?  是否有共享 DMA 资源的推荐做法?

在哪里可以找到有关从 Linux 用户空间启动 DSP 应用的文档?

我很乐意根据需要提供更多信息。

Jeff

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

    这应该是可能的。 但是、我不确定您是否可以在没有 IPC 的情况下实现该功能。
    从 Linux 的角度来看、您需要在 DSP 和 ARM 之间实现 IPC 通信、以便您可以配置 MCASP 模块(时钟、器件焊盘等)。

    您的 DSP 应用是否包含 LPSC 设置? 我怀疑是(因为 MCASP 应用程序可以作为裸机程序运行)、我还怀疑它正在尝试访问由内核锁定的 lpsc 配置区域=>它超时。

    我正在邀请 RTOS 专家详细介绍。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这很有道理。 DSP 应用确实包含应用程序自行运行、McASP、LPSC 等所需的所有配置 在这种情况下、ARM 是否会控制器件的所有配置、而 DSP 是否只会等待 ARM 告知一切准备就绪? 总的来说、我对 IPC 非常陌生、所以我仍在把我的头脑围绕在所有这些机制上。

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

    [引用]在这种情况下、ARM 是否会控制器件的所有配置、而 DSP 只会等待 ARM 告知一切准备就绪?[/引用]
    是的、这是一个可能更容易的选项。
    另一个选项是将整个 McASP 初始化保留在 DSP 代码中、并将您的应用程序作为 xe674二进制文件进行集成、然后通过 Remoteproc 加载(与加载 DSP 固件相同的过程)。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于应用程序当前配置了所有硬件、我认为只需删除 Linux (LPSC 等)中必须执行的步骤并将 McASP 配置保留在 RTOS 中可能会更简单/更快。 我在设备树中重新启用了 McASP、但 PSC 尚未启用。 LPSC 在 Linux 源代码中的哪个位置设置? 我仍然不清楚器件树到底控制什么。 我认为它取代了 arch/arm/mach-Davinci 下的板级配置文件、并作为 Linux 硬件的完整说明。

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

    使用调试器的内存编辑功能手动配置 PSC、禁用 Linux 音频驱动程序并手动加载 DSP 后、我将使音频示例与 Linux 同时运行。 接下来、我需要让 Linux 设置 PSC、出于某种原因、GPIO 不再在 Linux 中工作、因此需要修复。

    Jeff
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    GPIO 的原因是 DSP 修改了 PINMUX ->现在工作。

    感谢您为 Linux 设置 PSC 提供的任何帮助。

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

    您好 Jeff!

    我正在执行类似的任务。 我们有一个在 DSP 上运行的应用程序、它利用 McASP 进行声音捕获/回放、以及在 ARM 内核中运行的 Linux。

    我们的 McASP 接口从 PDK 中的源借用、这些驱动程序使用 DMA 进行音频数据传输。 我们使用 Remoteproc 从 Linux 中加载 DSP 二进制文件。

    我们使用自己的代码在 DSP 部分初始化 PSC、因此 McASP 从 DSP 上电、在 Linux 中禁用音频驱动程序。

    上周、我一直在努力解决 IRQ DSP/ARM 冲突、但我尚未解决。 看起来像 DMA IRQ 共享问题。

    如果你回答了一些问题,我会非常感激的。我真的很喜欢这个:(

    您使用什么示例与 McASP 配合使用? 我是否理解正确、您成功运行了 McASP 示例项目(确切地说是哪一个?)、没有 DMA 问题? 您的 McASP 示例使用多少个通道? 我们同时使用输入和输出通道。

    您是否遇到了示例项目的任何 IRQ 问题? 是否从 MMC/SD 卡运行 Linux? 问题在于、DMA 用于 Linux 中的 SD 卡访问、并且在使用来自 DSP 的 McASP 和从 Linux 读取/写入 SD 卡时可能会导致干扰/冲突。 您是否检查过这些情况?

    如果有任何提示,将非常感谢,因为有关这些问题的文件确实很少,甚至根本没有。

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

    您对 DTS 文件取代旧版 Linux 内核中的板级文件的理解是正确的。 这正是 DTS 的样子。

    PSC 控制器通过以下方式进行描述和控制:
    arch/arm/mach-davinci/da850/c
    arch/arm/mach-davinci/psc.c

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

    很高兴听到我不是唯一尝试这个的人! 我在 MCSDK 中遇到了类似的问题。 您使用的是 MCSDK 还是处理器 SDK? 用于 Linux 的 EDMA 驱动程序已在新内核中更改。 在 MCSDK 中、尽管电路板文件中有一个结构体、EDMA 驱动程序似乎不使用通道预留。 我肯定会遇到 Linux 和 RTOS 之间的 DMA 问题。 我可以启动 DSP、但一旦 Linux 内核加载了 DMA 驱动程序、DSP 代码就会停止接收中断。 我从未解决过这个问题-切换到新的内核/驱动程序解决了这个问题。

    如果您使用的是 MCSDK (看起来您不是这样、因为您使用的是 Remoteproc)、我不确定我会有多大帮助。 如果您使用的是 PSDK、我的看法如下:
    确保 DTS 包含 edma0的"ti、reserved-slot-ranges"参数。
    确保未加载音频驱动程序、但已在 DTS 中启用 McASP。
    您应该能够在 edma0下的 arch/arm/boot/dts/da850/dtsi 文件中找到 Linux 用于 DMA 的中断。 在本例中、它使用中断11和12。
    确保 PSC 已实际启用。 我已经多次忽视了这一点。 我使用的示例项目确实会尝试启用 LPSC7、但我注意到它没有被设置。 要查看这一点、我必须使用内存查看器找到 mdstat 寄存器(位于0x1e2781c)。

    您能否提供一些有关问题如何表现出来的更多信息? 是否有一些音频通过、但有压降、或者是否有音频通过?

    就我的设置而言、我使用的是 Processor SDK 4.0。 我正在使用的示例工程是使用中的 pdkProjectCreate.sh shell 脚本生成的 /packages/ti 目录。 源位于 /packages/ti/drv/mcasp/example/lcdkOMAPL138. 我正在使用串行器7和8通过 IIS 运行立体声输入和输出。 我正在运行具有网络引导(TFTP)和 NFS 的 Linux、并计划过渡到
    NAND 闪存、因此没有 MMC/SD 正在运行(尽管它未被禁用)。 我只在加载 Linux 音频驱动程序时遇到音频丢失问题。 除此之外、我一直顺利地将完美音频输入到输出(在手动启用 LPSC 后)。 也就是说、我不会对 ARM 处理器造成很大的负担、因此这可能会改变...

    以下是有关我在使用 MCSDK 版本时遇到的困难的论坛帖子的一些链接:
    e2e.ti.com/.../2188196
    e2e.ti.com/.../2176997

    我必须同意您的看法、即没有任何容易找到所有这些文档的地方。 我听说这是 TI 正在努力的一件事。 在我看来、保留一个包含有用内容链接和说明的文本文档对我来说非常有用。

    但愿这对您有所帮助。 这个论坛对我来说是很好的,我很高兴再次回来!

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

    感谢您提供信息。 我将尝试此操作并报告我的发现。

    Jeff
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PSC 现在已在引导时启用。 为了启用它、我在 da850/c 中将标志 CLK_PSC 添加到 McASP_clk 结构中

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

    您好 Jeff!

    非常感谢您的快速响应! 感谢你的帮助。

    我们从 MCSDK 开始尝试 IPC、但遇到了与 DMA 相同的限制/冲突。 我们所走的路跟你们一样,也有同样的陷阱和困难。 但那不是 DMA 阻止了我们。 是 IPC/SysLink、在这些软件版本上似乎没有足够的 L138板支持。

    现在我们使用的是 PSDK v4、IPC 的情况要好得多。 至少构建和加载用于在 DSP 上运行的从应用程序不再是一件麻烦。

    现在获取提示:

    1. DTS 已修改,我们已将"ti,EDMA-reserved-slot-ranges"语句添加到&edma0设备,保留前两个插槽:<0 2>。 BTW、语法完全是"ti、EDMA 保留插槽范围"、而您的变体已跳过"EDMA-"前缀。 此外、我对 Linux 内核进行了一些修改、以从 EDMA 驱动程序输出一些调试信息、以检查预留是否正确完成。

    2.我遇到的最新问题如下:一旦应用程序从 McASP 开始录制,Linux 将显示以下消息:

    EDMA 1c00000。EDMA:dma_ccertr_handler:无错误事件的错误中断!

    DSP 应用程序冻结。 似乎 DSP 本身不处理错误 IRQ。

    据我所见、我们的设置有两个主要差异:

    -Linux 引导源;

    IPC 和 DSP 加载方法。

    此外、我们还稍微修改了 LCDK 板的版本、删除了以太网芯片和 SPI 总线上的一些其他硬件。

    不同的硬件设置似乎是导致不同行为的原因。 如果您有任何机会查看该示例如何通过 Linux 对 SD 卡进行读/写访问、将会非常精彩。  

    此致、Denis