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.

[参考译文] SK-AM62A-LP:SDK 10.1:尝试深度睡眠似乎会导致 FreeRTOS 内核中的 DM 置位

Guru**** 2399305 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1470941/sk-am62a-lp-sdk-10-1-attempting-deep-sleep-seems-to-cause-dm-assertion-in-freertos-kernel

器件型号:SK-AM62A-LP

工具与软件:

您好!

在 SDK 10.1中、我们观察到、当我们尝试通过"rtcwake -s 30 -m mem或""将 EVM (修订版 PROC135E3)进入深度睡眠模式时echo mem > /sys/power/state、DM R5通常(始终是?) 尝试打印断言故障、系统似乎挂起。 在这种状态下、感应电阻器上的功率读数 在唤醒时基本上与这些值相匹配。  在分频器之后、接下来是 SDK 10.1的一些进一步调试详细信息。

在禁用 console_suspend 的情况下、我们看到的其他症状与 processor-sdk-AM62A 相同:SDK 中的 Deep Sleep Error 10.00:首先在 ti_sci_suspend ()中出现邮箱超时 、然后在 e5010_jpeg_enc 内核模块中出现错误 恢复 或者、如果 e5010_jpeg_enc  在尝试睡眠之前被卸载、则会出现进一步的 ti-sci 错误和 MMC 超时。  e5010_jpeg_enc 和 MMC 错误可能只是系统从失败的暂停和尝试恢复中进入不良状态所导致的?

除了 Linux 中的类似症状之外、SDK 10.0和10.1中的 DM 行为似乎也是如此 巨大 :在10.0中,我们没有观察到断言,而 DM 似乎是让它到 WFI (是否 e5010_jpeg_enc 驱动程序是首先卸载的);通过 JTAG 连接到 R5(或随后停用并暂停执行),它的 PC 始终是 WFI 之后的一条指令;大概调试器会从 WFI 唤醒它? 不过、即使 DM 在 SDK 10.0中将其设置为 WFI、感应电阻器上的功率读数也更接近唤醒时的值。

在 SDK 9.2中、卸载 DSP Remoteproc 模块后(由于该版本的 DSP 固件不支持正常关断)、睡眠似乎成功(综合而言、我在检测电阻上读取~20-30mW)、因此这看起来像是 SDK 10.0/10.1中的回归。 在9.2中、不需要卸载 e5010_jpeg_enc 驱动程序、也不会打印邮箱或其它错误。 与 SDK 10.0中一样、通过 JTAG 连接到 R5会显示出该引脚确实绑定到了 WFI。

我们在 EVM 上测试的所有三个 SDK 版本都是 此处的 edgeai 图像、 未进行任何修改。

另请注意、DM 在至少 SDK 9.2、10.0和10.1中似乎有一个占位符版本字符串。

9.2:

##DM Built On: Apr  2 2024 18:17:23
##Sciserver Version: v2023.11.0.0REL.MCUSDK.MM.NN.PP.bb
##RM_PM_HAL Version: vMM.NN.PP

10.0:

##DM Built On: Aug 13 2024 21:19:51
##Sciserver Version: v2023.11.0.0REL.MCUSDK.MM.NN.PP.bb
##RM_PM_HAL Version: vMM.NN.PP

10.1:

##DM Built On: Dec 10 2024 20:25:19
##Sciserver Version: v2023.11.0.0REL.MCUSDK.MM.NN.PP.bb
##RM_PM_HAL Version: vMM.NN.PP


不幸的是、SDK 10.1中的断言消息被截断为~36或37个字符、非常一致、这只足以打印FreeRTOS-Kernel/t发生该断FreeRTOS-Kernel/ta言的文件的""部分、但有一次、它确实成功打印了""、因此断言可能出现在 tasks.c 中

 通过 JTAG 检查 R5、一些内核寄存器包含  相关探测字符串的地址、这些字符串可能是声明消息的其余部分:

  • R1: 0x9D051194 ->"" FreeRTOS-Kernel/queue.c
  • R2: 0x9D050E79 ->"" xQueueGiveMutexRecursive
  • R5: 0x9D0524E6 ->"" vTaskSwitchContext
  • R6: 0x9D0511AC ->"" FreeRTOS-Kernel/tasks.c
  • R9: 0x9D04A559 ->"" (uint32_t)(( ( &( pxReadyTasksLists[ uxTopPriority ] ) )->uxNumberOfItems ) > 0)

根据 MCU+ SDK 10.01.00.33中的源代码,  R9指向的断言条件似乎是 vTaskSwitchContext()通过调用宏而出现在中 taskSELECT_HIGHEST_PRIORITY_TASK(),因此  这确实是 DM 正在尝试打印的。

