djqlyy 2025-10-27 14:29 采纳率: 100%
浏览 5
已结题

RK3576+ICN6211

RK3576+ICN6211完成MIPI转RGB
设备树信息如下:翻来覆去改了N版了,6211的输出没有任何信号变化,只在刚启动时,由高电平变成低电平,然后就再没有任何改变
参数了网络两位网友的信息,人家都可以,到这我啥都有,电路很简单,除了电源和地,几乎没什么可测的,输入MIPI有波形(用示波器能看到变化,对不对不知道)


&pinctrl {
    dsi {
        dsi_rst_gpio: dsi-rst-gpio {
            rockchip,pins = <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
        };
    };
};

&vp1 {                                                                                                           
    status = "okay";
};
&dsi_in_vp1 {
    status = "okay";
};
&route_dsi {
    status = "okay";
    connect = <&vp1_out_dsi>;
};

&dsi {
    status = "okay";
      rockchip,lane-rate = <390>;
    
    dsi_panel: panel@0 {
        status = "okay";
        compatible = "simple-panel-dsi";
        reset-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
        power-supply = <&vcc3v3_lcd_n>;
        pinctrl-names = "default";
        pinctrl-0 = <&dsi_rst_gpio>;
        reg = <0>;
        backlight = <&backlight>;
        reset-delay-ms = <50>;
        enable-delay-ms = <10>;
        prepare-delay-ms = <10>;
        unprepare-delay-ms = <10>;
        disable-delay-ms = <10>;
        init-delay-ms = <10>;
        dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
        MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>; 
        dsi,format = <MIPI_DSI_FMT_RGB888>;
        dsi,lanes  = <4>;
        panel-init-sequence = [
            23 01 02 7A C1    // Enable MIPI command config regsiters
            23 01 02 20 00
            23 01 02 21 A8
            23 01 02 22 24
            23 01 02 23 C9
            23 01 02 24 01
            23 01 02 25 76
            23 01 02 26 00
            23 01 02 27 2F
            23 01 02 28 10
            23 01 02 29 49
            23 01 02 34 80
            23 01 02 36 C9
            23 01 02 B5 A0
            23 01 02 5C FF
            23 01 02 2A 01  
            23 01 02 56 92
            23 01 02 6B 52 
            23 01 02 69 20 
            23 01 02 10 40
            23 01 02 11 88
            23 01 02 B6 20
            23 01 02 51 20
            23 01 02 09 10
        ];

        panel-exit-sequence = [
        ];

        disp_timings1: display-timings {
            native-mode = <&dsi_timing0>;
            dsi_timing0: timing0 {
                clock-frequency = <65000000>;
                hactive = <1024>;
                vactive = <680>;
                hfront-porch = <201>;
                hsync-len = <1>;
                hback-porch = <118>;
                vfront-porch = <47>;
                vsync-len = <16>;
                vback-porch = <73>;
                hsync-active = <0>;
                vsync-active = <0>;
                de-active = <1>;
                pixelclk-active = <0>;

                swap-rb = <0>;
                swap-rg = <0>;
                swap-gb = <0>;
            };
        };

        ports {
            #address-cells = <1>;
            #size-cells = <0>;

            port@0 {
                reg = <0>;
                panel_in_dsi: endpoint {
                    remote-endpoint = <&dsi_out_panel>;
                };
            };
        };
    };

    ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port@1 {
            reg = <1>;
            dsi_out_panel: endpoint {
                remote-endpoint = <&panel_in_dsi>;
            };
        };
    };

};

  • 写回答

