FX3使用AN75779图像丢帧的问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
user_2841216
Level 1
Level 1
First question asked First reply posted First like given

您好:

     我在使用AN75779进行UVC传输的时候,发现在上位机端(virtualDub软件和ampcap以及我们自己编写的DirectShow程序)实时传输的时候偶尔会有图像帧丢失。丢失的频率在不同的电脑上会有不用的结果,有的电脑很久都不会丢一帧,有的电脑会很快丢失。丢帧的瞬间,从BusHound上观察会丢失一定量的数据包,FX3的print输出会显示如下信息:

UVC: Completed 527 frames and 17 buffers

UVC: Completed 556 frames and 74 buffers

UVC: Completed 585 frames and 130 buffers

DMA Reset Event: Commit buffer failure

Application Stopped

Application Started

UVC: Completed 0 frames and 0 buffers

DMA Reset Event: Commit buffer failure

Application Stopped

Application Started

UVC: Completed 0 frames and 0 buffers

UVC: Completed 28 frames and 119 buffers

     为了进行丢帧测试,我在FPGA端使用模拟的FV,LV,PCLK以及8bit的数据bus进行UVC的图像数据输入,目的是为了保证前端数据的可靠性。图像大小为1280*1024,帧率为30FPS,PCLK为90M。DMA缓存区大小设置为16384.

     我已经阅读过论坛上的相关解决方案Invalid Sequence Error in Multi-Channel Commit Buffer - KBA218830 (ZH) ,并按照上面进行修改缓存区(修改为32K),但只是稍许降低了丢帧的概率,并没有解决这个问题。我们的系统对实时性要求较高,不允许有较多的丢帧,目前大概平均4000帧左右就要丢帧一次,这大大超出了我们的承受范围。

     1、请问对于这个丢帧的现象是由于什么原因引起的?有没有较好的解决方案?

     2、丢帧问题是不可避免的吗?若是的话,能采用何种方式弥补图像的丢失?

0 点赞
1 解答
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

您的第一个问题是没有确切数据的,丢帧的问题受到多种因素的影响,主机端的驱动,USB带宽的分配,这些都可能影响USB数据的传输。只能说在占用带宽越小,可使用带宽越大的情况下丢帧的概率会降低。ISOC传输的原理是预先分配定量带宽,而BULK模式则是有多少带宽就使用多少带宽,从这点来说,ISOC模式在可靠性上是强于BULK模式的。ISOC传输模式最大传输速率低于BULK模式,约为373M(仅在win10驱动下)。请参考FX3 SDK中的USBVideoClass这个例程。

.

在原帖中查看解决方案

3 回复数
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

你这种丢帧频率在UVC应用中属于很正常的现象。如果对帧率和图像大小都有要求,可以考虑采取一些压缩格式,减小使用的带宽。从bulk传输模式的原理来说,这本身就是一种数据传输优先的方式。Bulk传输模式支持的data brust是不要求发送的每个包都返回ACK的。如果你们是USB3.0的设备,可以尝试改成isochronous 传输模式。

user_2841216
Level 1
Level 1
First question asked First reply posted First like given

     我们使用的是USB3.0接口传输,我们不能采用压缩数据进行传输,只能传输原始数据。

1、请问USB3.0下,bulk模式最高能在多少带宽的时候不丢帧?

2、请问改为isochronous模式是否可以解决丢帧的问题?isochronous模式在USB3.0下的传输速率最高能到多少?

3、是否有FX3使用isochronous进行UVC传输的示例?

     谢谢!

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

您的第一个问题是没有确切数据的,丢帧的问题受到多种因素的影响,主机端的驱动,USB带宽的分配,这些都可能影响USB数据的传输。只能说在占用带宽越小,可使用带宽越大的情况下丢帧的概率会降低。ISOC传输的原理是预先分配定量带宽,而BULK模式则是有多少带宽就使用多少带宽,从这点来说,ISOC模式在可靠性上是强于BULK模式的。ISOC传输模式最大传输速率低于BULK模式,约为373M(仅在win10驱动下)。请参考FX3 SDK中的USBVideoClass这个例程。

.