rk3568 适配摄像头 (CIF协议)
在RK3568处理器中,支持CIF协议的摄像头可以通过CSI接口连接到处理器,实现视频数据的采集和处理。同时,RK3568还支持多种图像处理算法和编解码器,可以对采集到的视频数据进行实时处理和压缩,提高系统性能和效率。CIF(Camera Interface Format)协议是一种用于数字摄像头和处理器之间通信的协议。它定义了数据传输的格式和时序,包括像素数据、同步信号、时钟信号等。CIF协议支持多种分辨率和帧率,可以满足不同应用场景的需求。
提示:rk3568 cif支持8、10、12、16bits,可根据实际情况调整总线深度。
文章目录
- rk3568 适配摄像头 (CIF协议)
- 圈重点 看想学
- 1. 核查硬件,适配gc2145
- 1.1 核查硬件
- 1.2 内核设备树适配 gc2145
- 2 适配 lt8619
- 2.1 内核设备树适配 lt8619
- Tips
- 总结
圈重点 看想学
a) 适配 gc2145 摄像头
b) 适配 lt8619,HDMI-IN 转DVP
1. 核查硬件,适配gc2145
原理图中使用是高性能的摄像头gc2145,它适用于各种数字相机、手机、平板电脑等消费电子产品。gc2145还支持多种输出格式,包括YUV、RGB、JPEG等,可以满足不同应用场景的需求。此外,它还具有低功耗、小尺寸、易于集成等特点,可以方便地集成到各种消费电子产品中。gc2145的分辨率为640x480,支持最高30帧/秒的视频录制。它还具有自动曝光、自动白平衡、自动对焦等功能,可以自动调整图像的亮度、色彩和清晰度,使得拍摄出的照片和视频更加清晰、自然。它采用了先进的CMOS技术,具有高分辨率、低功耗、高灵敏度、低噪声等优点。
1.1 核查硬件
- 核查摄像头供电、传输协议
CIF_PWREN 是 gc2145 供电CIF_5V控制,受控于 GPIO0_C1。
CIF_PWDN 是 gc2145 休眠控制,受控于 GPIO4_A6。
CIF_RST 是gc2145 复位控制,受控于 GPIO3_B5。
IR_LED_EN 是红外补光灯控制,受控于 GPIO4_B3。
- rk3568 CIF总线连接
细心通许会发现 gc2145 仅有8bits总线,而rk3568则是16bits总线,如何连接呢? - CIF 总线位数适配
本文中采用8bits 总线,需连接高8位数据线。
1.2 内核设备树适配 gc2145
/ {
vcc_camera: vcc-camera-regulator {
compatible = "regulator-fixed";
gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&camera_pwr>;
regulator-name = "vcc_camera";
enable-active-high;
regulator-always-on;
regulator-boot-on;
};
};
&i2c4 {
/* i2c4 sda conflict with camera pwdn */
status = "okay";
/*
* gc2145 needs to be disabled,
* when gmac1 is enabled;
* pinctrl conflicts;
*/
gc2145: gc2145@3c {
compatible = "galaxycore,gc2145";
reg = <0x3c>;
clocks = <&cru CLK_CIF_OUT>;
clock-names = "xvclk";
power-domains = <&power RK3568_PD_VI>;
pinctrl-names = "default";
/* conflict with gmac1m1_rgmii_pins & cif_clk*/
pinctrl-0 = <&cif_clk &cif_dvp_clk &cif_dvp_bus16>;
/*avdd-supply = <&vcc2v8_dvp>;*/
/*dovdd-supply = <&vcc1v8_dvp>;*/
/*dvdd-supply = <&vcc1v8_dvp>;*/
reset-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CameraKing";
rockchip,camera-module-lens-name = "Largan";
port {
gc2145_out: endpoint {
remote-endpoint = <&dvp_in_bcam>;
};
};
};
};
&rkcif {
status = "okay";
};
&rkcif_dvp {
status = "okay";
port {
/* Parallel bus endpoint */
dvp_in_bcam: endpoint {
remote-endpoint = <&gc2145_out>;
bus-width = <8>;
vsync-active = <0>;
hsync-active = <1>;
};
};
};
&rkcif_mmu {
status = "okay";
};
&rkcif_dvp_sditf {
status = "okay";
};
2 适配 lt8619
Lontium的LT8619C是一款基于ClearEdge®技术的高性能HDMI/双模DP接收器芯片,符合HDMI1.4规范。TTL输出可支持RGB,BT656,BT1120,输出分辨率可支持高达4Kx2K@30Hz的分辨率。LT8619 可转换为DVP信号,而再拓展出一路HDMI-IN。
2.1 内核设备树适配 lt8619
/ {
vcc_camera: vcc-camera-regulator {
compatible = "regulator-fixed";
gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&camera_pwr>;
regulator-name = "vcc_camera";
enable-active-high;
regulator-always-on;
regulator-boot-on;
};
ext_cam_clk: external-camera-clock {
compatible = "fixed-clock";
clock-frequency = <25000000>;
clock-output-names = "CLK_CAMERA_25MHZ";
#clock-cells = <0>;
};
};
&i2c2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c2m1_xfer>;
lt8619c: lt8619c@32 {
compatible = "lontium,lt8619c";
reg = <0x32>;
clocks = <&ext_cam_clk>;
clock-names = "xvclk";
pinctrl-names = "default";
pinctrl-0 = <&cif_dvp_clk &cif_dvp_bus16 &cif_dvp_bus8>;
power-gpios = <&gpio0 RK_PD5 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_LOW>;
plugin-det-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
hpd-output-inverted;
rockchip,dvp-mode = <3>; /* 3:BT1120, 4:BT656, 5:BT1120_8bit */
rockchip,dual-edge = <1>; /* 0:single edge, 1:dual edge */
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "LT8619C";
rockchip,camera-module-lens-name = "NC";
port {
lt8619c_out: endpoint {
remote-endpoint = <&cif_para_in>;
bus-width = <16>;
pclk-sample = <1>;
};
};
};
};
&rkcif_dvp {
status = "okay";
port {
/* Parallel bus endpoint */
cif_para_in: endpoint {
remote-endpoint = <<8619c_out>;
};
};
};
&rkcif {
status = "okay";
};
&rkcif_mmu {
status = "okay";
};
&rkcif_dvp_sditf {
status = "okay";
};
Tips
- camera I2C通信无应答
先核查硬件供电,再核查上电时许、reset、pwdn等。然后是必须有要有的 clk 时钟,别问为什么,问就是不专业。 - camera clk信号没有
先排查GPIO 复用,再排查是否被正常申明,然后测量上电时许是否为开始正常然后消失。
camera 设备在注册失败,或者关闭camera时会主动关闭 clk。再测量则不会有信号。 - camera 正常注册,但是无法打开
HAL1和HAL3不仅需要内核正常注册,还需要匹配 camera列表。你的camera_default.xml 匹配了?
总结
活学活用,做个合格的搬运工。