RK3568平臺(tái)僅有一個(gè)標(biāo)準(zhǔn)物理mipi csi2 dphy,可以工作在full mode 和split mode兩個(gè)模式, 拆分為csi2_dphy0/csi2_dphy1/csi2_dphy2三個(gè)邏輯dphy
Full Mode:
僅使用csi2_dphy0,csi2_dphy0與csi2_dphy1/csi2_dphy2互斥,不可同時(shí)使用;
data lane最大4 lanes;
最大速率2.5Gbps/lane;
Split Mode:
僅使用csi2_dphy1和csi2_dphy2, 與csi2_dphy0互斥,不可同時(shí)使用;
csi2_dphy1和csi2_dphy2可同時(shí)使用;
csi2_dphy1和csi2_dphy2各自的data lane最大是2 lanes;
csi2_dphy1對(duì)應(yīng)物理dphy的lane0/lane1;
csi2_dphy2對(duì)應(yīng)物理dphy的lane2/lane3;
最大速率2.5Gbps/lane
雙目攝像頭鏈路連接:
gc2385->csi2_dphy1->isp_vir0
gc2053->csi_dphy2->csi2->cif->isp_vir1
雙攝像頭的時(shí)候,需要用到2個(gè)phy,因此需要只能用Split Mode。
一 .Full Mode單攝像頭dts配置如下:
gc2385/gc2053->csi2_dphy0->isp_vir0
&csi2_dphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam0: endpoint@0 {
reg = <0>;
remote-endpoint = <&gc2053_out>;
data-lanes = <1 2>;
};
mipi_in_ucam1: endpoint@1 {
reg = <1>;
remote-endpoint = <&gc2385_out>;
data-lanes = <1>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidphy_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&isp0_in>;
};
};
};
};
&csi2_dphy_hw {
status = "okay";
};
&csi2_dphy1 {
status = "disabled";
};
&csi2_dphy2 {
status = "disabled";
};
/*******isp*****/
&rkisp {
status = "okay";
};
&rkisp_mmu {
status = "okay";
};
&rkisp_vir0 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp0_in: endpoint@0 {
reg = <0>;
remote-endpoint = <&csidphy_out>;
};
};
};
&i2c2 {
status = "okay";
pinctrl-0 = <&i2c2m1_xfer>;
gc2385: gc2385@37 {
status = "okay";
compatible = "galaxycore,gc2385";
reg = <0x37>;
clocks = <&cru CLK_CIF_OUT>;
clock-names = "xvclk";
power-domains = <&power RK3568_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&cif_clk>;
reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <1>;
rockchip,camera-module-facing = "front";
rockchip,camera-module-name = "HS5885-BNSM1018-V01";
rockchip,camera-module-lens-name = "default";
port {
gc2385_out: endpoint {
remote-endpoint = <&mipi_in_ucam1>;
data-lanes = <1>;
};
};
};
};
&i2c3 {
status = "okay";
gc2053: gc2053@37 {
status = "okay";
compatible = "galaxycore,gc2053";
reg = <0x37>;
clocks = <&pmucru CLK_WIFI>;
clock-names = "xvclk";
power-domains = <&power RK3568_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&refclk_pins>;
reset-gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio3 RK_PD3 GPIO_ACTIVE_LOW>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "default";
rockchip,camera-module-lens-name = "JX8006";
port {
gc2053_out: endpoint {
remote-endpoint = <&mipi_in_ucam0>;
data-lanes = <1 2>;
};
};
};
};
二. Split Mode雙攝像頭dts配置:
/*
* csi2_dphy1 & csi2_dphy2 used for split mode,
* csi2_dphy0 used for full mode,
* full mode and split mode are mutually exclusive
*/
&csi2_dphy0 {
status = "disabled";
};
&csi2_dphy_hw {
status = "okay";
};
&csi2_dphy2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam0: endpoint@1 {
reg = <1>;
remote-endpoint = <&gc2053_out>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
dphy2_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi_csi2_input>;
};
};
};
};
&csi2_dphy1 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam1: endpoint@1 {
reg = <1>;
remote-endpoint = <&gc2385_out>;
data-lanes = <1>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
dphy1_out: endpoint@1 {
reg = <1>;
remote-endpoint = <&isp_in1>;
};
};
};
};
&mipi_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&dphy2_out>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in>;
data-lanes = <1 2>;
};
};
};
};
&rkcif {
status = "okay";
};
&rkcif_dvp {
status = "disabled";
};
&rkcif_mipi_lvds {
status = "okay";
port {
cif_mipi_in: endpoint {
remote-endpoint = <&mipi_csi2_output>;
data-lanes = <1 2>;
};
};
};
&rkcif_mipi_lvds_sditf {
status = "okay";
port {
mipi_lvds_sditf: endpoint {
remote-endpoint = <&isp1_in>;
data-lanes = <1 2>;
};
};
};
/********isp***********/
&rkisp {
status = "okay";
//max-input = <1920 1080 30>;
};
&rkcif_mmu {
status = "okay";
};
&rkisp_mmu {
status = "okay";
};
&rkisp_vir0 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp_in1: endpoint@0 {
reg = <0>;
remote-endpoint = <&dphy1_out>;
};
};
};
&rkisp_vir1 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp1_in: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi_lvds_sditf>;
};
};
};
&i2c2 {
status = "okay";
pinctrl-0 = <&i2c2m1_xfer>;
gc2385: gc2385@37 {
status = "okay";
compatible = "galaxycore,gc2385";
reg = <0x37>;
clocks = <&cru CLK_CIF_OUT>;
clock-names = "xvclk";
power-domains = <&power RK3568_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&cif_clk>;
reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <1>;
rockchip,camera-module-facing = "front";
rockchip,camera-module-name = "HS5885-BNSM1018-V01";
rockchip,camera-module-lens-name = "default";
port {
gc2385_out: endpoint {
remote-endpoint = <&mipi_in_ucam1>;
data-lanes = <1>;
};
};
};
};
&i2c3 {
status = "okay";
gc2053: gc2053@37 {
status = "okay";
compatible = "galaxycore,gc2053";
reg = <0x37>;
clocks = <&pmucru CLK_WIFI>;
clock-names = "xvclk";
power-domains = <&power RK3568_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&refclk_pins>;
reset-gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio3 RK_PD3 GPIO_ACTIVE_LOW>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "default";
rockchip,camera-module-lens-name = "JX8006";
port {
gc2053_out: endpoint {
remote-endpoint = <&mipi_in_ucam0>;
data-lanes = <1 2>;
};
};
};
};
三. 調(diào)試流程:
驅(qū)動(dòng)在kernel/drivers/media/i2c下,目前調(diào)的2385和2053sdk里面已經(jīng)存在,直接用該驅(qū)動(dòng)即可。
調(diào)試中的一些經(jīng)驗(yàn)總結(jié):
3.1:首先要確保AVDD(2.8)、DVDD(1.2)、DOVDD(1.8)三路電壓正常出來(lái)。
3.2:reset、pwdn這兩個(gè)引腳是否正常配置到起作用,用示波器量信號(hào)
3.3:查看原理圖,確認(rèn)硬件連接上的對(duì)應(yīng)關(guān)系:2385:MIPI_RX_D0-1(csi2_dphy1) 2053:MIPI_RX_D2-3(csi_dphy2),這個(gè)地方要對(duì)應(yīng)上,不可調(diào)換過(guò)來(lái)
gc2385->csi2_dphy1->isp_vir0
gc2053->csi_dphy2->csi2->cif->isp_vir1
3.4:mclk配置查看原理圖是否對(duì)應(yīng)正確,RK356x有四個(gè)輸出時(shí)鐘,可作為給CIS模組的MCLK:
1、REFCLK_OUT(GPIO0_A0)
示例dts:arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dtsi中的gc5025時(shí)鐘配置
gc5025: gc5025@37 {
.…..
clocks = <&pmucru CLK_WIFI>;
clock-names = "xvclk";
pinctrl-names = "default";
pinctrl-0 = <&refclk_pins>;
};
2、CAM_CLKOUT0(GPIO4_A7)
示例dts:arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet.dts中的ov8858時(shí)鐘配置
ov8858: ov8858@36 {
.…..
clocks = <&cru CLK_CAM0_OUT>;
clock-names = "xvclk";
pinctrl-names = "default";
pinctrl-0 = <&cam_clkout0 >;
};
3、 CAM_CLKOUT1(GPIO4_A8)
示例dts:arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dtsi中的ov02k10時(shí)鐘配置
ov02k10: ov02k10@36 {
.…..
clocks = <&cru CLK_CAM1_OUT>;
clock-names = "xvclk";
pinctrl-names = "default";
pinctrl-0 = <& cam_clkout1>;
};
4、 CLK_CIF_OUT (GPIO4_C0)
示例dts:arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet.dts中的gc2385時(shí)鐘配置
gc2385: gc2385@37 {
.…..
clocks = <&cru CLK_CIF_OUT >;
clock-names = "xvclk";
pinctrl-names = "default";
pinctrl-0 = <& cif_clk >;
};
這里我用到的兩組是:
2053:REFCLK_OUT(GPIO0_A0) 2385:CLK_CIF_OUT (GPIO4_C0)
3.5:確保i2c地址正確,如果以上4點(diǎn)都正常,這時(shí)候應(yīng)該就可以正常識(shí)別到sensor id了??梢赃M(jìn)行正常的mipi信號(hào)傳輸,可用v4l2 命令獲取數(shù)據(jù)流:
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=BG10 --stream-mmap=3 --stream-skip=100 --stream-to=/tmp/GB10.raw --stream-count=1 --stream-poll
v4l2-ctl --verbose -d /dev/video5 --set-fmt-video=width=1600,height=1200,pixelformat=BG10 --stream-mmap=3 --stream-skip=100 --stream-to=/tmp/GB10.raw --stream-count=1 --stream-poll
3.6:此時(shí)打開(kāi)apk,如果還打不開(kāi),使用命令:dumpsys media.camera
Number of camera devices: 0,說(shuō)明 framework 層沒(méi)有識(shí)別到攝像頭,這個(gè)一般是camera3_profiles.xml中對(duì)應(yīng)攝像頭沒(méi)有配置或者配置不對(duì)導(dǎo)致異常
開(kāi)機(jī)過(guò)程會(huì)有以下log:
rockchip-csi2-dphy csi2-dphy1: dphy1 matches m01_f_gc2385 2-0037:bus type 4
rockchip-csi2-dphy csi2-dphy2: dphy2 matches m00_b_gc2053 3-0037:bus type 4
cat /sys/class/video4linux/*/name或者:
m0x這個(gè)對(duì)應(yīng)的是dts中的配置:
rockchip,camera-module-index = <x>; x:0/1
我調(diào)試的時(shí)候,識(shí)別不到設(shè)備,就是camera3_profiles.xml中2385的moduleId與驅(qū)動(dòng) DTS 中配置不一致導(dǎo)致的。
這時(shí)再dumpsys media.camera:
Service global info:
Number of camera devices: 1
Number of normal camera devices: 1
Number of public camera devices visible to API1: 1
說(shuō)明識(shí)別到設(shè)備了
3.7:第6點(diǎn)正常后,但是使用 APK 還是打不開(kāi),這種情況一般是tuning效果文件導(dǎo)致,這種情況只有raw攝像頭sensor需要iq文件。
raw攝像頭支持的iq文件路徑external/camera_engine_rkaiq/iqfiles/isp21, 與以前不一樣的地方是iq文件不再采用.xml的方式,而是采用.json的方式。
rkisp : [XCORE]:XCAM ERROR RkAiqCalibDbV2.cpp:322: access /vendor/etc/camera/rkisp2/gc2053_RS-D22WS14P-1_default.json failed!
需要注意的是,這個(gè)json文件命名也是跟dts一致的,不然匹配不上:
gc2053_default_JX8006.json
rockchip,camera-module-name = "default";
rockchip,camera-module-lens-name = "JX8006";
3.8:經(jīng)過(guò)以上的艱辛路程,兩個(gè)攝像頭終于可以打開(kāi)了。經(jīng)過(guò)跟廠家確認(rèn),gc2053的是RGB的彩色鏡頭,gc2385是IR的紅外鏡頭,但發(fā)現(xiàn)gc2053的出圖是灰白色的,經(jīng)過(guò)跟rk工程師的溝通,需要再iq文件里面修改一下顏色的反色:
diff --git a/iqfiles/isp21/gc2053_default_JX8006.json b/iqfiles/isp21/gc2053_default_JX8006.json
old mode 100644
new mode 100755
index 1b9e81c..d26cfe2
--- a/iqfiles/isp21/gc2053_default_JX8006.json
+++ b/iqfiles/isp21/gc2053_default_JX8006.json
@@ -1763,7 +1763,7 @@
},
"colorAsGrey": {
"param": {
- "enable": 1
+ "enable": 0
}
},
"lumaDetect": {
3.9:默認(rèn)打開(kāi)前置、后置攝像頭:
packages/apps/Camera2/res/value/strings.xml里設(shè)置pref_camera_id_default為1即默認(rèn)打開(kāi)后攝,為0即默認(rèn)打開(kāi)前置文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-577384.html
3.10:到此,攝像頭就正常了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-577384.html
到了這里,關(guān)于rk3568mipi攝像頭調(diào)試(gc2385 + gc2053)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!