rv1126通用性移植摄像头模组讲解,使用当前方式移植过gc2053、gc2093、imx415、sc8238、imx258等摄像头模组;
一、硬件接口
sc8238接口:
imx258接口:
整个摄像头模组连接到soc是靠iic和mipi接口,iic接口来注册驱动驱动、mipi接口来取图片数据;
如在当前首次注册驱动时报错,则去查找iic接口方面问题,在取图的时候出错则去查找mipi接口配置方面的问题。
二、软件调用
1、dts配置
(1)dts配置先查看数据手册sensor在工作时的时序要求,然后在查看硬件配置,看某些硬件是否是外部拉高。
(2)rv1126有两种dts mipi链路:
链路1(直接接到isp上):sensor --》 phy --》rkisp_vir
链路2(直接接到cif上):sensor --》 phy --》mipi-csi --》rkcif --》 rkisp_vir
在1126上如果要取raw数据的话建议是链接到cif上,当可正常取raw数据之后需要取nv12数据时链路到isp上。
例如下面使用的是链路1方式配置的dts
&i2c1 {
status = "okay";
imx258: imx258@1a {
status = "okay";
compatible = "sony,imx258";
reg = <0x1a>;
clocks = <&cru CLK_MIPICSI_OUT>; //MIPI接口只有这一个
clock-names = "xvclk";
power-domains = <&power RV1126_PD_VI>;
pinctrl-names = "rockchip,camera_default";
pinctrl-0 = <&mipicsi_clk1>; //声明时钟引脚 MIPI_CSI_CLK1
avdd-supply = <&vcc_avdd>;
dovdd-supply = <&vcc_dovdd>;
dvdd-supply = <&vcc_dvdd>;
//pwdn-gpios = <&gpio1 RK_PD1 GPIO_ACTIVE_LOW>;
reset-gpios = <&gpio1 RK_PD1 GPIO_ACTIVE_LOW>; //复位,默认拉高
rockchip,camera-module-index = <1>;
rockchip,camera-module-facing = "front";
//指定iq 例如:imx258_GD110_IR120-4MP.xml
rockchip,camera-module-name = "GD110";
rockchip,camera-module-lens-name = "IR120-4MP";
port {
ucam_out5: endpoint {
remote-endpoint = <&csi_dphy1_input>;
data-lanes = <1 2 3 4>;
};
};
};
};
//物理层
&csi_dphy0 {
status = "disabled";
ports {
port@0 {
mipi_in_ucam0: endpoint@1 {
//remote-endpoint;
remote-endpoint = <&ucam_out0>;
data-lanes = <1 2 3 4>;
};
};
port@1 {
csidphy0_out: endpoint@0 {
// remote-endpoint;
remote-endpoint = <&isp_in>;
data-lanes = <1 2 3 4>;
};
};
};
};
&csi_dphy1 {
status = "okay";
ports {
port@0 {
csi_dphy1_input: endpoint@1 {
remote-endpoint = <&ucam_out5>;
data-lanes = <1 2 3 4>;
};
};
port@1 {
csi_dphy1_output: endpoint@0 {