基于CH374的USB摄像头驱动设计

2007-04-10 11:06:24来源: 单片机及嵌入式系统应用

现有视频监控系统的设计大都采用USB视频采集和以太网传输,并且需要视频压缩方案,通常需要操作系统支持;因此选取的开发平台价格昂贵,造成视频临控系统的成本居高不下,以致使小型工厂和家庭用户难以接受。

本课题采用S3C44BO微处理器的ARM7开发平台,驱动USB接口芯片CH374进行视频数据采集,提供了低成本的视频采集方案。USB视频采集涉及USB同步传输,但是在众多USB主机芯片的设计中,多以控制传输和批量传输为主,对同步传输的讲解极为少见。本文提供了USB同步传输的设计范例。

1 系统工作原理

典型的USB视频采集系统如图1所示。USB系统包含主机和物理设备两个最基本的元素,一个USB系统只能有一个USB主机,可以连接多个物理设备。本设计中的设备是USB摄像头,USB主机由USB主机控制器、微处理器及驱动软件构成。USB系统工作层次分明:USB接口层提供主机控制器和设备的物理连接;设备层中,USB主机调用驱动程序通过端点0发送并获取USB设备的控制信息;功能层进行实际数据的传输,主机必须选择合适的接口和端点,调用底层驱动提供的接口函数获取USB摄像头的视频数据流。

1.1 USB摄像头SPCA561A

视频信号的采集一般选择USB摄像头来实现。如图2所示,USB摄像头SPCA561A集成了镜头、CMOS传感器、USB图像处理器以及USB控制器。

比起直接与微处理器接口的CMOS传感器,使用USB摄像头虽然成本偏高,但是易于实现,节省CPU资源,而且驱动支持非常丰富。SPCA561A提供了一种单芯片摄像头解决方案,它将一个CIF的CMOS传感器、一个图像处理器和USB控制器集成于单芯片,从而大大降低了成本和开发难度;缺点是只有10万像素,每秒帧数较少,然而非常适合应用于图像要求不高的小型监控系统。

1.2 USB主机控制器CH374

CH374是一个嵌入式USB总线的通用接口芯片,支持USB主机方式和USB设备方式,支持低速和全速的控制传输、批量传输、中断传输以及同步传输。在本地端,CH374具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到DSP/MCU/MPU等控制器的系统总线上。大多数嵌入式的USB主机接口芯片并不提供同步传输模式,而CH374的一大特点就是提供了同步传输,使得视频和音频流的传输成为可能。

本系统使用CH374作为USB主机控制器,如图3所示。CH374用总线方式与S3C44B0相连,微控制器通过读写CH374寄存器实现USB主机驱动。

1.3 USB同步传输原理

同步传输主要用来传输音频或视频信号。这种信息是周期的,又是实时的,对信息实时性有很高的要求,但是对误码率却可以容忍。所以USB为这种信息保留90%的带宽,其他类型的传输在同步传输期间不可以占用。

为保证数据传输的实时性,同步传输不进行数据错误的重传,也不在硬件层次上响应一个握手资料包。同步传输的主机每隔l ms发送一个SOF同步信号,随后接收设备发送的信号,其数据流程如图4所示。

在同步传输中,每一个信包的容量是一定的。拿SPCA56l来说,在启动同步传输之前必须设置相应的接口号。不同的接口号决定将要发送多大的信包容量,如接口号1每次发送的信包容量是128字节,接口号6的信包容量是896字节。接口号通过USB标准设备请求SET_INTERFACE来设置。由于CH374的缓冲区最大为128字节,所以本设计中使用接口号l,同步传输每接收一个信包的大小是128字节容量的信包。

1.4 视频数据采集过程

如图5所示,视频信号由摄像头SPCA561A采集得到,经过内部的图像处理芯片后编码为规定的格式,一般为RGB或者YUV格式,但是SPCA561采用比较特殊的S561图像格式(类似于RGB格式)。因为一帧图像的数据量很大,无法在一个同步信包内传送,所以将其分割成多个单元,每个单元前添加包头(包头的内容包括当前包序号和此图像帧信息),组成多个同步信包,通过FIFO缓冲发送到USB总线上。主机控制器用同步方式接收每个信包,并去除包头合并成S561格式的数据,组成一个完整的图像帧。最后由软件将此图像帧预编码成为YUV420格式的图像数据,以便后续的压缩处理。

2 USB摄像头驱动的实现

USB摄像头并非标准的USB外设。与其他USB外设不同的是,每个厂商的摄像头芯片都有自己定义的设备请求,而这些摄像头芯片数据手册并不对外公开,所以编写摄像头驱动的难度很大,想要驱动支持更多的摄像头,程序会非常复杂。本文只介绍SPCA561A摄像头驱动的方法。

2.1 USB摄像头初始化

初始化一个USB摄像头有两个步骤,第一步是摄像头的枚举,第二步是摄像头的自定义设置。

