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:J784S4 RTOS CSI 测试–测得的采集时间和实际采集时间之间存在较大的时序差异

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1635730/j784s4xevm-j784s4-rtos-csi-test-large-timing-discrepancy-between-measured-and-actual-capture-time

器件型号: J784S4XEVM

您好:  

我正在 J784S4 EVM 上测试 CSI。
使用该drv/csitx/examples/csitx_transmit_test示例在 RTOS 上执行该测试。

我试图在改变车道速度时测量时间、但我对测量的时间是否准确有一些疑问、因此我想要求澄清一下。

在测试设置中、使用 Samtec 电缆直接连接 CSI-TX 端口 1 和 CSI-RX 端口 2。

以下是使用 CCS 测得的结果:

CSITX_CAPT_APP: 1001 frames captured in 2604 msec at the rate of 384.40 frames/sec.

==========================================================
CSITX_TX_APP: Tx Status:
==========================================================
CSITX_TX_APP: Frames Transmitted: 1036
CSITX_TX_APP: Frames Transmitted with errors: 0
CSITX_TX_APP: FIFO Overflow Count: 0
CSITX_TX_APP:[Channel No: 0] | Frame Queue Count: 260 | Frame De-queue Count: 260 | Frame Repeat: 0 |
CSITX_TX_APP:[Channel No: 1] | Frame Queue Count: 260 | Frame De-queue Count: 260 | Frame Repeat: 0 |
CSITX_TX_APP:[Channel No: 2] | Frame Queue Count: 260 | Frame De-queue Count: 260 | Frame Repeat: 0 |
CSITX_TX_APP:[Channel No: 3] | Frame Queue Count: 260 | Frame De-queue Count: 260 | Frame Repeat: 0 |
CSITX_TX_APP: 1036 frames transmitted in 2526 msec at the rate of 409.34 frames/sec.


==========================================================
CSITX_TX_APP: Capture Status:
==========================================================
CSITX_TX_APP: Frames Received: 1036
CSITX_TX_APP: Frames Received with errors: 0
CSITX_TX_APP: Capture Application Completed!!!
CSITX_TX_APP: FIFO Overflow Count: 0
CSITX_TX_APP: Spurious UDMA interrupt count: 0
CSITX_TX_APP:[Channel No: 0] | Frame Queue Count: 263 | Frame De-queue Count: 263 | Frame Drop Count: 0 |
CSITX_TX_APP:[Channel No: 1] | Frame Queue Count: 263 | Frame De-queue Count: 263 | Frame Drop Count: 0 |
CSITX_TX_APP:[Channel No: 2] | Frame Queue Count: 262 | Frame De-queue Count: 262 | Frame Drop Count: 0 |
CSITX_TX_APP:[Channel No: 3] | Frame Queue Count: 263 | Frame De-queue Count: 263 | Frame Drop Count: 0 |

CSITX_Capt_app:在 2604ms 内以 384.40 帧/秒的速率捕获 1001 个帧
CSITX_TX_APP:在 2526 毫秒内以 409.34 帧/秒的速率传输 1036 帧

尽管 CCS 测量显示了上述结果、但在测量实际经过的时间时、完成 1000 帧的传输需要超过一分钟。

即使在禁用所有日志并再次运行测试后、它仍然持续需要一分钟。

从下面的代码来看、时间度量本身似乎没有任何明显的问题、但差异太大。

