电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者维修技术维修教程知识电子制作基于CH374的USB摄像头驱动设计

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

09-08 12:12:53 | http://www.5idzw.com | 电子制作 | 人气:844
标签:电子小制作,http://www.5idzw.com 基于CH374的USB摄像头驱动设计,http://www.5idzw.com
    ③存储器设置。对图像缓冲进行设置。
    ④控制及状态设置。包括启动及停止图像采集、数据传输方式、当前状态等配置属性。

    程序中的初始化设置有近百条,具体设置请见参考文献[1]的开源代码。初始化结束后,可以根据需要进行图像格式的设定,SPCA561A支持sQVGA(160×120)、QCIF(176×144)、QVGA(320×240)、CIF(352×288)四种格式。设定结束后启动摄像头采集,进行数据传输。
2.2 同步传输和图像帧处理
   
同步传输的过程非常简单,甚至不包含握手信息;但是因为同步传输对时序的要求很高,所以对同步传输数据的处理颇困难。此驱动的设计将同步数据的接收用中断服务程序进行处理,同步数据的处理放在中断服务之外执行。
    ①中断服务程序流程如图6所示。每次同步中断发生时,首先从USB主机控制器的缓冲区内读取接收到的128字节同步信包,将数据存储到数据处理程序提供的存储单元中。再发送PID_IN标志和端点号,设置同步传输类型并启动下一次传输。CH374主机会在每lms发送1个SOF同步标志,USB设备接收到SOF标志后,会传送下一个同步信包。

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

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

3 设计心得
   
由于此USB主机基于低端嵌入式硬件系统,没有操作系统支持,也没有BUSHOUND类似的USB数据流分析软件支持,难以找到基于嵌入式平台USB同步传输参考程序,所以设计的难度很大。笔者的设计经验是重在参考程序的选择。
    此课题的设计可以分成两个部分:一个是底层的CH374主机控制器驱动,主要包括设备探测和枚举(这部分程序的设计可以参考类似主机控制器的驱动程序,如Cypress公司的SL811HS芯片主机驱动程序;另一部分是摄像头初始化、视频数据读取及处理程序,仅有的参考资料是Linux下的开源USB摄像头驱动。在设计过程中首先需要了解Linux设备驱动原理,很好地分析USB摄像头驱动之后才能有设计思路。


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

上一页  [1] [2] 

,基于CH374的USB摄像头驱动设计
关于《基于CH374的USB摄像头驱动设计》的更多文章