5条回答 默认 最新

  • Juan_2012 2025-10-27 20:48
    关注

    回答参考qwen
    你当前的问题是:

    使用 RK3576 + ICN6211 实现 MIPI 转 RGB 功能,设备树已配置完成,MIPI 输入有信号(示波器可见波形),但 ICN6211 的 RGB 输出无任何变化,仅上电时 IO 电平由高变低后不再变动。

    从你的描述来看:

    • 硬件连接基本正确(电源、地、MIPI输入)
    • DSI 通道在启动阶段能被识别(reset 引脚动作正常)
    • ICN6211 没有输出 RGB 信号
    • 设备树反复修改无效

    🔍 一、问题定位:ICN6211 是什么芯片?

    ✅ ICN6211 基本信息

    参数说明
    类型MIPI DSI 转 RGB/LVDS 桥接芯片
    功能将 1/2/3/4-lane MIPI DSI 输入转换为 24-bit RGB 并行输出
    工作模式需要初始化寄存器配置(通过 I2C)
    是否需要固件?❌ 不需要,但需主机写入初始寄存器值
    典型应用Android 平板、工业屏转接板

    📌 关键点:

    ICN6211 本身是一个“被动桥接芯片”,必须由主控(如 RK3576)通过 I2C 发送初始化命令才能工作!


    🚫 当前问题的根本原因分析

    你在设备树中只配置了 MIPI DSI 控制器和 Panel 驱动部分,但 没有为 ICN6211 添加 I2C 初始化节点

    也就是说:

    • RK3576 → 发出 MIPI 信号 ✅
    • MIPI 到达 ICN6211 ✅
    • 但 ICN6211 处于未初始化状态 ❌
    • 所以它不知道如何解码 MIPI 流,也无法开启 RGB 输出 ❌

    ✅ 正确解决方案:添加 ICN6211 的 I2C 初始化支持

    你需要做三件事:

    ✅ 第一步:确认硬件连接是否包含 I2C

    检查原理图:

    • ICN6211 是否将 SCLSDA 连接到 RK3576 的某个 I2C 总线?
    • 是否有地址选择引脚(如 A0)接地或拉高?决定 I2C 地址(通常是 0x280x29

    如果没有接 I2C → 无法配置 ICN6211,功能不可能实现!


    ✅ 第二步:在设备树中添加 ICN6211 的 I2C 子节点

    假设:

    • ICN6211 接在 I2C4
    • I2C 地址为 0x28
    • 使用 GPIO 控制 reset 引脚(可选)
    &i2c4 {
        status = "okay";
        clock-frequency = <400000>;
    
        icn6211: icn6211@28 {
            compatible = "ingenic,icn6211";
            reg = <0x28>;
            status = "okay";
    
            // 可选:复位引脚
            reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;
            reset-delay-ms = <10>;
    
            // 必须提供初始化寄存器序列
            init-sequence = [
                /* 示例:配置为 4-lane MIPI to RGB888 */
                23 01 02 7A C1    // Enable config registers (厂商提供)
                23 01 02 20 00
                23 01 02 21 A8
                23 01 02 22 24
                23 01 02 23 C9
                23 01 02 24 01
                23 01 02 25 76
                23 01 02 26 00
                23 01 02 27 2F
                23 01 02 28 10
                23 01 02 29 49
                23 01 02 34 80
                23 01 02 36 C9
                23 01 02 B5 A0
                23 01 02 5C FF
                23 01 02 2A 01  
                23 01 02 56 92
                23 01 02 6B 52 
                23 01 02 69 20 
                23 01 02 10 40
                23 01 02 11 88
                23 01 02 B6 20
                23 01 02 51 20
                23 01 02 09 10
            ];
    
            // 输出时序配置(对应 RGB 屏参数)
            display-timings {
                native-mode = <&rgb_timing>;
                rgb_timing: timing {
                    clock-frequency = <65000000>;
                    hactive = <1024>;
                    vactive = <680>;
                    hfront-porch = <201>;
                    hsync-len = <1>;
                    hback-porch = <118>;
                    vfront-porch = <47>;
                    vsync-len = <16>;
                    vback-porch = <73>;
                    hsync-active = <0>;
                    vsync-active = <0>;
                    de-active = <1>;
                    pixelclk-active = <0>;
                };
            };
        };
    };
    

    ⚠️ 注意:init-sequence 必须来自 ICN6211 的规格书或原厂提供的配置!


    ✅ 第三步:确保内核支持 ICN6211 驱动

    方法①:使用通用 MIPI 转接芯片驱动(推荐)

    Linux 内核已有 bridge/ingenic-icn6211.c 驱动(较新版本),需启用:

    # 内核配置
    CONFIG_DRM_INGENIC_ICN6211=y
    

    然后在 compatible = "ingenic,icn6211" 匹配即可自动加载。

    方法②:若无驱动 → 自定义 platform driver

    需自行编写一个简单的 I2C 驱动,在 probe 时发送 init-sequence 到 ICN6211。


    ✅ 第四步:确认 MIPI DSI 工作在 Video Mode(非 Command Mode)

    你的设备树中设置了:

    dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | ... )>;
    

    ✅ 正确!因为 ICN6211 通常只支持 Video Burst Mode,不能用于 Command Mode(如手机屏幕)。


    🔧 调试建议

    1. 使用 i2cdetect 检查 ICN6211 是否在线

    i2cdetect -l                    # 查看所有 I2C 总线
    i2cdetect -y -r 4               # 扫描 I2C4 总线(假设挂载在 i2c4)
    

    预期输出中有 28 地址。

    2. 抓取 I2C 波形验证寄存器写入

    用逻辑分析仪查看:

    • 是否有写操作到 0x28
    • 数据是否包含你配置的 init-sequence

    3. 检查 ICN6211 的供电与时钟

    • AVDD33: 3.3V
    • DVDD12: 1.2V(内部 PLL 使用)
    • 是否有 CLKOUT 输出?应与 RGB pixel clock 一致

    4. 测量 RGB 输出端是否有 LVCMOS 电平跳变

    即使图像不对,至少应该看到:

    • HSYNC / VSYNC 脉冲
    • DE 使能信号
    • RGB 数据线变化

    如果全无跳动 → 表明 ICN6211 未工作


    ❗常见错误总结

    错误后果解决方案
    未接 I2CICN6211 无法初始化补线路,连 SCL/SDA
    未写 init-sequence芯片处于默认状态添加 device tree 配置
    I2C 地址错误通信失败查看 A0 引脚电平
    MIPI lane 数不匹配图像错乱或黑屏dsi,lanes=4 与实际一致
    时钟频率过高丢帧或无法锁定降低 lane-rate
    未启用内核驱动不会发送初始化配置 Kconfig 并编译

    ✅ 成功的关键条件

    条件是否满足
    ICN6211 支持 RGB 输出模式
    I2C 连接到主控
    设备树中添加 ICN6211 节点❌(你缺少这个)
    提供正确的 init-sequence❌(依赖厂商资料)
    内核有相应 bridge 驱动⚠️(检查是否存在)
    MIPI 时序与 panel 匹配✅(你已有 timing)

    ✅ 最终建议步骤

    1. ✅ 确认 ICN6211 的 I2C 引脚连接到了 RK3576 的哪个 I2C 控制器
    2. ✅ 在对应 &i2cX 下添加 icn6211@28 子节点
    3. ✅ 添加 init-sequence(找原厂或参考设计获取)
    4. ✅ 编译烧录,用 i2cdetect 验证通信
    5. ✅ 用示波器/逻辑分析仪查看 RGB 输出是否有信号

    📚 参考资源

    • ICN6211 datasheet(搜索 "ICN6211 Datasheet PDF")
    • Ingenic 官方技术支持文档
    • Rockchip Wiki: https://wiki.t-firefly.com/
    • Linux 内核源码路径:drivers/gpu/drm/bridge/ingenic-icn6211.c

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月27日