Skip navigation
Home > All Places > USB > USB Superspeed Peripherals > Blog > Authors YiZ_31

USB Superspeed Peripherals

1 Post authored by: YiZ_31 Moderator
YiZ_31

UVC应用USB协议包分析

Posted by YiZ_31 Moderator Dec 17, 2019

以AN75779的High speed 配置为例,FX3 传输 每像素2 byte 640*480 分辨率的视频。

则此时一个完整Frame的大小为640*480*2=614400 bytes

抓取USB协议包进行检查:

 

以此帧为例,此帧从Transfer 157开始,至Transfer194结束,其中满包为37个,大小为16368 bytes,满包的header为0x8C, 非满包为1个,大小为8784 bytes,非满包的header为0x8E。

此帧的大小为16368*37+8784=614400 bytes

下一帧:

此帧从Transfer 195开始,至Transfer232结束,其中满包为37个,大小为16368 bytes,满包的header为0x8D, 非满包为1个,大小为8784 bytes,非满包的header为0x8F。

此帧的大小同样为16368*37+8784=614400 bytes

同样的,用WireShark抓取USB协议包,可以看到一个满包的长度为 16407 bytes,减去伪头后的数据长度为16380 bytes,与USB协议分析仪得到的16368 bytes还存在12个byte的差异。因此在使用WireShark抓包时,因将得到的数据包长度减去12 bytes UVC header的长度,再进行计算。

 

 

如果帧的大小不符合预期,或者数据包的header不合要求,PC端的UVC驱动都不能正确读取图像数据。

 

值得注意的是,这里的满包的单个包大小并不一定是定义在固件中的CX3_APP_STREAM_BUF_SIZE,而是实际传入CyU3PDmaMultiChannelCommitBuffer的参数值,如果产生差异,可以用串口打印数据进行查看实际传入函数的参数值。