嵌入式linux高级实例分析-摄像头接口fimc驱动代码_第1页
嵌入式linux高级实例分析-摄像头接口fimc驱动代码_第2页
嵌入式linux高级实例分析-摄像头接口fimc驱动代码_第3页
嵌入式linux高级实例分析-摄像头接口fimc驱动代码_第4页
嵌入式linux高级实例分析-摄像头接口fimc驱动代码_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

:androidcameraCMMcamera参数gt2005200W、gt2015200W、NT99250200W、s5k5ba200W、s5k4ba出来。一方面有相同问题的“同学”可以看下,说不定问题就解决了;再一方面自己工作方点好……“为务!”(我不是**党,只是技术P民)androidcamera(二):头工作原理、s5PV310头接口androidcamera(三):cameraV4L2FIMCandroidcamera(四):cameraGT20051、camera特 2、头工作原理、camera的组成各组件的作、工作原理:物体通过镜头(len)的光,过S或D集信号转换成电信号,再经过图像处理器(P)转换成数字图像信号输出到数字信号处理器(n(FPC(DSP(lens(DSP(ensorCCM的为:光学设计技术、非球面镜制作技术、光学镀膜技术。CMOSCCD感光业有比较高的门槛,业内比较知名的企业如富士精机、柯尼卡美能达、大立光、Enplas等荷藕合)元件;另一种是CMOS(互补金属氧化物导体)器件。DeviceCCD表面受到光线照射时,每个感光单位会将电荷反映在块以厂商为主导,全球规模市场有90%以上被厂商,以索尼、松下、夏普为龙互补性氧化金属半导CMOS(ComplementaryMetal-OxideSemiconductor)主要是利用硅要、和韩国为主导,主要生产厂家有OmniVision、Agilent、Micron,的锐速地传递处理器并刷新感光,因此DSP的好坏,直接影响画面品质(比如色FPC柔性电路板(柔性PCB):简称"软板",又称"柔性线路板",连接和。起到电信号传3、camera模组的装配方、定焦模组装配CCM分为定焦模组和自动变焦模组,其中定焦模组主要由镜头、镜座、感光集成电路、软、自动变焦模组装配、3D模4、头的一些技术指、图像解析度/分辨率160x176x320x352x10640x800x501024x801280x1301600x2002048300万像素25925002816x6003072x7003200x7703264x8003876x、自动白平衡调整成份,光的颜温低表示长波光成分多。当色温改变时,光源中三基色(红、绿、蓝)的、JPEG:(jointphotographicexpertgroup)静态图像压缩方式。一种有损图像的压缩方式。压缩前大部分数码相机都使用JPEG格式。、彩色深度(色彩位数A/D转换器的量化精度,是指将人。现在市场上的头均已达到24位,有的甚至是32位、、视、输出/输入接camerasensor接口、s5pv310CAMIF接口、V4L2、FIMC、和我们最终的sensor驱动。一、头工作原角度是怎么工作的。如何阅读头规格书(针对驱动调节时用到关键参数,以GT2005拍摄的图传到主控,所有要有data、行场同步和时钟号。GT2005/GT2015是CMOS接口的图像传感器,可以感知外部的视觉信号并将其转换为数字信号并输出。需要通过MCLK给头提供时钟,RESET是复位线,PWDN在头工作时应该始终为低。PCLK是像素时钟,HREF是行参考信号,VSYNC是场同步信号。一旦给步传输数字图像信号。数据是通过D0~D7、PixelGT20051268列、1248行,1616列1216行。也就是说摄像头为1600X1200的时候,像素点要多于这个,去除边缘一部分,保证图像质量吧。、IIC这个不用说了,头寄存器初始化的数据都从这里传输的,所有的IIC器件都一样的工作,来吧,后面做详细分析;下面这一部分在调试驱动的过程中比较重要、 PCLK时序,和LCD显示的时序一样,道理是一样的:、主要的寄存器:分辨率、YUV顺序、X轴、Y轴镜相、翻YUVXY图像方、头的硬件接二、S5pv310上Camera主控上的硬件接口1、CAMIFCameraInterface般不会涉及到这里,不过这里分析了,就把这个带出来了)、头接口的主要属性DMAAXI64-bitinterface)MIPICSI)ITU-RBT601656709DirectFIFO(PlayBack)DirectFIFO2、FIMCFullyInteractiveMobile头的数据要CPU无法直接处理,主控里面集成了Camera控制器,叫FIMC(FullyInteractiveMobileCamera)。头需要先把图像数据传给控制器,经过控制器处理(裁剪拉升后直接预览或者编码)之后交给CPU处理。实际上头工作需要的时钟(MCLK)也是FIMC给它提供的。BT-601-605标准、AMX接口、MIPI接口MIPI、ITU、、ITU国际电信无线电通信部门 municationSectorofITU简称ITU-RITU-RBT.60116位数据传输;Y、U、V信号同时传输,是并行数据,行场同步单独传Y,后传UV。行场同步信号嵌入在数据流中。MIPI(移动行业处理器接口MobileIndustryProcessorInterfaceMIPI规范:Camera工作组:MIPICameraSerialInterface1.0specification.CameraSerialInterface2v1.0(CSI-2)AMBA(AdvancedMicrocontrollerBusArchitecture)3.0协议中最重要的部分,是一3、接口信IIIOFIELDO通过CAM_MCLK给头提供时钟,RST是复位线,PWDN在头工作时应该始终为低。HREF是行参考信号,PCLK是像素时钟,VSYNC是场同步信号。一旦给头提供数字图像信号。数据是通过DATA0~DATA7这八根数据线并行送出的。4、不同接口模式的工ITU-RBT656输入时序图,这种方式下同步信号已经内嵌到数据中了,因此不需要额外 t2:表示HREF前周 t3HREF t4:表示HREF后周5、camera的时钟域,三个时钟:系统时钟、PCLK、每个头接口包括三个时钟域,每一个时钟域是系统总线时钟,第二个是头像素PLL时钟。如果有外部时钟晶振,CAM_MCLK空掉。不需要同步MMCLK,PCLK应该与sitt-triggered电平移位器连接。camera从这一块开始。一般BSP的camera都是完好的,只用关心驱动这些就可以了。简V4L全称是forLinux,是Linux内核中标准的关于驱动程序,目前使用比较多的版本是forLinux2,简称V4L2。它为Linux下的驱动提供了的接口,使得应用程序可以使用的API操作不同的设备。从内核空间到用户空间,主要的数据流和控制类均由V4L2驱纯流和取景器、录制等实际业务组织起来,都是camera的硬件抽象层需要负责的工作。V4L2驱动实现为如下文件:drivers/media//v4l2-dev.c。V4l2-dev.h中定义的 V4l2过程(应用程序打开设备,获得文件描述设置格式分配缓冲区启动过程,数据停止,关闭设备[cpp]view1.structdeviceconst[cpp]view1.structdeviceconststructv4l2_file_operations2. structcdev structdevice structv4l2_device char int int u16 unsignedlong int struct int v4l2_std_id v4l2_std_id void(*release)(struct_device conststructv4l2_ioctl_ops40.主要接口函数有 unsignedintcmd,unsignedlong简FIMC这个模块不仅仅是一个头的控制接口,它还承担着V4L2的output功能和overlay的功能FIMC的驱动在内核中的位置:drivers/media/它们的组织关系如下口以及v4l2-overlay设备接口。这里主要关注v4l2-input设备接口,因为头属于输入设fimc_v4l2.c里面了很多的回调函数,都是用于实现v4l2的标准接口的,但是这些回调函数基本上都不是在fimc_v4l2.c里面实现的,而是有相应的.c分别去实现。比如:v4l2-input设备的操作实v4l2-output设备的操作实现:fimc_output.c面了,就是fimc40_regs.c。这样把硬件相关的代码和硬件无关的代码分开来实现是非常好的方式,[cpp]view1.structfimc_controlvoid[cpp]view1.structfimc_controlvoid struct struct struct struct struct struct struct struct struct struct structs3c_platform_camera struct struct struct struct struct enum enum 35.[cpp]view1._device_device[FIMC_DEVICES]=.fops=.release=[1]=.ioctl_ops=[cpp]view1._device_device[FIMC_DEVICES]=.fops=.release=[1]=.ioctl_ops=.release=.fops=.ioctl_ops=[0]= [2]= .fops= .ioctl_ops= .release= 17.[cpp]viewfb_ops结构体是针对v4l2设备的基本操作,定[cpp]viewstaticconststructv4l2_file_operationsfimc_fops= = = = = = = = =10.FIMC初始在S5PV210中,FIMC初始设置代码在/drivers/arch/arm/mach-s5pv210/mach-smdkv310.c[cpp][cpp]viewstaticstructs3c_platform_fimcfimc_plat= .srclk_name= = .lclk_name= = = = &mt9p111,//5Mback &s5k6aafx,///1.3Mfront =12.[cpp]view对于GPIO的配置代码在/drivers/[cpp]view1.oids3c_fimc0_cfg_gpio(structplatform_device2.i=(i=0;i<8;i++) }(i=0;i<5;i++) }(i=0;i<8;i++) }(i=0;i<5;i++) }25.[cpp]viewFIMC的主要回调函数如下,实现在[cpp]view1.onststructv4l2_ioctl_opsfimc_v4l2_ops= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = .vidioc_try_fmt_vid_overlay= = =34.[cpp]view对于寄存器的操作,实现都在fimc_regs.c文[cpp]viewintfimc_hwset_camera_source(structfimc_control2. structs3c_platform_camera*cam=ctrl- u32cfg= cfg|= cfg|=cam- if(cam->type== cfg|=cam- wri(cfg,ctrl->regs+ fimc_hwset_enable_irq(structfimc_control*ctrl,intoverflow,int21. u32cfg=readl(ctrl->regs+ cfg&=~(S3C_CIGCTRL_IRQ_OVFEN| cfg|= if cfg|= if cfg|= wri(cfg,ctrl->regs+ return36.头主要参数1、MCLK2、PCLK3、电压1.8V(1.5V)、4、scl(IIC时钟)100KHz或者400KHz:常用头规格书(个别有android驱动程序):bf370330Wgc030830Wov7670gt2005200W、gt2015200W、NT99250200W、s5k5ba200W、s5k4ba一、头驱以GT2005为例,来讲述一个头驱动的调试过程:头驱动比较简单,完成一面三大步就可以头的上电、时钟这些基本条IIC保证头的初始化头工作后传回数据到主完成这三个步骤就完成了头基本工作的调试1、头的上电、时钟这些基本条件的实格、主意头工作要两组电压:1.8V(1.5V)、2.8V还有[cpp][cpp]view2.staticvoidsetcam2005mainpower(int4. unsignedint int err=gpiorequest(S5PV210GPB(2), if printk(KERNERR"####failedtorequestGPB2for s3cgpiosetpull(S5PV210GPB(2),S3CGPIOPULL err=gpiorequest(S5PV210GPE1(4), if printk(KERN_ERR"####failedtorequestGPE1_4for s3cgpiosetpull(S5PV210GPE1(4),S3CGPIOPULL gpiodirectionoutput(S5PV210 gpiodirectionoutput(S5PV210GPE1(4), //PWDN err=gpio_request(S5PV210_GPB(4), if printk(KERN_ERR"####failedtorequestGPB4for s3cgpiosetpull(S5PV210GPB(4),S3CGPIOPULL gpiodirectionoutput(S5PV210GPB(4), 47.48.[cpp]view提供MCLK代[cpp]view1.staticint2. unsignedint tempvalue= tempvalue=(tempvalue wri tempvalue=readl(S5PCLK tempvalue=(tempvalue wri return12.这时拿示波器抓到上电时的波形和MCLK24MHZ的时钟,信号就说明完成了这一步,其实在实际工作中,一般出问题的时候才会测这些数据,确认问题点。上电时序、MCLK[cpp]view[cpp]viewstaticstructGT2005platformdataGT2005plat=.defaultwidth=.default_height=.pixelformat=//.freq=.ismipi=7.staticstructi2cboardinfoGT2005i2cinfo=I2C_BOARD_INFO("GT2005",0x781),1、IIC地.platform_data=12.staticstructs3c_platform_cameraGT2005=#ifdefCAMITUCH = = = //2、数据接口选择(ITU\MIPI等 =ITU601YCBCR422 = //3、图像数据格 = = =V4L2PIXFMT.srclk_name //4、这部分关系到时 =.clk====={===(640-=//5、信号的极性==.inv=== .campower=setcam2005main48.49.注意下面几个参数、IIC地、数据接口选择(ITU\MIPI等),这几个数据接口面提到过、图像数据格式,这就是前面提到的YVU\UVY之类不同的数据顺序、输出信号的极性,就是PCLK、VSYNC、HSVNC这些信号的极性,不正确时会没有图完成这一步确认IIC通信是否正常,如下图所抓到波3、完成上面两步,头基本配置完成,确认下输出端PCLK、VHSN、SVSN、D1-二、头调试过程中常遇到的问原因分析录相在android/device/samsung/proprietary/libcamera/SecCamera.cpp[cpp]view[cpp]viewm_cam_fd_rec=open(CAMERA_DEV_NAME2,3.3.vendor\sec\sec4.#define所用的格式,android/device/samsung/proprietary/libcamera/SecCameraHWInterface.cpp[cpp]view[cpp]viewintdefault_preview_pixel_format=mSecCamera- switch(defau

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论