USB UVC学习笔记第4篇—枚举与外扩单元Extension Unit 描述符

       UVC设备生产厂家为留出设备的调试接口,或扩展一些UVC以外的特殊功能,会在其USB固件中添加一些私有命令,比如我

要点亮一个led,如何利用UVC控制接口完成命令传输?UVC设备固件如何解析这是一条点亮led的命令?

 

       在回答上述两个问题之前,我要先介绍下UVC扩展单元(Extension Unit),UVC扩展单元是专门为了给设备厂家提供私有命

令的Unit,若想添加点亮led命令,就必须要通过此单元来配置。

 

       在上一篇学习笔记中,我们将UVC枚举分为了两个阶段,其中“第二阶段”是否发起由UVC设备的Process Unit描述符决定,如

果在Process Unit描述符中将可见光属性全部关闭,则PC不会发起“第二阶段”枚举。

 

         扩展单元也是一样,如果我们在Extension Unit描述符中打开私有命令属性,则在UVC设备枚举过程中,PC也会发起对

Extension Unit的询问。

 

        还是以手中的UVC摄像头为例, UVC摄像头扩展单元bNumControls值为0X18,bmControls值为0x9F 0x00 0x07,可以分析

出该摄像头厂家留了24条私有命令通道,其中只用到了9条,bit置1的位即为打开的私有命令通道号。

        还是要结合抓包数据分析才比较具体,可以看到PC枚举UVC“第一阶段”完成以后,紧接着开始获取Extension Unit私有命令通

道的属性信息,在获取完成后,继续获取Process Unit属性,然后完成枚举。

 

         a1 85 00 01  00 03 02 00,GET_LEN命令,第六字节“03”,是因为Extension Unit Id为03,第四字节为“01”,表示这是第一

通道,PC分别枚举了通道序号“1-5”、7等等九个通道,这就和bmControls值Bit位对应起来了,可以发现bit0对应的私有通道序号

为1,即私有通道号是从1开始计数的。

      可以看出PC分别按GET_LEN、GET_INFO、GET_MIN、GET_MAX、GET_RES、GET_DEF的顺序获取通道属性。   

      以通道1为例,GET_LEN获得的反馈为0004,则PC像该通道一次只能写入4Byte数据。

 

猜你喜欢

转载自blog.csdn.net/weixin_42314225/article/details/84473180