摄像头知识积累

本文是Linux驱动由浅入深系列中camera驱动的背景及基础知识篇。介绍了摄像头通用知识,如sensor类型分为YUV sensor和Bayer sensor;阐述了高通平台摄像头设备树节点的设置;还提及了解像力测试和HDR宽动态等内容。

1. 摄像头通用知识

1.1 sensor类型

camera sensor分为YUV sensor 和Bayer sensor。

YUV sensor又叫SOC sensor,它的输出格式是YUV格式的,YUV格式又分很多种,常见的有YUV422,YUV420。

YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的

比如斑马扫描头SE4750 sensor是单Y输出,斑马技术说的。

Bayer sensor的数据输出格式是RAW格式的。

现在的主流是Bayer sensor,因为YUV sensor的数据量都比较大,例如YUV422格式1个pixel占据两个bytes,而RAW10格式的1个pixel只占10bit。一般的YUV sensor像素都比较低。

YUV sensor内部会自带一个isp对镜头传进来的图像进行简单的图像效果处理(通过寄存器设置),然后以YUV格式(一般是YUV420SP)输出。而Bayer sensor用的是平台自带的isp,不同的模组都需要进行效果调试。
 

 

2.高通平台

2.1 摄像头设备树节点

* Qualcomm MSM Sensor

MSM sensor node contains properties of camera sensor

Required properties:
- compatible : should be manufacturer name followed by sensor name
    - "qcom,camera"
    - "shinetech,gc0310"
- reg : should contain i2c slave address of the device

以上两个设置需要查看主板原理图,看主板上摄像头是接在CSI0还是CSI1上的,一般后摄像头都会接到CSI0上,前摄像头会接在CSI1上。

比如下面是msm8953下的

qcom,camera@0 {//主摄像头
        cell-index = <0>;
        compatible = "qcom,camera";
        reg = <0x0>;
        qcom,csiphy-sd-index = <0>;
        qcom,csid-sd-index = <0>;
        qcom,mount-angle = <90>;

        ...}

qcom,camera@2 {//2D软解码
        cell-index = <2>;
        compatible = "qcom,camera";
        reg = <0x2>;
        qcom,csiphy-sd-index = <1>;
        qcom,csid-sd-index = <1>;
        qcom,mount-angle = <90>;

...}

qcom,camera@1 {//前置摄像头
        cell-index = <1>;
        compatible = "qcom,camera";
        reg = <0x01>;
        qcom,csiphy-sd-index = <2>;
        qcom,csid-sd-index = <1>;
        qcom,mount-angle = <90>;

}

- qcom,gpio-reset : should contain index to gpio used by sensors reset_n,从0开始
- qcom,gpio-standby : should contain index to gpio used by sensors standby_n
- qcom,gpio-vio : should contain index to gpio used by sensors io vreg enable
- qcom,gpio-vana : should contain index to gpio used by sensors analog vreg enable
- qcom,gpio-vdig : should contain index to gpio used by sensors digital vreg enable
- qcom,gpio-vaf : should contain index to gpio used by sensors af vreg enable
- qcom,gpio-af-pwdm : should contain index to gpio used by sensors af pwdm_n
- qcom,gpio-req-tbl-num : should contain index to gpios specific to this sensor
- qcom,gpio-req-tbl-flags : should contain direction of gpios present in

- qcom,gpio-req-tbl-label : should contain name of gpios present in

- qcom,gpio-set-tbl-flags : should contain value to be configured for the gpios
    present in qcom,gpio-set-tbl-num property (in the same order)

qcom,gpio-set-tbl-flags= <0 2>; //(0 – GPIOF_OUT_INIT_LOW, 2 -GPIOF_OUT_INIT_HIGH)

gpios = <&tlmm 28 0>,
            <&tlmm 40 0>,
            <&tlmm 39 0>,
            <&tlmm 16 0>;       
        qcom,gpio-reset = <1>;1指向GPIO40
        qcom,gpio-standby = <2>;
        qcom,gpio-custom2 = <3>;  
        qcom,gpio-req-tbl-num = <0 1 2 3>;
        qcom,gpio-req-tbl-flags = <1 0 0 0>;//(0 – output gpio, 1 – input gpio)
        qcom,gpio-req-tbl-label = "CAMIF_MCLK2",//(gpio name)
                      "CAM_RESET2",
                      "CAM_STANDBY2",
                      "CAM_DVDD_1V2";        