(1) 设备枚举

设备的枚举就是标准设备请求的过程,这部分内容包含于USB协议第9章。对USB摄像头来说,枚举的过程依次如下:

①获取设备描述符。通过设备描述符得到端点0的负载,也就是最大传送包容量。

②设置地址。给设备分配一个默认地址0之外的地址。

③获取配置描述符。这个过程包括两个阶段,第1次获取的配置描述符的前4个字节得到配置描述符的真实长度;再以真实长度第2次获取配置描述符,此描述符包含了设备的配置信息和多个接口信息。可以从这里得到可以使用的接口号和对应的信包负载。

④设置配置信息。设置的主要信息是配置描述符中的第5个字段bConfigurationValue。

⑤设置接口。USB摄像头不同的接口号对应不同的信包负载。本设计选定的接口号为2,对应信包负载是128字节。

(2) 自定义设置

USB摄像头并不是标准USB外设,需要很多自定义设置,可以称之为“自定义设备请求”,它是用标准设备请求包方式传送的,目的是修改内部寄存器,对采集图像和压缩方式进行配置。标准设备请求和自定义设备请求包的不同内容如表1所列。自定义设备请求的内容非常丰富,它包含以下几个方面:

①时序产生设置。包括图像采集频率和振荡器的设置等。

②图像处理设置。包括图像窗口大小、压缩类型、色彩分配等配置属性。

③存储器设置。对图像缓冲进行设置。

④控制及状态设置。包括启动及停止图像采集、数据传输方式、当前状态等配置属性。

程序中的初始化设置有近百条,具体设置请见参考文献[1]的开源代码。初始化结束后,可以根据需要进行图像格式的设定,SPCA561A支持SQVGA(160×120)、QCIF(176×144)、QVGA(320×240)、CIF(352×288)四种格式。设定结束后启动摄像头采集,进行数据传输。

2.2 同步传输和图像帧处理

同步传输的过程非常简单,甚至不包含握手信息;但是因为同步传输对时序的要求很高,所以对同步传输数据的处理颇困难。此驱动的设计将同步数据的接收用中断服务程序进行处理,同步数据的处理放在中断服务之外执行。

①中断服务程序流程如图6所示。每次同步中断发生时,首先从USB主机控制器的缓冲区内读取接收到的128字节同步信包,将数据存储到数据处理程序提供的存储单元中。再发送PID_IN标志和端点号,设置同步传输类型并启动下一次传输。CH374主机会在每1 ms发送1个SOF同步标志,USB设备接收到SOF标志后,会传送下一个同步信包。

②同步数据处理程序如图7所示。中断结束后,执行数据处理程序,程序读取同步信包的第一个字节,确认包的序号,此序号的范围是0~0xFF。如果此序号为0xFF,则说明是无效包,需要丢弃。如果此序号为0,则可能是首次采集得到的第一个同步数据包,直接存储此数据到图像帧;也可能是当前图像帧结束后开始的下一帧图像的第一个同步信包,则需要处理已经结束的当前帧图像,同时将当前帧设置为下一帧。至此得到了一帧图像数据。

 

 

2.3 图像数据的预编码

经过处理后的图像帧为S561格式数据,它是一种RGB格式的图像,无法被后续的图像编码器利用。常用的视频压缩标准(如H.263、MPEG4等)输入的视频数据为YUV420格式,所以必须对当前的S56l格式数据进行预编码,使之成为YUV420格式。因为算法比较复杂,在此不详细叙述,请参考文献[1]中bayer_decode( )函数的的源代码。至此,基于CH374的摄像头驱动完成。

3 设计心得

由于此USB主机基于低端嵌入式硬件系统,没有操作系统支持,也没有BUSHOUND类似的USB数据流分析软件支持,难以找到基于嵌入式平台USB同步传输参考程序,所以设计的难度很大。笔者的设计经验是重在参考程序的选择。

此课题的设计可以分成两个部分:一个是底层的CH374主机控制器驱动,主要包括没备探测和枚举(这部分程序的设计可以参考类似主机控制器的驱动程序,如Cypress公司的SL811HS芯片主机驱动程序[3]);另一部分是摄像头初始化、视频数据读取及处理程序,仅有的参考资料是Linux下的开源USB摄像头驱动。在设计过程中首先需要了解Linux设备驱动原理,很好地分析USB摄像头驱动之后才能有设计思路。

结 语

将本驱动加到已有的视频压缩程序中,通过网络传送视频到PC后播放,在大小为QVGA(160×120)的图像属性下,可以达到每秒7帧,基本满足了实际需要。基于CH374的USB摄像头驱动,提供了低成本嵌入式平台实现视频采集的方案,便利视频采集系统不再高不可攀,对视频监控的普及起到了积极作用。

关键字:视频  压缩  接口  同步

编辑: 引用地址:http://www.eeworld.com.cn/xfdz/2007/0410/2936.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
视频
压缩
接口
同步

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved