单片机/MCU论坛
直播中

kasdlak

8年用户 1140经验值
擅长:光电显示
私信 关注
[问答]

AN75779 FX3 + UVC切换到异步模式时丢失数据的原因?

我和我的团队正在TLE9243QK_BASE_BOARDAN75779 源代码上开发自定义 FX3 + UVC 应用程序 ,并在尝试实现同步通信时遇到问题。
到目前为止,我们按照KBA231897中详述的步骤实现了等时模式:
- cyfxuvcdscr.c:调整 UVC 描述符以支持同步(备用设置 0 和 1, EVAL_ISO_4DIR1400H 。端点描述符,更新描述符大小)
- uvc.h :从 KBA 源代码导入的宏(FX3_EP_ISO_VIDEO_SS_BURST/MULT、 EVAL_ISO_4DIR1400H /...SIZE_L /...SIZE_H)

- uvc.c :更新了 glProbeCtrl 结构,没有。TLE9243QK_BASE_BOARD EVAL_ISO_4DIR1400H/H 上每个有效负载的 RX 字节数

通过这些修改,我们能够将视频数据流传输到主机应用程序,并验证数据流是否配置为等时。
不过,收到的图像似乎有问题(见附件)。 TLE9243QK_BASE_BOARD在来自帧的原始数据中,似乎丢失了一些数据,并且当使用嗅探器(WireShark)比较通过 USB 接收的数据时,该数据在主机 USB 的接收处已经丢失,这意味着它是不是由 FX3 发送的。
数据流由 1950x1150 帧组成,每个像素由 2 个字节编码,每秒 30 帧。
我们的一个假设是,我们可能需要比原始配置更大的带宽,因此我们尝试将 DMA 缓冲区的大小增加到 24(CY_FX_EP_BULK_VIDEO_PKTS_COUNT (0x18)),但收到的帧仍然显示出明显由数据丢失引起的问题。
我们在配置中遗漏了什么吗? 关于问题的性质和解决方法,您有什么想法? 如有任何帮助,我们将不胜感激。


回帖(1)

陈博

2024-3-6 17:01:52
在切换到异步模式时丢失数据的原因可能是由于数据传输速度不匹配或缓冲区溢出引起的。下面是一些可能导致数据丢失的常见原因:

1. 数据传输速度不匹配:在异步模式下,数据的传输速度可能会受到主机和设备之间的USB总线带宽限制。如果主机无法接收设备发送的数据,或者设备无法及时发送数据以满足主机的要求,就会发生数据丢失。

2. 缓冲区溢出:在异步模式下,设备端和主机端都会使用缓冲区来存储数据。如果设备端的缓冲区已满并且无法继续接收数据,或者主机端的缓冲区已满并且无法继续接收数据,就会发生数据丢失。

为了解决这些问题,您可以尝试以下措施:

1. 优化数据传输速度:您可以尝试调整数据传输的速率,以确保主机和设备之间的数据传输速度能够匹配。您可以修改设备端和主机端的代码以提高数据传输速度或减少数据传输负载。

2. 增大缓冲区大小:您可以尝试增大设备端和主机端的缓冲区大小,以便更多的数据可以存储在缓冲区中,从而减少缓冲区溢出的可能性。请确保增大缓冲区大小不会引起其他问题,例如延迟增加或内存消耗过大。

3. 实现数据丢失处理机制:如果数据丢失不可避免,您可以在代码中实现一些数据丢失处理机制。例如,在设备端,您可以记录丢失的数据包数量并进行相应的处理。在主机端,您可以请求设备重新发送丢失的数据。

希望这些提示对您有所帮助,祝您成功解决问题!
举报

更多回帖

×
20
完善资料,
赚取积分