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.

[参考译文] TDA4VH-Q1:不稳定流会使 CSIRX DMA 退出同步

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1647899/tda4vh-q1-erratic-stream-can-bring-csirx-dma-out-of-sync

器件型号: TDA4VH-Q1

(在 PSDK 11.2 上)

我一直在尝试 csirx 错误处理。

为此、我发送了一个包含大量错误的 MIPI-CSI 流。 流来自连接了 GMSL 的摄像头、通过 max96717 串行器和 max96714 解串器、以隧道模式传输。 为了注入错误、我使用了 max96717 串行器错误发生器。 我已将寄存器 0x2a 设置为 0x0 、即每 5120 位[原始 GMSL 流的]平均注入一次无限数量的 single-bit 错误。

这个不稳定的流被发送到 TDA4 CSIRX。  CSIRX 配置有错误旁路:
  instCfg.enableErrbypass   = UTRUE

接收到不稳定流时、csirx 驱动程序会报告 CSIRX_EVENT_TYPE_ERR_PAYLOAD_CRC、有时还会报告 CSIRX_EVENT_TYPE_ERR_FIFO_OVERFLE_STRM0 错误事件。

禁用串行器中的错误发生器后、csirx 停止报告错误事件。 接收看起来像是已恢复。

不过、有时(可能在 50%的实验中)在禁用错误发生器后 CSIRX 接收到的帧 会写入偏移为 8 字节的缓冲区。 帧的最后 8 个字节在下一个缓冲区的前 8 个字节结束。

错误率很高似乎会导致数据路径不同步?

这种错误行为仅在高错误率下重现。 在较低的错误率下、无法重现问题。

看起来它以某种方式连接到 FIFO_OVERRIDE_STRM0 — 当不报告这些错误时,没有观察到该错误行为。  然而、还观察到存在 FIFO_OVERFLOING_STRM0、但没有发生错误行为的情况。

当发生 FIFO_OVERRUN_STRM0 时、csirx 驱动程序当前尝试复位流。 我想此时还需要以某种方式刷新和/或复位 PSIL DMA、其中转发来自 stream0 的数据。 不过、我不太熟悉 TDA4 硬件来实现这一点。

欢迎对这种情况发表任何评论。

现在看起来需要将 CSIRX_EVENT_TYPE_ERR_FIFO_OVERFLE_STRM0 处理为致命错误、之后如果不完全复位和重新启动、就无法进行进一步的操作...

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

    您好、Nikita、

    我们的 CSI-CSI Rx 支持工程师正在休假、因此预计此主题的响应会延迟。

    此致

    Suman

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

    你好、 Nikita Yushchenko

    TRM 指示对流执行软复位以清除 FIFO。

    您是否可以尝试写入 CSIRX_stream0_ctrl 寄存器来触发流上的软复位?

    此致、
    Jared

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

    从我在 CsirxDrv_errorEventIsrFxn () 中可以看到的结果来看、驱动程序已经完成了此复位、以响应:

    ...
    if (1U == errStatus.fifoOverflowIrq[0U])

    {
        GT_assert(CsirxTrace,
        (FVID2_SOK == CsirxDrv_resetStream(instObj, 0U)));
        status.eventMasks |= CSIRX_EVENT_TYPE_ERR_FIFO_OVERFLOW_STRM0;
        instObj->status.strmFIFOOvflCount[0U]++;
    }
    ...


    和 CsirxDrv_resetStream () 发出您提到的重置。

    我想这里需要进行更深入的复位、这个复位也将涵盖 PSIL 层。

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

    你好、 Nikita Yushchenko

    您是否只看到 CSIRX_EVENT_TYPE_ERR_FIFO_OVERFLE_STRM0 错误、或者是否也看到其他流的溢出错误?

    您是否可以在出现错误后尝试调用 Fvid2_stop、Fvid2_dequeue、Fvid2_queue、然后调用 Fvid2_start?

    这将停止并清除缓冲区。 您可以查看 csirx_capture_test_main.c 中的一个示例。

    此致、
    Jared

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

    我将使用 TIOVX 与 TI 捕捉节点重现问题。  您是否有任何关于如何在 TI 捕捉节点内实施此功能的提示?

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

    你好、 Nikita Yushchenko

    您可以在回调中添加一个命令来初始化复位。

    不过、在执行此操作之前、您是否曾尝试过仅复位传感器/解串器、以防问题不在 CSIRX 模块中?

    此致、
    Jared