NXP MCU 技术论坛
直播中

打马过草原

10年用户 983经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

imx8.mp为什么无法设置摄像机?

我正在尝试设置一个自定义摄像头,该摄像头连接到具有 imx.8mp 的主板的 CSI0 端口。摄像头通过 LVDS 连接到 MIPI 桥接器,桥接器的 I2C 当前由微控制器编程。我不知道;暂时不需要 I2C。
我已使用 Scope 进行了检查,并在引脚上看到了 MIPI CSI 信号。
我正在尝试启动并运行软件,但 /dev/video0 设备未创建。问题是 IMX8-MEDIA-DEV 驱动程序无法探测。
这是我的相关 DTS 代码:
     / {        cam1_clk: cam1-clk {                #clock-cells = <0>;                compatible = "fixed-clock";                clock-frequency = <27000000>;        };}; cameradev {        status = "okay";}; i2c3 {        cam1: camera1@36 {                compatible = "onsemi,ar052x";                reg = <0x36>;                #address-cells = <0x1>;                #size-cells = <0x0>;                clocks = < cam1_clk>;                clock-names = "ext";                port@0 {                        reg = <0>;                        cam1_mipi_ep: endpoint {                                remote-endpoint = < mipi_csi0_ep>;                                bus-type = <4>; /* MIPI CSI-2 D-PHY */                                data-lanes = <2>;                                clock-lanes = <0>;                                                      clock-noncontinuous = <1>;                        };                };        };}; isi_0 {        status = "okay";        cap_device {                status = "okay";        };}; isi_1 {        status = "okay";        cap_device {                status = "okay";        };}; mipi_csi_0 {        status = "okay";        #address-cells = <1>;        #size-cells = <0>;        compatible = "fsl,imx8mp-mipi-csi";        no-reset-control;        //power-domains = < mipi_phy1_pd>;        port@0 {                reg = <0>;                mipi_csi0_ep: endpoint {};        };}; mipi_csi0_ep {        remote-endpoint = < cam1_mipi_ep>;        data-lanes = <4>;        csis-hs-settle = <16>;        csis-clk-settle = <2>;        csis-wclk;}; mipi_csi_1 {        status = "okay";        port@1 {                reg = <1>;                mipi_csi1_ep: endpoint {};        };};
[  107.559356] imx8_mipi_csi2_sam: module is from the staging directory, the quality is unknown, you have been warned.[  107.580669] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator[  107.611984] : mipi_csis_imx8mp_phy_reset, No remote pad found![  107.626983] mxc-mipi-csi2-sam 32e50000.csi: lanes: 2, hs_settle: 0, clk_settle: 0, wclk: 0, freq: 266000000[  107.658121] ar052x 1-0036: Probing ar052x Driver[  107.662908] i2c i2c-1: new_device: Instantiated device ar052x at 0x36[  107.688612] imx8_isi_capture: module is from the staging directory, the quality is unknown, you have been warned.[  107.711395] imx8_capture: module is from the staging directory, the quality is unknown, you have been warned.[  107.724051] isi-capture 32e00000.isi:cap_device: deferring 32e00000.isi:cap_device device registration[  107.733520] mxc-isi 32e00000.isi: mxc_isi.0 registered successfully[  107.741636] isi-capture 32e02000.isi:cap_device: deferring 32e02000.isi:cap_device device registration[  107.751060] mxc-isi 32e02000.isi: mxc_isi.1 registered successfully[  108.118167] imx8_media_dev: module is from the staging directory, the quality is unknown, you have been warned.[  108.164988] mx8-img-md: Registered mxc_isi.0.capture as /dev/video0[  108.194417] mx8-img-md: Registered mxc_isi.1.capture as /dev/video1[  108.214117] mxc-md 32c00000.bus:camera: 2 deferring csi device registration以下是显示失败的日志。我不明白为什么媒体驱动程序会尝试查找名为“isi”的节点,并在两个节点相同时失败。
到目前为止,我已经尝试了很多方法。
其中一件重要的事情是,当我在 mipi_csi1 中设置 status=“disabled” 时,csi2-sam 驱动程序不会探测

回帖(1)

符筹荣

2025-3-27 17:53:58

针对你遇到的问题,以下是逐步分析和解决方案:




1. 检查设备树 (DTS) 配置



  • CSI 控制器配置

    确保 csi1 节点已启用且配置正确,包括时钟、电源和端口定义。例如:
     &csi1 {
         status = "okay";
         /* 其他必要属性:时钟、电源等 */
    };

  • 桥接器节点配置

    桥接器需要声明为 MIPI 接收端(compatible 可能需指定为桥接器型号,如 "lvds-to-mipi"),并正确连接到 CSI 端口:
     bridge@1a {
         compatible = "your-bridge-compatible";
         reg = <0x1a>; // 假设桥接器的 I2C 地址
         ports {
             port@0 {
                 bridge_out: endpoint {
                     remote-endpoint = <&csi1_in>;
                     data-lanes = <1 2>; // 与实际硬件匹配的 Lane 数量
                 };
             };
         };
    };

  • 物理连接验证

    确保 csi1port 节点正确引用桥接器的 endpoint
     &csi1 {
         port {
             csi1_in: endpoint {
                 remote-endpoint = <&bridge_out>;
             };
         };
    };




2. 确认桥接器驱动加载



  • 内核驱动支持

    检查桥接器的 compatible 字符串是否匹配内核中已有的驱动(如 ti-sn65dsi86 或其他型号)。若驱动未启用,需配置内核选项(如 CONFIG_VIDEO_SN65DSI86)并重新编译。

  • 驱动加载状态

    使用 dmesg | grep -i bridgelsmod 查看驱动是否加载。若未加载,可能需要手动加载模块(如 modprobe sn65dsi86)。




3. I2C 通信的必要性



  • 即使由 MCU 控制 I2C,部分桥接器仍需在 DTS 中声明 I2C 节点,以便内核驱动初始化基础配置。例如:
     i2c@some-node {
         bridge@1a {
             compatible = "your-bridge-compatible";
             reg = <0x1a>;
         };
    };

  • 如果驱动依赖 I2C 探测设备,需确保桥接器的 I2C 地址正确且总线未被禁用。




4. 时钟和电源管理



  • 时钟配置

    检查 cam1_clk 的频率是否与桥接器和摄像头需求匹配:
     cam1_clk: cam1-clk {
         compatible = "fixed-clock";
         #clock-cells = <0>;
         clock-frequency = <24000000>; // 示例值,需与实际硬件匹配
    };

  • 电源管理

    确保摄像头和桥接器的电源使能 GPIO 或 regulator 已配置(如 pwdn-gpiosreset-gpios)。




5. 媒体控制器链路验证



  • 使用 media-ctl 工具检查拓扑:
     media-ctl -p -d /dev/media0

  • 若链路未建立,手动配置链接:
     media-ctl -l "'bridge_out':1 -> 'csi1':0 [1]"




6. 调试内核日志



  • 运行 dmesg | grep -iE "csi|mipi|bridge|media" 查找关键错误:

    • -EPROBE_DEFER: 依赖资源未就绪(如时钟未初始化)。

    • I2C 通信失败: 检查地址、总线速度、物理连接。

    • Lane 配置错误: 确认 data-lanes 数量与硬件匹配。





7. 物理层配置



  • Lane 参数

    检查 endpoint 中的 data-lanesclock-laneslane-polarity(如反转需设置 lane-polarity = <1>)。

  • MIPI 时序

    确认桥接器输出与 CSI 接收端的时序(如 HS/LP 模式)兼容。




8. 内核配置确认



  • 确保以下配置已启用:
     CONFIG_VIDEO_IMX8_MEDIA=y
    CONFIG_VIDEO_IMX8_ISI=y
    CONFIG_VIDEO_IMX_MIPI_CSIS=y
    CONFIG_VIDEO_SN65DSI86=y  # 替换为实际桥接器驱动




总结步骤



  1. 修正 DTS:确保桥接器和 CSI 端口连接正确,时钟/电源配置无误。

  2. 检查驱动加载:确认桥接器驱动已启用且无 I2C 探测失败。

  3. 分析 dmesg:根据内核日志定位具体错误(如时钟缺失、I2C 错误)。

  4. 物理层验证:确认 Lane 数量、极性、时序与硬件匹配。


如果仍有问题,请提供完整的 DTS 片段和 dmesg 错误日志以进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分