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

被折叠的 条评论
为什么被折叠?



