1 / 46
文档名称:

linux摄像头驱动.doc

格式:doc   大小:472KB   页数:46页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

linux摄像头驱动.doc

上传人:zbfc1172 2019/1/22 文件大小:472 KB

下载得到文件列表

linux摄像头驱动.doc

相关文档

文档介绍

文档介绍:编写基于V4L2视频驱动主要涉及到以下几个知识点:●摄像头方面的知识  要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。●Camera解码器、控制器  如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作。●V4L2的API和数据结构  编写驱动前要熟悉应用程序访问V4L2的方法及设计到的数据结构。●V4L2的驱动架构  最后编写出符合V4L2规范的视频驱动。本文介绍基于S3C2440硬件平台的V4L2视频驱动开发。摄像头采用OmniVision公司的OV9650和OV9655。主要包含以下几个方面的内容:视频驱动的整体驱动框架●    3C2440camera控制器+ov9650(ov9655)        ●    V4L2API及数据结构        ●    V4L2驱动框架        ●    ov9650(ov9655)+s3c2440+V4L2实例一、视频驱动的整体框架视频驱动的整体框架见下图:二、S3C2440camera控制器+ov9650(ov9655)(1)S3C2440camera控制器介绍S3C2440支持ITU-RBT601/656格式的数字图像输入,支持的2个通道的DMA,Preview通道和Codec通道,参见下图。Preview通道可以将YCbCr4:2:2格式的图像转换为RGB(16bit或24bit)格式的数据,并存放于为PreviewDMA分配的内存中,最大分辨率为640*480。主要用于本地液晶屏显示。如果将PreviewDMA的内存和Framebuffer内存重叠的话,就可以实现采集直接输出到液晶屏上了。Codec通道可以输出YCbCr4:2:0或YCbCr4:2:2格式到为CodecDMA分配的内存中。最大分辨率为4096*4096。主要用于图像的编解码处理。上图中的windowcut功能是指在图像可以先做一个裁剪。通过设置CIWDOFST完成此功能,见下图。图像进入P、C通道后,各自的scaler单元还可以对其进行缩放、旋转等处理。S3C2440camera控制器支持乒乓存储。为了防止采集和输出之间的冲突,采用了乒乓存储方式。每次采集一帧后,自动转到下一个存储区。如果你因为内存空间不足,不想使用此功能的话,可以将四个区域设置到同一块空间。在做图像处理时,需要关注到最后存储区中的图像格式,如codec通道硬件自动把Y、Cb、Cr分离存储。S3C2440camera控制器LastIRQ功能的使用,也是需要掌握的。如果处理不好,输出的图像效果会受影响。控制器会在每个VSYNC下降沿判断ImgCptEn信号等命令。如果在下降沿发现ImgCptEn信号有效,则产生IRQ中断。然后才开始一帧图像的真正采集。而如果在VSYNC下降沿判断到ImgCptEn为低电平且之前LastIRQEn没有使能,则不会产生任何中断,且不会再进行下一帧的采集。如果你想在ImgCptEn关闭后,一帧采集完后产生一个中断通知你,那么就需要在最后一次中断产生前(stopcapturing后的vysnc下将沿)使能lastirq就可以了。我在移植linux驱动时就遇到了一个LastIRQ的问题。现象是输出图像上面总是有一条比其它部分反应慢。采集运动图像,就能看出现象。查看代码是因为没有设立lastirq,因为每次如果不在lastirq产生的情况下读取,图像缓冲中的数据是不稳定的,可能照成图像不完整。修改代码支持lastirq后,问题解决。Camera控制器时钟设置也是需要注意的,ov9650需要Camera控制器为其提供时钟。提供给外部摄像头的时钟是由UPLL输出时钟分频得到的。而CAMIF的时钟是由HCLK提供的。本例中,提供给ov9650的时钟为24M。(2)ov9650(ov9655)S摄像头,130万像素,支持SXVGA、VGA、QVGA、CIF等图像输出格式。最大速率在SXVGA时为15fps,在VGA时为30fps。OV9650摄像头时序如下图:上图中D[9:2]用于8-bitYUV或者RGB565/RGB555(D[9]MSB、D[2]LSB)。D[9:0]用于10-bitRGB。本例中使用8-bitYUV模式。我手边开发板的Camera和S3C2440的接线原理图如下(对应camera中具体的信号名称参见前文的驱动整体架构图)。注:B可以看作是一种简化的I2C总线,B时序。(3)编写ARM测试代码测试camera功能在Keil环境下编写一个测试代码完成从摄像头采集图像输出到液晶屏。下面列出程序的流程。(4)编写测试代码过程中常见的问题●    摄像头寄存器的配置因为摄像头有很多寄存器,可能一下无法理