我看到日志记录函数使用信标、释放它可能会调用 xQueueGiveMutexRecursive();可能出现了第二个断言、这 可能是 第一个断言 没有完成打印的原因? DM 结束在一个紧密循环中轮询堆栈上的内存位置(值为1、与0相比较);可能是 _DebugP_assertNoLog()或中的一个 forever 循环_DebugP_assert()

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

    尊敬的 Zach:

    对于延迟、我们深表歉意。 我不是 RTOS 专家、因此需要咨询 DM 固件的开发团队有关此项的信息。 请注意、星期一是 TI 的假日。

    此致、

    Anshu

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

    谢谢、祝您假期愉快!

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

    尊敬的 Zach:

    JPEG 编解码器挂起/恢复有一个潜在的解决方案。 现在正在开发一个补丁、我可以尽快分享它。

    让我们在补丁准备就绪时尝试它、看看是否有任何问题得到解决。 这可能是因为 JPEG 编解码器未被暂停、Linux 内核在将最后一个 A53放入 WFI 之前崩溃(或者它在暂停序列期间捕捉到错误、但无法恢复)。 我想 这会导致 SoC 暂停、而功耗却没有反映出这一点。

    关于 RTOS/DM 固件的输出、我还没有得到相关更新。


    此致、

    Anshu

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

    尊敬的 Anshu:

    是否有预期的驱动程序补丁时间表?

    您是否听到 DM 固件团队的任何消息? 由于 JPEG 驱动程序 在恢复过程中发生错误、因此在邮箱超时后、FreeRTOS 断言可能是此处的根本原因。

    谢谢!
    Zach

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

    尊敬的 Zach:

    该补丁暂时处于暂停状态、因为 AM62A 上的边缘 AI 堆栈目前不支持暂停/恢复。 没有解决此问题的预期时间表。

    此致、

    Anshu

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

    尊敬的 Anshu:

    AM62A 上的边缘 AI 堆栈目前不支持暂停/恢复。

    您能否详细说明一下?

    我们的理解是、从 SDK 9.2开始、阻止开箱即用暂停/恢复的唯一因素是 DSP 没有响应来自 Remoteproc 驱动程序的正常关断请求;如上所述、在 卸载 DSP remoteproc 驱动程序(如果我正确理解、甚至不真正停止 DSP、因为关断请求仍超时)的情况下、我们看到9.2 edgeai 映像会通过 JTAG 成功地暂停和恢复功耗跟踪(SYSFW)。

    这件事碰巧起作用、是不是偶然的?

    没有可解决此问题的预期时间表。

    这是专门针对 JPEG 驱动程序补丁程序还是整个暂停/恢复功能(包括 FreeRTOS 断言)?

    谢谢!
    Zach

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

    尊敬的 Zach:


    并非所有边缘 AI 组件都支持低功耗模式、这意味着并非所有组件都存在上下文保存/恢复或正常关断机制。 随着边缘 AI 组件不断开发出更多的功能并增加复杂性、这种缺少暂停/恢复支持的情况变得更加明显、删除 DSP Remoteproc 驱动程序等简单的权变措施可能无法解决总体问题。

    最初与开发团队的讨论导致"修复"JPEG 编解码器驱动程序作为一种可能的解决方案。 但经过进一步评估、JPEG 编解码器可能比最初意识到的要涉及更多的边缘 AI 组件、因此"修复驱动程序"并不能解决问题。

    这可能与您在本线程中讨论的 FreeRTOS 断言不直接相关、但当 LPM+EdgeAI 总体运行无法按预期运行时、很难提供调试步骤/解决方案。  

    此致、

    Anshu

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

    尊敬的  Anshu:

    感谢您对边缘 AI 图像的说明、尽管我们有些失望地听到目前尚不确定对睡眠的支持。

    默认(非 edgeai)映像上是否支持暂停/恢复? 我已经能够在我们的定制硬件上测试10.1默认映像,并且它也不能挂起邮箱超时,虽然我 在这种情况下看不到任何声明打印从 DM。

    如果在某个地方发布了 EVM 的默认映像、我可以看到 EVM 是否与默认映像的失败方式相同。

    谢谢!
    Zach

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经能够在我们的定制硬件上测试10.1默认映像、而且它也未能以邮箱超时暂停、尽管在 这种情况下我看不到 DM 输出任何声明。

    抱歉、这可能不完全准确。 我们注意到、我们的10.1默认映像仍然具有10.0固件。

    我能够在我们的硬件上测试具有10.1固件的10.1基础映像,但它仍然表现相同: 无法挂起邮箱超时,没有声明由 DM 打印。

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

    您好、该主题的专家不在办公室。 期待下周回复。

    此致、

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

    尊敬的 Zach:

    开发团队构建了一个用于内部测试的"默认"非边缘 AI 映像、但不打算在外部共享。

    谢谢!

    Anshu