uvc gadget枚举设备使用bulk模式接到同Android设备无法出图

۰/sheldon_li 2024-01-04 16:42:49 编辑

使用的RK3588平台,通过uvc gadget枚举uvc设备:
1.使用isochronous方式传输,连接到PC(windows)和 另外RK3588设备,可以正常识别预览。
2.改为bulk方式传输,连接到PC(windows)上可以正常出图,但是连接到另外一个RK3588设备,可以正常识别到设备,也可以用v4l2-ctl读到正常配置信息,但是打开对应video节点取流时阻塞住了,从另一端RK3588(device)查看uvcg应用端报错如下:
ioctl执行VIDIOC_STREAMON报错:
UVC: Unable to start streaming No such device (19).

另外接了一个bulk传输的usb摄像头到rk3588上,又是正常的。
请问由遇到过类似问题吗?该从哪些地方去查?谢谢!

USB中文网 2024-01-24 15:05:04 编辑

个人认为这现表现的都是表象。应通过抓包来看打开摄像头的包请求是什么情况。

不同的主机端对设备端的错误容忍是不一样的,PC机端相结容忍度比较高,但嵌入式或MAC等可能比较高。
从上述来看,应该是同步模式改成BULK模式,有些地方修改不到位导致在嵌入式平台校验不过引起的。当然这些错误可能奇奇怪怪的。
建议仔细抓包自己的BULK和其它可以的BULK摄像头进行数据对比。

۰/sheldon_li 2024-02-18 17:05:08 编辑

感谢回复!
具体原因已查到,slave端bulk和isoc驱动逻辑是不一样的,slave接到windows pc 对比 接到另外一个Android设备上打开预览时的流程不一样:
slave接到 Android设备上的时候走了两次 uvc_function_set_alt, uvc->state 变成 STREAM_ON了,后面再走stream_on时判断不是 CONNECT状态就返回 -ENODEV了。
接pc只会走一次 uvc_function_set_alt会设置 uvc->state = CONNECT。不会影响后面 stream_on的流程。

可能跟这篇文章讲的有关系:https://www.usbzh.com/article/detail-166.html