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.

[参考译文] DM3725:DSP 挂起且 ARM 无法读取 DSP 内部存储器

Guru**** 2616675 points

Other Parts Discussed in Thread: DM3730, DM3725

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/650039/dm3725-dsp-hangs-and-arm-is-not-able-to-read-dsp-internal-memory

器件型号:DM3725
主题中讨论的其他器件:DM3730

您好!

我有使用 DM3725和 DM3730的定制主板。 ARM 正在运行内核2.6.32的 Linux。 DSP 正在运行 DSP/BIOS 版本5.41.13.42

我们有一个 Linux 应用程序、它使用共享存储器与 DSP 通信、并从 DSP 内部存储器读取数据。

DSP 偶尔会挂起、无法使用 JTAG 调试器进行检查(将 CCS v3.3与 XDS100USB 结合使用)。 当 DSP 崩溃时、Linux 应用程序崩溃并出现"总线错误"、无法读取 DSP 内部存储器。 在系统正确运行时连接的 CCS 在我尝试停止它并且得到错误之前不会注意到任何情况:

"停止目标 CPU 时出现故障:错误0x00000020/-1202错误"

我已验证 PRCM 子系统(CM_FCLKEN_IVA2、CM_CLKEN_PLL_IVA2、...)的寄存器 在崩溃后仍然有效、它们是有效的。

我要问的是:什么会导致 ARM 无法访问 DSP 内部存储器?

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

    发生挂起/崩溃时、您是否尝试使用 JTAG 连接到 ARM 内核或 DSP 内核?

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

    我使用 CCS 连接到 DSP、然后它崩溃、当 Linux 应用程序退出并出现"总线错误"时、我尝试停止 DSP、并得到错误"停止目标 CPU 时遇到问题:错误0x00000020/-1202错误"。

    ARM 上的 Linux 正在正常运行(但 Linux 应用程序已崩溃、出现"总线错误")。

    我还尝试连接到 ARM、但遇到错误。 CCS 未正确配置为连接到 ARM、因为我从未能够这样做。

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

    对于调试多核应用(在 ARM/Linux 和 DSP/BIOS 上运行)、我们在一些 Wiki 和文档中提供了指南。 请参阅以下指针:

    processors.wiki.ti.com/.../Debugging_the_DSP_side_of_a_DSPLink_application_on_OMAP_using_CCS
    processors.wiki.ti.com/.../Debugging_DSP_side_using_DSPLink_NOTIFY_module
    processors.wiki.ti.com/.../CCS_Debugging_of_Linux_Applications_with_GDB

    e2e.ti.com/.../246887
    e2e.ti.com/.../110367
    e2e.ti.com/.../72470
    e2e.ti.com/.../35455

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

    [引用用户="Marco Moschetti"]我尝试停止 DSP,并得到错误"Trouble Halting Target CPU:Error 0x00000020/-1202 Error"。

    查看以下 e2e 线程是否有助于解决该错误:

    此致、
    帕维尔

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

    遗憾的是、这些信息都不有用。 我能够在 DSP 应用挂起之前对其进行调试:ARM/Linux 将其加载到内存中并启动它。 然后、我将调试器连接到 DSP、当我停止执行或放置一些断点时、它会按预期工作。 我可以看到源代码、单步执行指令、检查内存。 经过高度优化、我无法看到局部变量、但这是可以预料的。

    对于 DSPLink 的关注点:DSP 应用不编译或链接 DSPLink 的任何代码。 该库仅使用 PROC 组件进行编译、因此无需将其包含在 DSP 端。 在 ARM/Linux 端专门用于将应用程序加载到存储器中并启动应用程序。

    ARM 和 DSP 之间的唯一通信是共享存储器。 两者之间不使用中断。

    内部 DSP 存储器无法从 ARM 获得这一事实听起来是一个有趣的提示。 导致此行为的原因是什么? 对仍在等待中的 DSP 内部存储器的访问? 从 DSP 内核还是从 DMA?

    我无法利用 DSP/BIOS 异常处理。 我在手册上读到、DSP/BIOS 支持异常处理、并且默认情况下启用。 但是、如果点击一个无效的指针、调试器将无法停止 DSP、而我希望捕获此异常、并且要找到程序计数器、则会出现一些死区结束代码(即_SYS_ABORT、_SYS_ERROR、_SYS_EXIT)。

    我可以在映射文件中看到 DSP/BIOS 的 EXC 模块、因此我假设它已正确配置。

    880732d0  _EXC_clearLastStatus
    88075020  _EXC_Dispatch
    88073154  _EXC_exceptionHandler
    107ffb8c  _EXC_exceptionHook
    88073120  _EXC_EXTERNAL
    107ffb94  _EXC_externalHook
    88073100  _EXC_getLastStatus
    880730c0  _EXC_init
    88072e14  _EXC_INTERNAL
    107ffb90  _EXC_internalHook
    88072DE0  _EXC_NMI
    107ffb98  _EXC_nmiHook
    107ffb38  _EXC_RETURN Ptr
    880751e4  _EXC_setReturnPtr
    8807276c  _EXC_STATUS
    107ffb30  _EXC_sysTrapTable

    有处理异常的指南?

     

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

    [引用用户="Marco Moschetti"]内部 DSP 存储器无法从 ARM 中获得、这对我来说是一个有趣的提示。 导致此行为的原因是什么? 对仍在等待中的 DSP 内部存储器的访问? 来自 DSP 内核还是来自 DMA?[/QUERP]

    检查 DM3725器件勘误表(SPRZ319F)是否有帮助、检查建议

    通报1.35 -在 SDMA/IDMA 访问 DSP L2存储器期间可能会发生意外停止
    [引用用户="Marco Moschetti"]有一个异常处理指南?
    检查以下指针:
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    感谢您的支持。

    咨询1.35讨论额外的停转、不是永久性的、比通常预期的要多、因此只会有延迟、不会发生碰撞... 对吧?

    在勘误表(sprz319f.pdf)的第51页中、我读出:"唯一的问题是 SDMA/IDMA 访问可能会在每种情况下出现额外的意外停止"

    这是否可能导致 ARM 无法访问 DSP 内部存储器?

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

    我最终删除了对内部 DSP 存储器的所有 ARM 存取、问题现已修复。

    因此、这似乎是一个硬件问题