器件型号: J784S4XEVM
您好:
我有关于在使用 J784S4_EVM 进行测试时的 IPC 相关问题。
RTOS、Linux SDK 版本:11.01.
我正在使用引导系统 BootApp 以下阶段:
-
设置自动扭矩 (mcu1_0)
-
状态 1 (MCU2_0、MCU2_1)
-
阶段 2. (mcu3_0、mcu3_1、mcu4_0、mcu4_1)
-
阶段 3. (mpu1)—使用预构建的映像
此外、我还参考 IPC 示例(bootApp + IPC 示例)、实现了 MCU 内核之间以及 MCU 和 MPU 内核之间的 IPC 通信。
总流程如下:
-
等待 bootApp 映像加载完成。
-
映像加载完成后、启动 IPC 任务(此时 Linux 内核仍在引导)。
-
呼叫
Ipc_mpSetConfig、IpcInitPrms_init和Ipc_init。 -
致电
Ipc_loadResourceTable和Ipc_initVirtIO。 -
致电
RPMessageParams_init和RPMessage_init。 -
创建每个内核的 RPMessage 接收任务 (ti.ipc4.ping-pong、rpmsg_chrdev)。
-
创建 RPMessage 根据内核数发送任务。
-
创建
rpmsg_vdevMonitorFxn任务:-
Ipc_lateVirtioCreate调用和RPMessage_lateInit -
将
ti.ipc4.ping-pong服务通知IPC_MPU1_0使用RPMessage_announce。
-
/*------------------------------------------------*/
/* Size of various Memory Locations for each core */
/*------------------------------------------------*/
#define DMA_SPACE_SIZE 0x00100000 /* 1MB */
#define IPC_DATA_SIZE 0x00100000 /* 1MB */
#define EXT_DATA_SIZE 0x00100000 /* 1MB */
#define MEM_TEXT_SIZE 0x00100000 /* 1MB */
#define MEM_DATA_SIZE 0x00100000 /* 1MB */
#define DDR_SPACE_SIZE 0x00B00000 /* 12MB */
#define CORE_TOTAL_SIZE 0x01000000 /* 16MB (IPC_DATA_SIZE + R5F_MEM_TEXT_SIZE + R5F_MEM_DATA_SIZE + DDR_SPACE_SIZE) */
/*-----------------------------*/
/* Start address for each core */
/*-----------------------------*/
#define MCU1_0_ALLOCATED_START DDR0_ALLOCATED_START /* 0xA0000000 */
#define MCU1_1_ALLOCATED_START MCU1_0_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA1000000 */
#define MCU2_0_ALLOCATED_START MCU1_1_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA2000000 */
#define MCU2_1_ALLOCATED_START MCU2_0_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA3000000 */
#define MCU3_0_ALLOCATED_START MCU2_1_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA4000000 */
#define MCU3_1_ALLOCATED_START MCU3_0_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA5000000 */
#define MCU4_0_ALLOCATED_START MCU3_1_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA6000000 */
#define MCU4_1_ALLOCATED_START MCU4_0_ALLOCATED_START + CORE_TOTAL_SIZE /* 0xA7000000 */
(Linux 器件树中定义的 IPC 存储器区域和 linker.cmd 存储器布局的配置相同。)
我面临两个问题:
首先 MCU2_1、MCU3_1 和 MCU4_1 根本不工作。
启用或启动这些内核是否需要任何特殊配置?

/* Initialize the param */
RPMessageParams_init(&cntrlParam);
/* Set memory for HeapMemory for control task */
cntrlParam.buf = pCntrlBuf;
cntrlParam.bufSize = rpmsgDataSize;
cntrlParam.stackBuffer = pTaskBuf;
cntrlParam.stackSize = IPC_TASK_STACKSIZE;
cntrlParam.ctrlTaskPriority = IPC_CTRL_TASK_PRIORITY;
RPMessage_init(&cntrlParam);
run_rpmsg_receiver();
run_rpmsg_sender();
#if !defined(BUILD_MPU1_0) && defined(A72_LINUX_OS) && defined(A72_LINUX_OS_IPC_ATTACH)
TaskP_sleepInMsecs(30000);
/* Respond to messages coming in to endPt ENDPT_PING */
TaskP_Params_init(&taskParams);
taskParams.priority = 10;
taskParams.stacksize = 0x1000;
taskParams.arg0 = 0;
if (NULL == TaskP_create(&rpmsg_vdevMonitorFxn, &taskParams))
{
Ipc_Trace_printf("IPC VDEV Monitor task creation failed!!!");
}
//RecvRPMessage_lateannounce();
#endif /* !defined(BUILD_MPU1_0) && defined(A72_LINUX_OS) && defined(A72_LINUX_OS_IPC_ATTACH) */
秒 、在上面描述的代码中、如果TaskP_sleepInMsecs(30000);未设置为足够长的延迟、则会出现内核严重错误以及如下所示的错误。

即使延迟增加、virtio 设备也会按如下所示注册、但经过一段时间后、MCU1_0 上仍会出现错误。
(MCU2_0、MCU3_0 和 MCU4_0 继续正常运行。)

希望您能就此问题提供帮助。
谢谢你。