//下面以msm8937的主摄像头来距离说明

    qcom,camera@0 {

<name>[@<unit-address>]如果一个节点描述的设备有地址,则应该给出@uni-address,多个相同类型设备节点的name可以是一样,只要unit-address不同即可,设备的unit-address地址也经常在其对应节点的reg属性中给出,对于挂在内存空间的设备而言,@字符后跟的一般就是该设备在内存空间的基地址,对于挂在I2C总线上的外设而言,@后面一般跟的是从设备的I2C地址。
        cell-index = <0>;//0为后置摄像头,1为前置摄像头


        compatible = "qcom,camera";
        reg = <0x0>;
        qcom,csiphy-sd-index = <0>;

- qcom,csiphy-sd-index : should contain csiphy instance that will used to
    receive sensor data
    - 0, 1, 2



        qcom,csid-sd-index = <0>;

- qcom,csid-sd-index : should contain csid core instance that will used to
    receive sensor data
    - 0, 1, 2, 3

传感器所用 CSID 硬件的索引;若同时使用两个传感器,则该设置不能使用
同一个值。
        qcom,mount-angle = <90>;
        qcom,actuator-src = <&actuator0>;
        qcom,led-flash-src = <&led_flash0>;
        /*qcom,eeprom-src = <&eeprom0>;*/  /* Modified by huangfusheng 2016-10-08 */
        cam_vdig-supply = <&pm8937_l23>;
        cam_vana-supply = <&pm8937_l22>;
        cam_vio-supply = <&pm8937_l6>;
        cam_vaf-supply = <&pm8937_l17>;
        qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana",
                            "cam_vaf";
        qcom,cam-vreg-min-voltage = <1200000 0 2800000 2850000>;
        qcom,cam-vreg-max-voltage = <1200000 0 2800000 2850000>;
        qcom,cam-vreg-op-mode = <200000 0 80000 100000>;
        pinctrl-names = "cam_default", "cam_suspend";
        pinctrl-0 = <&cam_sensor_mclk0_default
                &cam_sensor_rear_default>;
        pinctrl-1 = <&cam_sensor_mclk0_sleep
                &cam_sensor_rear_sleep>;
        gpios = <&tlmm 26 0>,
            <&tlmm 36 0>,
            <&tlmm 35 0>,
            <&tlmm 16 0>,       /* Add GC8024 DVDD enable by huangfusheng 2016-10-08 */
            <&tlmm 92 0>;  //125    /* Add REAR CAMERA VAF enable by huangfusheng 2016-10-08 */
        qcom,gpio-reset = <1>;
        qcom,gpio-standby = <2>;
        qcom,gpio-custom2 = <3>;    /* Add GC8024 DVDD enable by huangfusheng 2016-10-08 */
        qcom,gpio-custom3 = <4>;    /* Add REAR CAMERA VAF enable by huangfusheng 2016-10-08 */
        qcom,gpio-req-tbl-num = <0 1 2 3 4>;
        qcom,gpio-req-tbl-flags = <1 0 0 0 0>;
        qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
            "CAM_RESET0",
            "CAM_STANDBY0",
            "CAM_DVDD_1V2",         /* Add DVDD GC8024 enable by huangfusheng 2016-10-08 */
            "CAM_DVAF_2V8";         /* Add REAR CAMERA VAF enable by huangfusheng 2016-10-08 */
        qcom,sensor-position = <0>;
        qcom,sensor-mode = <0>;
        qcom,cci-master = <0>;
        clocks = <&clock_gcc clk_mclk0_clk_src>,
            <&clock_gcc clk_gcc_camss_mclk0_clk>;
        clock-names = "cam_src_clk", "cam_clk";
        qcom,clock-rates = <24000000 0>;
    };

 

3.解像力测试

相关链接:

linux驱动由浅入深系列:camera驱动之一(背景及基础知识篇)

https://blog.youkuaiyun.com/RadianceBlau/article/details/76460907

 

4.HDR宽动态

dynamic range大约要85DB才算是宽动态,比如AR0230CS这个sensor

下面是OV2735,不支持宽动态

Camera sensor bring up

https://blog.youkuaiyun.com/tamell5555/article/details/52190765

一文看懂安卓Android摄像头的移植方法-Android系统开发干货来袭

http://blog.sina.com.cn/s/blog_14f0dc1a10102xqd3.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值