主题中讨论的其他器件:TMDS64EVM
工具与软件:
尊敬的 TI 员工:
我们具有以下设置:
0) TMDS64EVM 作为硬件
1) Processor SDK 10.00.07.04 + 相应的 Yocto for Linux 内核版本6.6.32-ti-01287
2) R5-0-0和 R5-0-1在拆分模式下运行
3)自定义固件,从 SRAM+TMC 在 R5-0-0上运行,带有 FreeRTOS
4)实现 RPMSG、分别在 Linux 和 R5之间实现 IPC
5)实现(至少高达90 %)平稳关机,即捕获来自 Linux 的"关机"信号,系统未初始化, 确认被发送回 Linux
下面的代码样片:
* IPC 回调
void m_cb(uint32_t remoteCoreId, uint16_t clientId, uint32_t msgValue, [[maybe_unused]]int32_t crcStatus, [[maybe_unused]] void *args)
{
IpcManager* mgr = static_cast<IpcManager*>(args);
if (clientId == (uint16_t)IPC::CID::IPC_NOTIFY_CLIENT_ID_RP_MBOX)
{
if (msgValue == (uint32_t)IPC::MsgType::IPC_NOTIFY_RP_MBOX_SHUTDOWN)
{
mgr->Shutdown(remoteCoreId);
}
}
}
*回复
void doShutdown()
{
//ACK the suspend message
IpcNotify_sendMsg(m_shutdownCoreId, (uint16_t)CID::IPC_NOTIFY_CLIENT_ID_RP_MBOX, (uint32_t)MsgType::IPC_NOTIFY_RP_MBOX_SHUTDOWN_ACK, 1u);
Board_driversClose();
Drivers_close();
//Disable interrupts
HwiP_disable();
/* For ARM R and M cores*/
__asm__ __volatile__ ("wfi" "\n\t": : : "memory");
}
我们面临的问题是:
显然,平稳关机运行正常,因为我们在 dmesg 输出中看到,remoteproc 关机不会抱怨超时:

奇怪的是、我们必须先停止 R5-0-1 (78200000.r5f)、然后再停止 R5-0-0 (78000000.r5f)、否则驾驶员会抱怨。 无论如何,这不是(直接)的问题。 问题是、停止 R5-0-0后、我们无法再次启动它。 不仅如此、整个电路板还挂起。 这个问题显然出现在一个很早的阶段、因为 R5-0-0不能脱离复位、在 dmesg 中只有2行:

...然后整个系统挂起。
问题:
- 这是否正常、R5-0-1必须首先停止?
- 是否是正确的停止/启动程序?
- 是否还必须执行其他操作才能启用重复的 rproc FW 加载和引导?
- 当然,为什么 remoteproc 驱动程序无法加载相同的固件两次,更不用说能够引导它?
谢谢、我很高兴在接下来的几天内对此主题进行更深入的讨论。
此致、
天使