Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31502
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-19 14:14
文章分类
文章存档

2013年(7)

我的朋友

分类: Android平台

2013-05-19 14:18:27

原文地址:android下camera的分析 作者:huabinbin00

主控: Samsung   Cortex  ARM A8  smdkc110  1G

Camera: OV5640(500W)

系统:  android 2.3
一、Camera 工作原理介绍

1. 结构 .

一般来说,camera 主要是由 lens sensor IC 两部分组成,其中有的 sensor IC 集成 了 DSP,有的没有集成,但也需要外部 DSP 处理。细分的来讲,camera 设备由下边几部 分构成:

 1) lens(镜头) 一般 camera 的镜头结构是有几片透镜组成,分有塑胶透镜(Plastic)和玻璃透 镜(Glass) ,通常镜头结构有:1P,2P,1G1P,1G3P,2G2P,4G 等。附:镜头的好坏会影响到成像的质量主要包括两个方面:镜头的透孔的宽度和镜头的高度,当然镜头越好,成像更清晰,价格也更高

 2) sensor(图像传感器) Senor 是一种半导体芯片,有两种类型:CCD CMOSSensor 将从 lens 上传导过来的光线转换为电信号, 再通过内部的 AD 转换为数字信号。 由于 Sensor 的每个 pixel 只能感光 R 光或者 B 光或者 G 光, 因此每个像素此时存贮的是单色的, 我们称之为 RAW DATA 数据。 要想将每个像素的 RAW DATA 数据还原成三基色,就需要 ISP 来处理。附:sensors的焦距会影响到远景的效果,500W的话焦距一般设置到1.8-2.5M

 3)ISP(图像信号处理) 主要完成数字图像的处理工作,把 sensor 采集到的原始数据转换为显示支持 的格式,目前在像素越来越高端情况下,信号处理一般移交给主控操作,sensors直接扔出原始数据

 4)CAMIFcamera 控制器) 芯片上的 camera 接口电路,对设备进行控制,接收 sensor 采集的数据交给 CPU,并送入 LCD 进行显示。

 2. 工作原理

 外部光线穿过 lens 后, 经过 color filter 滤波后照射到 Sensor 面上, Sensor 将从 lens 上传导过来的光线转换为电信号,再通过内部的 AD 转换为数字信号。如果 Sensor 没有集 成 DSP(现在高像素一般是不需要sensors集成的DSP),则通过 DVP 的方式传输到 baseband,此时的数据格式是 RAW DATA。如果集成 了 DSPRAW DATA 数据经过 AWB、 则 color matrix lens shading gamma sharpness AE de-noise 处理,后输出 YUV 或者 RGB 格式的数据。
最后会由 CPU 送到 framebuffer 中进行显示,这样我们就看到 camera 拍摄到的景象 了。

 3. YUV YCbCr

YUV 和 RGB 一样,是色彩空间中常用的色彩模型之一,两者可以相互转换。YUV 中 得 Y 表示亮度,U V 表示色度。与 RGB 相比,它的优点在于占用更少的空间。 YCbCr 则是在世界数字组织视频标准研制过程中作为 ITU - R BT601 建议的一部分, 其实是 YUV 经过缩放和偏移的翻版。 其中 Y YUV 中的 Y 含义一致, Cb , Cr 同样都指色 彩, 只是在表示方法上不同而已。在 YUV 家族中, YCbCr 是在计算机系统中应用最多的成 员, 其应用领域很广泛,JPEG MPEG 均采用此格式。 一般人们所讲的 YUV 大多是指 YCbCr YCbCr 有许多取样格式, 444 , 422 , 411 420
二、 硬件原理图分析 

 POWER:

  VDD_CAMA28  ----2.8v   camera的模拟电压

  VDD_CAMD28  ----1.5v   camera的工作电压

  VDD_CAMIO28  ----2.8v   camera的GPIO口数字电压 

OUTPUT:

 CAM_DATA:  camera的数据管脚。此数据脚可以输出的格式有YUV、RGB、JPEG     

 CAM_VSYNC:  camera的帧同步信号管脚。一个VYSNC信号结束表示一帧(即一个画面)的数据已经输出完毕

 CAM_HSYNC:  camera行同步信号管脚。一个HSYNC信号结束表示一行的数据已经输出完毕 

 CAM_PCLK:   像素同步信号管脚。一个PCLK信号结束表示一个数据已经输出完毕 

