android下camera的分析

来源:互联网 发布:聂海芬 知乎 编辑:程序博客网 时间:2024/05/21 17:58

主控: 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那里去请教^_^




阅读(676) | 评论(2) | 转发(2) |
0

上一篇: android关于高精度GPS模块

下一篇:ubuntu下终端显示中文为乱码的问题

相关热门文章
  • QEMU 访存机制介绍与应用...
  • 第二季度B2C市场
  • SPI系统分析
  • 基于smdk4412在android4.0上分...
  • 库存多台示波器 TDS1012B TDS1...
  • android开发---解压system.img...
  • 不用vs和cygwin!Eclipse+cdt...
  • Android自定义View的实现...
  • Android避免内存泄露:合理使...
  • 让ProgressDialog在setCancela...
  • ChinaUnix & ITPUB社区12周年...
  • ssh连接出现以下提示,求解...
  • 如何扩展MYSQL
  • 准备做一个大型门户,用户什么...
  • gbk or utf8
给主人留下些什么吧!~~

huabinbin002013-06-28 13:46:09

不好意思,今天才看到。。有的

回复 | 举报