头注释(1-7行)
通路: GC2145 → csi2-dphy2 → mipi1-csi2 → rkcif-mipi-lvds1
摄像头的完整数据流:传感器 → 物理层(DPHY) → 协议解析(CSI2) → 采集(CIF)
2. I2C4 节点(9-41行)
&i2c4 {
status = "okay";
clock-frequency = <400000>; // 400kHz
pinctrl-0 = <&i2c4m2_xfer>; // Pin5=SCL, Pin7=SDA
}
- 开启 I2C4 总线,用 M2 复用(GPIO3_C7=SCL, GPIO3_D0=SDA)
- 400kHz 是标准快模式
3. GC2145 传感器节点(16-40行)
gc2145@3c {
compatible = "galaxycore,gc2145"; // 匹配驱动
reg = <0x3c>; // I2C 地址
clocks = <&cru MCLK_REF_MIPI0>; // 24MHz 时钟源
reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_LOW>; // Pin3 复位
pinctrl-0 = <&mipi_refclk_out0>; // Pin2 输出24MHz时钟
rockchip,camera-module-index = <0>; // 第0个摄像头
rockchip,camera-module-facing = "back"; // 后置
}
端口连接:
port {
gc2145_out: endpoint {
remote-endpoint = <&csi_dphy2_input>; // 连到 dphy2
data-lanes = <1 2>; // 2-lane MIPI
};
};
4. CSI DPHY2 物理层(43-78行)
&csi2_dphy_hw { status = "okay"; }; // DPHY 硬件模块
&csi2_dphy2 { // 对应 PHY1 (CK1+D2+D3)
status = "okay";
port@0 { // 入口
csi_dphy2_input: endpoint@2 { // 来自 GC2145 传感器
reg = <2>;
remote-endpoint = <&gc2145_out>;
data-lanes = <1 2>;
};
};
port@1 { // 出口
csi_dphy2_output: endpoint@0 { // 传给 mipi1_csi2
remote-endpoint = <&mipi1_csi2_input>;
};
};
};
- 这是 MIPI D-PHY 物理层,把串行数据转成并行
- DPHY2 对应硬件 PHY1(CK1 + D2/D3 = 引脚 117-122)
endpoint@2的reg = <2>是 SoC 固定的硬件映射
5. MIPI CSI-2 协议层(80-110行)
&mipi1_csi2 {
status = "okay";
port@0 { // 入口
mipi1_csi2_input: endpoint@1 {
remote-endpoint = <&csi_dphy2_output>; // 来自 dphy2
};
};
port@1 { // 出口
mipi1_csi2_output: endpoint@0 {
remote-endpoint = <&cif_mipi_in>; // 传给 CIF
};
};
};
- 解析 MIPI CSI-2 协议(数据包拆分、VC 解复用)
- 属于 mipi1(RV1106 有 mipi0 和 mipi1,我们接在 mipi1 上)
6. CIF 采集(112-126行)
&rkcif {
status = "okay";
pinctrl-0 = <&mipi_pins>; // 设置所有 MIPI 引脚功能
};
&rkcif_mipi_lvds1 {
status = "okay";
port {
cif_mipi_in: endpoint {
remote-endpoint = <&mipi1_csi2_output>; // 来自 mipi1_csi2
};
};
};
rkcif= CIF 硬件模块,pinctrl配置全部 MIPI 引脚为功能 2rkcif_mipi_lvds1= 第二个 CIF 采集接口,接收 mipi1_csi2 解析后的数据
完整数据流
GC2145 传感器
→ 串行 MIPI 信号 (D2/D3 + CK1, 引脚117-122)
→ csi2_dphy2 (物理层, 串行转并行)
→ mipi1_csi2 (协议解析, 拆包)
→ rkcif_mipi_lvds1 (CIF 采集, DMA到内存)
→ /dev/video0