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.

[参考译文] J784S4XEVM:重新引导测试期间的 CSI UDMA 问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1647135/j784s4xevm-csi-udma-issue-during-reboot-test

器件型号: J784S4XEVM

您好:

我有一个与间歇性 CSI UDMA 相关的错误相关的问题。

(SDK 版本:RTOS 11.01、Linux:11.01)

(BOOT_APP 引导模式)

在 CSI 测试期间、我正在运行重复的重新启动测试、偶尔会看到与 UDMA 相关的错误。

在我的实现中、RX 任务初始化 UDMA、TX 任务仅使用由 RX 任务初始化的 UDMA 句柄。


// RX Task
static int32_t CsirxApp_init(Csi_commonObj* appCommonObj)
{
    int32_t retVal = FVID2_SOK, dmaStatus = UDMA_SOK;
    Udma_DrvHandle drvHandle;
    Udma_InitPrms   udmaInitPrms;
    Fvid2_InitPrms initPrms;

        /* Fvid2 init */
    Fvid2InitPrms_init(&initPrms);
    initPrms.printFxn = &App_fvidPrint;
    retVal = Fvid2_init(&initPrms);
    if (FVID2_SOK != retVal)
    {
        GT_0trace(CsirxAppTrace, GT_ERR,
                  APP_RX_NAME ": Fvid2 Init Failed!!!\r\n");
    }

    drvHandle = &appCommonObj->udmaDrvObj;
    UdmaInitPrms_init(UDMA_INST_ID_BCDMA_0, &udmaInitPrms);
    udmaInitPrms.printFxn = &App_dmaPrint;
    dmaStatus = Udma_init(drvHandle, &udmaInitPrms);
    if(UDMA_SOK != dmaStatus)
    {
        retVal = FVID2_EFAIL;
        GT_0trace(CsirxAppTrace, GT_ERR,
                  APP_RX_NAME ": UDMA Init Failed!!!\r\n");
    }

// TX Task
static int32_t CsitxApp_init(Csi_commonObj* appCommonObj)
{
    int32_t retVal = FVID2_SOK;
    Udma_DrvHandle drvHandle;

    Csitx_initParamsInit(&appCommonObj->txinitPrms);
    drvHandle = &appCommonObj->udmaDrvObj;

    appCommonObj->txinitPrms.drvHandle = drvHandle;      
    retVal = Csitx_init(&appCommonObj->txinitPrms);
    if (FVID2_SOK != retVal)
    {
        GT_0trace(AppTrace, GT_ERR,
                  APP_TX_NAME ": System Init Failed!!!\r\n");
    }


    return (retVal);
}

TX 任务使用等待 RX 初始化 Semaphore_pend()
RX 任务完成初始化后、它将发送 Semaphore_post() 到 TX 任务、然后调用 Fvid2_start()

一旦 TX 任务从 RX 任务接收到信标,它就会继续自己的初始化,然后调用 Fvid2_start()

错误消息如下所示。
没有固定的模式、但大约在大约 30 个重启测试周期后发生一次。

 

CSI_RX_TASK:===================Setup Details===================
csi/csi_rx_func.c @ Line 338: CSI_RX_TASK: Three Capture Instance 0, 1, 2 instance
CSI_RX_TASK: Capture DF:0x2a
CSI_RX_TASK: Capture Resolution:1024 x 131
CSI_RX_TASK:===================================================

Clock Freq: CSITX_MOD_ESC_CLK = 20000000Hz
Clock Freq: CSITX_MOD_DPHY_TXBYTECLKHS_CLK = 0Hz
Clock Freq: CSITX_MOD_VBUS_CLK = 250000000Hz
Clock Freq: CSITX_MOD_MAIN_CLK = 500000000Hz
CSI_RX_TASK:Set D-PHY Configuration Successful for CSIRX instance 0!!!
CSI_RX_TASK:Error Events Registration Successful for CSIRX instance 0!!!
CSI_RX_TASK: CSIRX Capture created for CSIRX instance 0
CSI_RX_TASK:Set D-PHY Configuration Successful for CSIRX instance 1!!!
CSI_RX_TASK:Error Events Registration Successful for CSIRX instance 1!!!
CSI_RX_TASK: CSIRX Capture created for CSIRX instance 1
CSI_RX_TASK:Set D-PHY Configuration Successful for CSIRX instance 2!!!
CSI_RX_TASK:Error Events Registration Successful for CSIRX instance 2!!!
CSI_RX_TASK: CSIRX Capture created for CSIRX instance 2
[UDMA] [Error] Sciclient event config failed!!!
[UDMA] [Error] Event config failed!!
[UDMA] Assertion @ Line: 991 in src/udma_event.c: (UDMA_EVENT_INVALID != vintrNum) : failed !!!
[UDMA] [Error] Sciclient event config failed!!!
[UDMA] [Error] Event config failed!!
src/csitx_drvUdma.c @ Line 332: [ERROR]UDMA CQ event register FAILED!!!
src/csitx_drv.c @ Line 345: Instance create failed!!!
src/csitx_drv.c @ Line 1392: [ERROR]UDMA channel close FAILED!!!
src/csitx_drv.c @ Line 1392: [ERROR]UDMA channel close FAILED!!!
src/csitx_drv.c @ Line 1392: [ERROR]UDMA channel close FAILED!!!
src/csitx_drv.c @ Line 1392: [ERROR]UDMA channel close FAILED!!!
src/csitx_drv.c @ Line 376: Create failed for given configuration
src/fvid2_drvMgr.c @ Line 777: Driver create failed!!

如果有任何推荐的解决方案或解决方法、请告知可能导致此问题的原因吗?

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

    您好、

    我们的专家目前已离职。 请预计响应会延迟。

    此致、
    Tanmay

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

    尊敬的 Hojung Bae

    您能否测试为 CSI-TX 创建不同的句柄?

    此致、
    Jared

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

    您好 Jared、

    您是否建议我使用不同的 UDMA 实例而不是 UDMA_INST_ID_BCDMA_0、以便 TX 可以使用自己的独立 UDMA?

    目前、我已使用 UDMA_INST_ID_MAIN_0 复制接收到的 CSI 数据、

    UDMA_INST_ID_MCU_0 使用 ETH、 因此不能将其用于 TX。

    是否有其他可以使用的 UDMA 实例?

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

    尊敬的 Hojung Bae

    否、UDMA 实例应保留为 UDMA_INST_ID_BCDMA_0。 另一方面、CSI-RX、CSI-TX 和 UDMA 之间的交互似乎没有问题。

    看起来在 UDMA 初始化过程中发生了错误、对吧? 嗯  

    您能否发送正常运行/示例的日志?

    错误消息:“[UDMA]【错误】Sciclient 事件配置失败!!!“ 由于资源分配错误而出现的常见故障。 您是否更改了有关资源分配的任何内容?

    此致、
    Jared

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

    没有与 UDMA 配置相关的更改。

    除了调用 UdmaInitPrms_init()Udma_init(),我没有做任何其他 UDMA 相关的更改。 我主要通过参考现有 drv/csitx drv/csirx 代码和代码来实现代码。

    下面是运行中的日志。

    root@j784s4-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0
    CSI RX PMSet 0
    CSI_RX_task:CSI 任务 — 启动!!
    CSI_RX_task:================ 设置详细信息====================
    csi/CSI_rx_func.c @行 351:CSI_RX_task:三个捕获实例 0、1、2 实例
    CSI_RX_task:捕获 DF:0x2a
    CSI_RX_task:捕获分辨率:1024 x 131
    CSI_RX_task:=================================================
    CSI_RX_task:为 CSIRX 实例 0 设置 D-PHY 配置成功!!!
    CSI_RX_task:CSIRX 实例 0 的错误事件注册成功!!!
    CSI_RX_task:为 CSIRX 实例 0 创建了 CSIRX 捕获

    时钟频率:CSITX_MOD_ESC_CLK = 20000000Hz
    时钟频率:CSITX_MOD_DPHY_TXBYTECLKHS_CLK = 0Hz
    时钟频率:CSITX_MOD_VBUS_CLK = 250000000Hz
    时钟频率:CSITX_MOD_MAIN_CLK = 500000000Hz
    IPC_SETUP(内核:MCU2_0 3)…
    CSI_RX_task:为 CSIRX 实例 1 设置 D-PHY 配置成功!!!
    CSI_RX_TASK:CSIRX 实例 1 的错误事件注册成功!!!
    CSI_RX_task:为 CSIRX 实例 1 创建了 CSIRX 捕获
    CSI_RX_task:为 CSIRX 实例 2 设置 D-PHY 配置成功!!!
    CSI_RX_TASK:CSIRX 实例 2 的错误事件注册成功!!!
    CSI_RX_task:为 CSIRX 实例 2 创建了 CSIRX 捕获
    CSI_TX_task:CSITX DRV 已创建
    CSI_TX_task:CSITX 实例的 CSITX 帧起始中断:10 秒内 1 为 1!!!
    IPC_MPU1_0 开始……
    IPC_设置完成....

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

    尊敬的 Hojung:

    Jared 将在下周结束之前度假、因此该主题的回复将延迟。

    无论如何,我已经看了这个线程,我怀疑这些症状都指向一个缺失的变量初始化,清理或一些重新初始化步骤。  

    您是循环运行测试、还是正确地重新启动? 如果确实是后者、则 RM 状态机应处于复位状态、并且所有 RM 请求应在每次运行时产生完全相同的资源。 没有资源泄漏等问题

    请确保全局变量均已正确初始化、这通常由链接器设置决定。  

    此致

    Suman

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

    尊敬的 Suman:

    我执行了两种类型的重新引导测试。

    第一种是使用宏的自动测试、其中 Linux reboot 命令会重复执行。 第二种是使用 EVM 板上的 Reset 按钮进行手动测试。

    我不会在应用程序内部的循环中重复运行测试。

    这两种情况下都发生问题、无论系统是使用 Linux reboot 命令重新启动、还是使用 EVM Reset 按钮重置。

    关于全局变量,除了信标和实际的数据缓冲区,主要全局对象几乎是唯一的 Csi_commonObj gAppCommonObj;,其中包含 TX/RX 实例对象。

    现在、我将再次检查全局变量初始化。 谢谢你

    /*========================================================================= */
    /*               全局变量                 */
    /*========================================================================= */
    /*应用程序通用对象*/
    extern CSI_commonObj gAppCommonObj

    /*要在应用程序中使用的 CSIRX 实例*/
    uint32_t  gAppCapInst[CSIRX_INSTANCE_ID_MAX] = {CSIRX_INSTANCE_ID_0、CSIRX_INSTANCE_ID_1、CSIRX_INSTANCE_ID_2 }


    /*用于保存数据的内存缓冲区*/
    Uint8_t gFrmDropBuf[APP_TOTAL_CAPT_INST][(APP_RX_FRAME_PITCH)] __attribute__(( aligned (128)、 section(“.DATA_BUFFER“));
    UINT8_t gFrms[APP_TOTAL_CAPT_INST][(APP_RX_FRAMES_PER_CH * APP_RX_CH_NUM)][APP_RX_FRAME_SIZE] __attribute__(( aligned (128 )、section(“.DATA_BUFFER“));

    Uint8_t gRxInst0Buf[(APP_RX_FRAMES_PER_CH * APP_RX_CH_NUM )][APP_RX_FRAME_SIZE]__ATTRIBUTLE__ ( aligned (128 )、section(“.csi0_DATA_BUFFER“));
    Uint8_t gRxInst1Buf[(APP_RX_FRAMES_PER_CH * APP_RX_CH_NUM)][APP_RX_FRAME_SIZE]__ATTRIBUTLE__ ( aligned (128 )、section(“.csi1_DATA_BUFFER“));
    Uint8_t gRxInst2Buf[(APP_RX_FRAMES_PER_CH * APP_RX_CH_NUM )][APP_RX_FRAME_SIZE]__ATTRIBUTLE__ ( aligned (128 )、section(“.csi2_DATA_BUFFER“));


    CSI_config_t gRxCfgBuf[APP_TOTAL_CAPT_INST]__attribute__ (( aligned (32)、 section(“.CSI_CONFIG_BUFFER“));

    extern uint8_t gTxFrms[APP_TX_TEST_INST_NUM][(APP_TX_FRAMES_PER_CH * APP_TX_CH_NUM)][APP_TX_FRAME_SIZE]

    /*信标以指示应用程序完成*/
    Semaphore_handle gAppRxReadySem
    extern Semaphore_handle gAppTxReadySem

    static SemaphoreP_Handle gRxDoneSem[APP_TOTAL_CAPT_INST]
    静态 uint8_t gCsiRxDoneStack[APP_TOTAL_CAPT_INST][CSIRX_DONE_STACKSIZE __ATTRIBUTLE__(aligned (32));

    #if defined(FreeRTOS)
    /*捕获测试任务句柄*/
    extern TaskP_handle gCsirxTask
    #endif

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

    尊敬的 Hojung:

    现在、我将再次检查全局变量初始化。 谢谢

    好的、没问题。

    TI SDK 会在 Vision Apps 中提供一些实用程序测试。 我鼓励您将这些资源用于您尝试测试的任何内容。

    希望您使用 Vision Apps 框架构建您的测试应用程序。

    此致

    Suman