int32_t App_csirxTest(appTxObj* appObj)
{
    int32_t retVal = FVID2_SOK;
    uint32_t startTime, elapsedTime, fps;
    uint64_t tempVar;

    startTime = App_getCurTimeInMsec();
    /* Wait for reception completion */
    if (0U == appObj->captObj.numFramesToCapture)
    {
        /* indefinite capture */
        /* TODO: Press any key to stop capture */
    }
    else
    {
        while (appObj->captObj.numFramesRcvd < appObj->captObj.numFramesToCapture)
        {
            /* Pend on semaphore until last frame is received */
            SemaphoreP_pend(gRxLockSem, SemaphoreP_WAIT_FOREVER);
            /* Check for Image data here */
        }
    }
    elapsedTime = App_getElapsedTimeInMsec(startTime);

 

我不确定测试设置是否不正确、时钟配置是否有问题、或者直接电缆连接是否可能导致该问题。 希望获得任何帮助或指导。

谢谢你。

 

 

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

    你(们)好

    UART 打印可能会在打印语句中显示延迟、因此在示例中完成、但实际传输是使用计时器测量的、因此将按照 统计信息中的报告进行传输。  

    此致、

    Brijesh

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

    感谢您的答复。

    我知道 UART 输出可能需要很长时间。 但是、在这种情况下、我在传输过程中没有打印任何日志。 我只是在完成传输后才打印结果。

    根据日志、它显示大约 3000 毫秒、但实际上大约需要 90 秒才能完成。 因此、延迟似乎不太可能是由 UART 输出引起的。
    此外、即使在不使用 CCS 的情况下运行测试、仍需要很长时间才能完成。

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

    您好、

    我仍然认为 打印是降低打印速度的原因。 UART 以较慢的速度运行、例如 115200bpp、这是串行接口、因此发送这么多字符可能需要一些时间。  

    您能否以某种方式测量开始和停止之间的时间差?  

    此致、

    Brijesh  

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

    您好、

    这是 SDK 的示例代码、除了更改通道频带速度配置之外、未进行任何修改:

    (即使在运行示例而不修改此设置的情况下,也会出现相同的问题。)

        dphyCfg.leftLaneBandSpeed  = CSIRX_LANE_Band_SPEED_2000_TO_2250_MMbps;
        dphyCfg.rightLaneBandSpeed = CSIRX_LANE_Band_SPEED_2000_TO_2250_MMbps;
        appObj->createPrms.instCfg.dphyCfg.laneBandSpeed = CSITX_LANE_Band_speed_2000_to_2200Mbps;

    该示例发送了 10,000 个帧、帧大小为 1920 × 1080 × 2。
    appObj->captObj.numFramesToCapture寄存器位设为 1000。

    每次App_captFrameCompletionCb调用时、appObj->captObj.numFramesRcvd都会递增。
    接收到所有 1000 帧后、while 循环退出、和
    elapsedTime = App_getElapsedTimeInMsec(startTime);输出电压。

    int32_t App_csirxTest (appTxObj* appObj)
      int32_t retVal = FVID2_Sok;
      uint32_t StartTimeelapsedTime、fps
      uint64_t tempVar

      StartTime = App_getCurTimeInMsec ();
      /*等待接收完成*/
      if (0U == appObj->captObj.numFramesToCapture)
      {
        /*无限期捕获*/
        /*待办事项:按任意键停止捕获*/
      }
      暴露
      {
        while (appObj->captObj.numFramesRcvd < appObj->captObj.numFramesToCapture)
        {
          /*在信标上结束、直到接收到最后一帧*/
          SemaphoreP_Pend (gRxLockSem、SemaphoreP_WAIT_FOREVER);
          /*在此处检查图像数据*/
        }
      }
      elapsedTime = App_getElapsedTimeInMsec (StartTime);
      /* fps 计算和一些 x100 用于精度*/
      tempVar =((uint64_t)(appObj->captObj.numFramesRcvd * 100000U))/(elapsedTime)
      FPS =(uint32_t) tempVar;

      GT_4trace (CsitxAppTrace、GT_INFO、
         APP_NAME_RX “:%d 毫秒内捕获%d 帧“
         “以%d.%2D 帧/秒的速率\r\n“
         appObj->captObj.numFramesRcvd
         elapsedTime
         (FPS / 100U)、
         (FPS % 100U);

      返回 (RetVal);
    }

    如代码中所示、首先测量时间、然后打印时间、中间没有其他日志输出。

    该~是、尽管测得的历时约为 3000 μ s 5000ms(因频带速度而异)、

    打印此日志消息实际上需要大约 90 秒。

    CSITX_tx_app 第@ 598 行:src 开始!!
    >>>大约需要 90 秒才能打印下面的行
    CSITX_Capt_app:在 4854 毫秒内以 206.22 帧/秒的速率捕获 1001 个帧

    startTime在“Tx Start!!!“之后立即测量、然后elapsedTime进行相应的计算。

    /*稍后启动 CSITX、因为它是源/生成器。*/
    IF (FVID2_Sok == RetVal)

    RetVal += Fvid2_start (appObj->drvHandle、NULL);
    IF (FVID2_Sok!= RetVal)

    GT_0trace (CsitxAppTrace、GT_ERR、
    app_name “:TX 启动失败!!\r\n“);
    }
    暴露

    GT_0trace (CsitxAppTrace、GT_ERR、
    app_name “:TX 开始!!\r\n“);
    }
    }

    StartTime = App_getCurTimeInMsec ();
    /*等待接收完成*/
    if (0U == appObj->numFramesToTx)

    /*未确定传输*/
    /*待办事项:按任意键停止传输*/
    }
    暴露

    while (appObj->numFramesTx < appObj->numFramesToTx)

    /*在信标上 Pend、直到传输最后一帧*/
    SemaphoreP_Pend (gLockSem、SemaphoreP_WAIT_FOREVER);
    /*在此处检查图像数据*/
    }
    }
    elapsedTime = App_getElapsedTimeInMsec (StartTime);

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

    好的、这很奇怪。 我要做的是在测试之前和之后添加一些打印件、并从 UART 捕获此日志、然后查看我的机器上 UART 打印的差异。  

    此致、

    Brijesh

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

    我确认在使用自定义代码测量时间时报告了正确的时序、因此我将关闭此问题。

    耗时的部分似乎是memcmp这一节、但仍不清楚为什么在最终产出中没有反映这一时间。

    谢谢你。