zoukankan      html  css  js  c++  java
  • 32、从零开始写CMOS摄像头驱动


    使用的内核:linux-3.4.2

    参考源码:
    第32课_新内核下的I2C驱动i2c1th_i2c_new_device
    第2课第1.1.7节文档和图片(从0写USB摄像头)myuvc


    设备地址:
    写 -- 0x42(01000010)
    读 -- 0x43(01000011)

    8bit的地址 = 7bit设备地址 + 1bit的读/写控制位

    设备地址 = 0100001 = 0x21


    问:为什么需要复位摄像头模块?
    答:IIC能够正常操作CMOS摄像头模块内部的寄存器的前提是:
    -- 提供符合它需求的系统时钟(CAMCLK)
    -- 需要给它一个复位信号

    问:怎样才能复位摄像头模块?
    答:通过操作CAMIF控制器中相应的寄存器,让CAMRST发出复位
    信号,从而复位摄像头模块,具体操作见驱动源码。

    举例:说明CIPRCTRL寄存器
    48字节(DMA需要传输的长度) = 10字节(DMA一次能传输的最大长度(Main burst length)) + 10字节 + 10字节 + 10字节 + 8字节(remain burst length)

    burst length必须是2/4/8/16,不管是Main burst length或者remain burst length,计算方法见代码,计算的变量是使用一行有多少字在计算

    /*
    CIPRSCPRERATIO:
    bit[31:28]: 预览缩放的变化系数(SHfactor_Pr)
    bit[22:16]: 预览缩放的水平比(PreHorRatio_Pr)
    bit[6:0]: 预览缩放的垂直比(PreVerRatio_Pr)

    CIPRSCPREDST:
    bit[27:16]: 预览缩放的目标宽度(PreDstWidth_Pr)
    bit[11:0]: 预览缩放的目标高度(PreDstHeight_Pr)

    CIPRSCCTRL:
    bit[29:28]: 告诉摄像头控制器(图片是缩小、放大)(ScaleUpDown_Pr)
    bit[24:16]: 预览主缩放的水平比(MainHorRatio_Pr)
    bit[8:0]: 预览主缩放的垂直比(MainVerRatio_Pr)

    bit[31]: 必须固定设置为1
    bit[30]: 设置图像输出格式是RGB16、RGB24
    bit[15]: 预览缩放开始
    */
    cmos_ov7740_calculate_scaler_info();缩放函数的具体计算方法可以见s3c2440手册Figure23-12图的下面

    驱动测试条件:
    1.
    要有IIC总线驱动;
    要有LCD驱动;

    2.
    要配置上V4L2相关选项
    Device Drivers --->
      <*> Multimedia support --->
        <*> Video For Linux
        [*] Video capture adapters (NEW) --->
            [*] V4L USB devices (NEW) --->
            [*] V4L platform devices --->

  • 相关阅读:
    Ant 警告:sun.misc.BASE64Decoder 是 Sun 的专用 API,可能会在未来版本中删除
    SerfJ REST
    SimpleDateFormat的线程安全问题与解决方案
    蔡勒(Zeller)公式:根据日期推算是星期几
    【转】详解 Spring 3.0 基于 Annotation 的依赖注入实现
    PostgreSQL JSON ARRAY 数据类型
    【转】Tomcat源代码阅读系列
    Spring 数据源
    IBatis-Spring 整合
    24 The Go image package go图片包:图片包的基本原理
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8847399.html
Copyright © 2011-2022 走看看