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.

[参考译文] TDA2P-ACD:未命中 IPC 消息

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1654799/tda2p-acd-missed-ipc-messages

器件型号: TDA2P-ACD

查询如下:
我们的实现流程、情况良好

  1. 系统上电

  2. 内核 A15 启动并执行一些 CRC 验证

  3. 内核 A15 等待内核 M40 请求 CRC 验证状态

  4. 内核 M40 最近开启(内核 A15 较早开启)并将验证状态请求发送到 A15

  5. M40 等待接收来自 A15 的响应、超时为 500ms

  6. A15 收到请求并以验证状态回复 M40

  7. M40 已收到并验证状态成功

坏情况

  1. 系统上电

  2. 内核 A15 启动并执行一些 CRC 验证

  3. 内核 A15 等待内核 M40 请求 CRC 验证状态

  4. 内核 M40 最近开启(内核 A15 较早开启)并将验证状态请求发送到 A15

  5. M40 等待接收来自 A15 的响应、超时为 500ms

  6. A15 从未收到请求,因此没有回复 M40 的验证状态

  7. M40 超时并报告故障(定义的错误代码)

在内核 A15 中、系统引导期间会进行多个任务初始化。 其中一项任务是日志接收器服务。 此任务是 50 毫秒周期性的。 它将 IPC 消息发送到 Remote Log Sender 的所有实例以 请求初始化远程日志、并提供共享存储器中远程日志缓冲区的地址。 没有确认 和 IPC RX。 而不管每个实例的状态如何。 此任务将 IPC 消息发送到所有内核 (EVE1、EVE2、M40、DSP1、DSP2)。

现在、我们怀疑是否由于 IPC 资源不存在而出现了坏情况(错过 IPC 消息)。 如果两个中断同时出现、可能是一些时序问题或邮箱 ISR 实施错过了中断。

随着对话的进行、我们可以进行更多讨论。

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

    Partha、

    我刚从出差回来,我将延迟 1-2 天赶上你的线程.

    感谢您的耐心。

    -Josue

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

    您好 Josue、  
    希望您做得好。 感谢您的答复。
    请查看我的疑问、期待 收到您的回复。

    内核 A15 未接收来自内核 M40 的 IPC 消息。 此 2~5 每 100 个复位周期发生 1 μ s。
    请参阅下面的:

    邮箱 ISR 实现方法 1.
    启动 Mailbox ISR
    1.读取中断状态(哪些队列有消息)
    2.当中断状态为非零时重复:
    对于每个队列:
    如果此队列有中断(消息可用):
    →从该队列中读取一条消息 (FIFO Pop)
    →处理消息(回调)
    → 立即清除此队列的中断
    结束于
    →再次读取中断状态
    END WHILE
    结束邮箱 ISR

    在这里、ISR 读取中断状态并开始处理队列
    对于每个队列:读取消息
    并 立即清除该队列的中断位 (请参阅以了解循环)

    邮箱 ISR 实现方法 2.
    启动 Mailbox ISR
    1.读取中断状态(哪些队列有消息)
    2.当中断状态为非零时重复:
    初始化 handledIrq = 0(用于跟踪已处理的队列)
    对于每个队列:
    如果此队列有中断(消息可用):
    →从队列中读取一条消息 (FIFO pop)
    →处理消息(回调)
    →将此队列标记为已处理
    (将其钻头添加到 handledIrq)
    结束于
    如果处理了任何队列:
    → 清除所有已处理队列的中断(单次写入)
    →再次读取中断状态
    END WHILE
    结束邮箱 ISR

    在这里、在此实施中、我已测试了~2500 多个复位周期、未出现问题
    在处理所有队列后清除中断、而不是立即在 for 循环中清除中断。 已使用累积掩码 handledIrq 完成


    问题:

    1.如何通过防止过早中断失效来解决问题? 方法 2 中未看到的问题。
    2.具体来说,当我们从队列中读取消息并在处理其他队列之前立即清除该队列的中断时,会发生什么问题?
    3.这种中断的早期清除是否会导致消息丢失或错误行为,如果是,在什么情况下会发生这种情况?


    感谢你能抽出时间。

    BR、
    Partha

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

    您好、 Partha Hazarika 、

    由于带宽的原因、我将不得不进一步延迟响应。 帮助我了解您使用的软件以及您使用的 SDK 版本是什么?
    您是否正在查看任何邮箱示例?

    -Josue

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

    我们不将 SDK 用于应用程序。 我们的次级引导加载程序 (SBL) 来自 TI SDK 03_05。
    我们的目标是在我们的应用中将 Core A15 与 Core M40 进行通信
    以下是我们进行通信的步骤:

    1. 系统上电

    2. 内核 A15 启动并执行一些 CRC 验证

    3. 内核 A15 等待内核 M40 请求 CRC 验证状态

    4. 内核 M40 最近开启(内核 A15 较早开启)并将验证状态请求发送到 A15

    5. M40 等待接收来自 A15 的响应、超时为 500ms

    6. A15 收到请求并以验证状态回复 M40

    7. M40 已收到并验证状态成功

    但我们面临一个问题、即 A15 有时无法接收来自 M40 的消息。
    消息由我们实现的 Mailbox ISR 处理。
    根据前面的评论、我尝试向您展示两种实现邮箱 ISR 的方法:方法 1 和方法 2。  
    我们注意到 A15 未能接收到消息发生在方法 1 中、但在方法 2 中未观察到故障。

    我们想了解为什么方法 2 有效。 请帮助我们检查一下。 我们需要您的建议或任何 TI 邮箱 ISR 实现示例。

    BR、
    Partha

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

    Partha、

    遗憾的是、仅支持 SDK 示例。 您是指编写自己的邮箱驱动程序吗?  
    -或-
    您是否使用此 SDK 中的驱动程序?

    TI SDK 03_05
     

    这是 RTOS SDK 版本号正确吗?

    -Josue