AWR2944: AWR2944 IPC通信异常

Part Number: AWR2944


我们在AWR2944 (带HSM)的稳定性测试中,访问了HSM后,有概率出现雷达不再发波情况,调试发现卡在Mailbox_waitWriteAckIntr()函数中,函数调用栈如下:
4c7d0de3-41d7-412c-9896-a56e28eb470e.png

通过打印调试信息,发现异常时,在访问HSM返回成功后,void SIPC_isr(void *args)中的pendingIntr值为0,导致gSipcTag未被成功设置为1。此时isAck  == 0 ,gSipcTag==0,程序就陷入了
Mailbox_waitWriteAckIntr(const Mailbox_RemoteCoreObj *obj, uint32_t timeToWaitInTicks)函数中的死循环。

 

 

  • 您好,收到了您的案例,调查需要些时间,感您的耐心等待。

  • 能否请您确认当前使用的SDK版本?此外,当此异常发生时,涉及通信的具体是哪两个cores?

  • 当前使用SDK版本是mmwave_mcuplus_sdk_04_04_01_02,在这个版本的基础上打了一个当时TI给的补丁包,补丁包地址:

     https://tidrive.ext.ti.com/u/g46pm_sOqdqRjqmI/813fe2c0-6072-4185-94b3-e227d380372e?l

    异常发生时,R5_0核与R4核

  • 请提供以下register dumps

    1. 寄存器 RSS_PROC_CRTL:RSS_CR4_BOOT_INFO_REG0 包含启动状态信息。该寄存器用于确认 RSS 邮箱子系统的配置是否成功。请提供寄存器地址 0x0520 0020 处的寄存器转储数据,该地址对应 RSS_PROC_CRTL:RSS_CR4_BOOT_INFO_REG0 寄存器。

    2. 请提供从地址 0xA4030000 至 0xA4032000 的 RSS_CR4_MBOX 寄存器转储数据。另外,能否在RSS_MBOX_READ_DONE_ACK [0]位被置为1后,提供地址范围0x02080000至0x020C0000的寄存器转储?该地址范围对应于矢量中断管理器(VIM)。

  • 好的,请问在ccs IDE上能看到RSS核的寄存器吗?怎么看?
    另外,目前Mailbox_waitWriteAckIntr(const Mailbox_RemoteCoreObj *obj, uint32_t timeToWaitInTicks)函数 的参数timeToWaitInTicks传入的值是SystemP_WAIT_FOREVER ((uint32_t)-1),这个参数是否合理?可否改为超时退出该函数,这个值应该设置多少合适?

  • 另外,这个问题我们现在比较紧急,是否有什么应对方案可以避免卡死在Mailbox_waitWriteAckIntr()中?

  • 在CCS中,

    连接到核心后,进入视图->内存浏览器。在内存浏览器中,可输入上述寄存器对应的地址并保存转储文件。

    参数timeToWaitInTicks被刻意设置为SystemP_WAIT_FOREVER((uint32_t)-1)。

    为确保核心间同步正确性,邮箱通信必须采用强制模式,因此设计明确支持两种模式:等待模式或非等待模式。在等待模式下,调用方必须阻塞直至收到写入确认,以避免邮箱事务不完整或不一致的情况。

    虽然技术上可配置有限超时值,但这将要求调用方额外实现超时检测与恢复处理。若缺乏此类处理,超时退出可能导致系统陷入未定义的跨核状态。

    因此,当前设计中采用 SystemP_WAIT_FOREVER 参数既符合规范要求,又能确保邮件箱通信的可靠性。

  • 0x05200020data.dat0xA4030000data.dat你好,0x05200020 和0x02080000地址数据。
    补充一下:我们的测试case是会上电20s,然后下电2s,如此循环。我们发现这个问题基本是发生在上电后的发波配置中。

  • 在下电的2S时,我们有监测到电压并未真正掉到0V,而是在3V多。

  • 另外,能否请您在RSS_MBOX_READ_DONE_ACK [0]位被置为1后,提供地址范围0x02080000至0x020C0000的寄存器转储?

    Also, could you please share a register dump from address range 0x02080000 to 0x020C0000 after RSS_MBOX_READ_DONE_ACK [0] bit is set to 1.