器件型号: 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 处理为致命错误、之后如果不完全复位和重新启动、就无法进行进一步的操作...