INPUT:

CAM_PWDN:  camera的使能管脚,当camera处于PWDN模式时,一切对camera的操作都是无效的,因此,在RST之前,一定要将PWDN管脚置为normal模式

CAM_RST:  camera的复位管脚。此方式为硬复位模式,一般管脚置为低,camera处于硬复位状态,camera的各个IO口恢复到出厂默认状态。只有在XCLK开启后,将RESET置为低,硬复位才有效,否则复位无效。

CAM_MCLK:  camera工作时钟管脚。此管脚为主控提供camera的工作时钟

CAM_I2C:  camera与主控的通信管脚

附:

在走PCB板的时候可以尽量让电源线走短一点,线也可以稍微粗一点,设计电源的时候可以加上0.47uf 、0.1uf的电容,高频、低频可以很好的控制

三、 软件驱动分析
    
1、   上电顺序、下电顺序(基于OV5640)    
        这一步我就忽略不描述了,参照sensors的时序图就可以了

    2、配置 OV5640相关信息
        

点击(此处)折叠或打开

  1. #ifdef CONFIG_VIDEO_OV5640
  2. static struct ov5640_platform_data ov5640_plat = {
  3.     .default_width = 640,
  4.     .default_height = 480,
  5.     .pixelformat = V4L2_PIX_FMT_YUYV,
  6.     .freq = 24000000,
  7.     .is_mipi = 0,
  8. };

  9. static struct i2c_board_info ov5640_i2c_info = {
  10.     I2C_BOARD_INFO("OV5640", 0x78 >> 1),
  11.     .platform_data = &ov5640_plat,
  12. };

  13. static struct s3c_platform_camera ov5640 = {
  14. //#ifdef CAM_ITU_CH_A
  15.     .id        = CAMERA_PAR_B,
  16. //#else
  17.     //.id        = CAMERA_PAR_B,
  18. //#endif
  19.     .type        = CAM_TYPE_ITU,
  20.     .fmt        = ITU_601_YCBCR422_8BIT,
  21.     .order422    = CAM_ORDER422_8BIT_YCBYCR,//CAM_ORDER422_8BIT_CBYCRY,
  22.     .i2c_busnum = 1, //3, //uses gpio emulated
  23.     .info        = &ov5640_i2c_info,
  24.     .pixelformat    = V4L2_PIX_FMT_YUYV,
  25.     .srclk_name    = "mout_mpll",
  26.     .clk_name    = "sclk_cam1",
  27.     .clk_rate    = 24000000, /* 24MHz */
  28.     .line_length    = 640, /* 640*480 */
  29.     /* default resol for preview kind of thing */
  30.     .width        = 640,
  31.     .height        = 480,
  32.     .window        = {
  33.         .left = 16,
  34.         .top = 0,
  35.         .width = 640 - 16,
  36.         .height = 480,
  37.     },

  38.     /* Polarity */
  39.     .inv_pclk    = 0,
  40.     .inv_vsync    = 1,
  41.     .inv_href    = 0,
  42.     .inv_hsync    = 0,

  43.     .initialized    = 0,
  44.     .cam_power    = set_cam5640_main_power,
  45. };
  46. #endif
3、 FIMC初始化设置

点击(此处)折叠或打开

  1. static struct s3c_platform_fimc fimc_plat = {
  2.     .srclk_name    = "mout_mpll",
  3.     .clk_name    = "sclk_fimc",
  4.     .lclk_name    = "sclk_fimc_lclk",
  5.     .clk_rate    = 166750000,
  6.     .default_cam    = CAMERA_CSI_C,
  7.      .camera        = {
  8.         &OV5640,//5M back cam
  9.         &OV2659,///2m front cam
  10.     },
  11.     .hw_ver        = 0x43,
  12. };
有以上的步骤,同时保证在I2C那段通讯正常的话,按正常情况下来讲的话camera是可以点亮了。但调试camera才刚开始,因为我第一次接触camera,而刚好我这个平台没有DSP算法,所以遇到各种稀奇古怪的问题,调试这款camera前前后后也发了我很多很多时间,限于篇幅我就不列举了,总之在调试这款camera的时候很多效果都是我一步一步的摸索,导致走了很多弯路,所以要多和FAE多沟通沟通,如果不给你技术支持就直接跑到FAE那里去请教^_^




阅读(2262) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:S5PV210的memory map

给主人留下些什么吧!~~