本帖最后由 Dylan0314 于 2020-5-16 14:16 编辑
大家好,本人在进行验证摄像头的枚举过程中,始终无法完整地获取到配置描述符信息。使用的是STM32F407开发板,USB库使用HAL+LL库,使用VIDEO CLASS的类进行摄像头的驱动,摄像头为标准的UVC协议摄像头。在USBLyzer中对摄像头设备进行设备描述符查看如下图
[img_1.png]
可以看到整个的配置描述符的长度为427h-->1063。下面是用STM的hal usb库进行的摄像头枚举得到的配置描述符信息,仅获得了597长度的配置描述符信息
[img_3.png]
再查看摄像头的UncompFrame信息,将PC端与STM获取得到信息进行对比
[img_2.png]和[img4.png]
很明显的,能够发现,描述符的信息不能匹配上。在PC端中,UncompressedVideoFrame能查看到05 01号配置的分辨率大小为640x480,而在32中枚举,其对应的点的分辨率大小为160x120。此160x120的分辨率大小,则应在05 02号配置中。因为此原因,我的百万像素级别的摄像头只能在stm32中获取得到160x120和178x144分辨率的YUV格式描述符信息,在PC上可以清楚的看到最大有1600x1200分辨率的描述符。
关于此问题,我有怀疑过是否为接收配置描述符的缓存过小,因之前使用标准库获取全部描述符信息时,也有此现象,仅能接收到0x200h字节长度的描述符信息,通过修改接收缓存数组的长度,即可接收到完整的配置描述符信息。更改的宏位置在usb_core.h文件下的MAX_DATA_LENGTH,将之设置为0x400。1、因此基于以上的经验,我也尝试在hal usb库中进行更改,结果并无效果,依然只是获取到597个字节长度的描述符信息。
2、有幸看到了这样一句[img_5.png]跳转到GRXFSIZ中看,发现定义的RX FIFO大小是0x120大小,曾将之改大到0x200,但发现stm32在接收了摄像头自isoc发送的包后,便无法工作,且依然无获取到完整的配置描述符信息。
各位大神,虽然现在我的摄像头能在160x120的YUV格式中运行,但还是想获取到整个的描述符信息,进行更优的选择,请问有哪方面的建议?
|