USBWEBCAM的参考思路

      大多数USB摄像头都是利用FPGA去实现UVC及USB输出的功能。

      今天看到一个usb3.0的方案,还是FPGA的,http://wenku.baidu.com/view/3c2469c169dc5022abea004a.html?from=search,《如何使用EZ-USB》,对于之前的关卡问题,或许有帮助。


      整个系统框图:
USBWEBCAM的参考思路_第1张图片


      可以看到需要USB EP0和USB BULK IN EP,那我之前的分析错了?不需要ISOC端点?但是PC usb host是那样命令的呀?


      1. 提供正确的USB描述符,保证主机能够识别符合UVC的外围设备。

      5. FX3固件初始化FX3的硬件模块(第5.2节),枚举成为一个UVC摄像头(第2.3.1节),处理UVC特定请求(第2.3.2节),通过I2C接口将视频控制设置(如亮度)传输给图像传感器(第5.4节),将UVC头数据添加到视频数据流(第2.3.4节)) ,将带有头数据的视频数据提交给USB(第5.7节),以及维持GPIF II状态机(第5.8节)。


      之前,成功地让设备被枚举成一个USB摄像头,但是不是UVC摄像头?现在我开始怀疑了。


USB视频类别(UVC)
       要符合UVC,则需要下面两个

      FX3代码模块:
          1.枚举数据
          2.工作代码
 
枚举数据

       应用笔记附带的代码包括名称为cyfxuvcdscr.c的文件,该文件包含UVC的枚举数据。可从usb.org上获取用于定义UVC描述符的USB规范。本节介绍了高阶观点的描述符。

      UVC器件具有以下四个逻辑元素:
          1.输入摄像头终端(IT)
          2.输出端(OT)

          3.处理单元(PU)

          4.扩展单元(EU)

      输出端描述符制定使用哪个USB端点,在本情况下是BULK-IN端点3。

      描述符还包括了视频属性(如宽度、高度、帧率、帧大小和位深度)以及控制属性(如亮度、曝光、增益、对比度和PTZ)等内容。

工作代码

       主机枚举摄像头后,UVC驱动程序会向摄像头发出一系列请求,以确定工作特征。该操作叫做能力请求阶段。请求阶段先于串流阶段,其中主机应用会启动串流视频。
      FX3固件会响应到达USB控制端点(EP0)的请求。

      例如,假设UVC器件表明它支持某个USB描述符中的亮度控制。在能力请求阶段,UVC驱动程序查询器件,以发现相关的亮度参数。当主机发出一个请求要求更改亮度值时,UVC驱动程序将发出‘SET’(设置)控制请求,用以更改亮度值(SET_CUR)

      同样,当主机应用需要选择输送一个受支持的视频格式/帧率/帧大小时,它会发出输送请求。共有两种类别的请求:

      PROBE和COMMIT

      PROBE请求用于确定UVC器件是否准备好接受串流模式的切换。串流模式是图像格式、帧大小和帧率的组合。
     

USB视频类别要求
      本应用笔记的固件项目位于名称为USBVideoClass的文件夹内。本节介绍了示例项目如何满足UVC的要求。

      UVC要求设备执行下列任务:
            使用UVC特定的USB描述符进行枚举
            处理USB描述符所记录的UVC控制和输送能力的UVC特定SET/GET请求以符合UVC的颜色格式进行输送视频数据
            添加一个符合UVC的标头到每个图形载荷内

      可在UVC规范中了解这些要求的详情。


UVC的USB描述符
       cyfxuvcdscr.c文件含有USB描述符的表格。字节阵列“CyFxUSBHSConfigDscr”(高速)和“CyFxUSBSSConfigDscr”(超速)包含了UVC特定的描述符。

      这些描述符执行下面各子描述符树:

        配置描述符

            接口关联描述符

            视频控制(VC)接口描述符

                VC接口标头描述符

                    o 输入(摄像头)终端描述符

                    o 处理单元描述符

                    o 扩展单元描述符

                    o 输出端描述符

                        VC状态中断端点描述符

            视频流(VS)接口描述符

                VS接口输入标头描述符

                     VS格式描述符

                         VS帧描述符

            BULK-IN 视频端点描述符

      配置描述符是一个标准的USB描述符,它定义了USB设备在其子描述符中的功能。接口关联描述符用于向主机表明该设备是否属于标准USB类别。此处,该描述符使用了下面两个接口来上报符合UVC的设备:视频控制(VC)接口和视频流(VS)接口。因为UVC器件具有两个独立的接口,因此它是一个USB复合器件。


视频控制接口
      VC接口描述符及其子描述符将上报所有与控制接口有关的能力。示例包括亮度、对比度、色调、曝光和PTZ等控制。 
      VC接口标头描述符是一个UVC特定的接口描述符,它表明了该VC接口属于哪一个VS接口。
      输入(摄像头)终端描述符、处理单元描述符、扩展单元描述符以及输出端描述符均包含了各个位字段,这些位字段说明了相应终端或单元所支持的特性。
      摄像头终端控制着机械(或等效数字)特性,比如传输视频流的设备的曝光和PTZ。
      处理单元控制着图像的各项属性,如正在流过它的视频的亮度、对比度以及色调。 
与标准的USB供应商要求相似,扩展单元可以添加供应商指定的特性。在该设计中,扩展单元是空白的,但仍包含了该描述符,作为自定义功能的占位符。请注意,如果利用可改扩展单元,则标准主机应用将无法认出其特性,除非修改主机应用使其能识别这些特性。
      输出端用于描述这些单元(IT、PU、EU)和主机之间的接口。VC状态中断端点描述符是一个用于中断端点的标准USB描述符。该端点可用于传输UVC特定的状态信息。该端点的此功能属于本应用笔记范围外的内容。

      UVC规范已将这些功能分好了类,您可轻松安排实现该类别指定的控制请求。但实现上述功能是应用特定的。通过将相应的功能位设置为‘1’,可以在各自终端/单元描述符的位字段“bmControls”(cyfxuvcdscr.c)中记录所支持的控制功能。在枚举时,UVC器件的驱动程序会轮询控制的详细信息。通过EP0请求实现轮询的细节。所有相似的请求(包括视频流请求)均由uvc.c文件中的UVCAppEP0Thread_Entry函数处理


视频流接口
      视频流接口描述符以及它的子描述符记录了各种帧格式(如非压缩、MPEG、H.264)、帧的分辨率(宽度、高度和位深度)以及帧率。根据所记录的值,主机应用可以选择通过改变所支持的帧格式、帧分辨率和帧率的组合来切换串流模式。 
      VS接口的输入标头描述符指定了下面VS格式描述符的数量。 
      VS格式描述符包含了图像的长宽比和颜色格式,如非压缩或压缩格式。 
      VS帧描述符包含了图像的分辨率以及该分辨率的帧率。如果摄像头支持不同的分辨率,则多个VS帧描述符会遵循VS格式描述符。
      BULK-IN视频端点描述符是一个标准的USB端点描述符,它包含的有关批量端点可用于输送视频的信息。
      本示例中使用单一的分辨率和帧率。其图像的特性包含在三个描述符中,如下面三个表格所示的内容(只有相关的字节偏移量显示)。


      (复制了半天,累了,直接去下吧,哎,百度上那两个还要1个下载券???又不是你的东西竟然还要下载券???这种人我就不说了!!!

      直接官网上找,http://www.cypress.com/documentation/application-notes/an75779-how-implement-image-sensor-interface-using-ez-usb-fx3-usb可以下载中文版的和百度上是一样的)



你可能感兴趣的:(USBWEBCAM的参考思路)