请教 软件I2C如何配置?

  • 您好,我们没有在Luckfox Lyra 上实测过该功能 ,比较明显的问题是pinctrl设置里面的

    Code: Select all

    &pinctrl {
    	gpio_i2c3 {
    		gpio_i2c3_sda: gpio-i2c3-sda {
    			rockchip,pins =
    				<4 RK_PA1 35 &pcfg_pull_up>;
    		};
    	};
    
    	gpio_i2c3 {
    		gpio_i2c3_scl: gpio-i2c3-scl {
    			rockchip,pins =
    				<4 RK_PA0 34 &pcfg_pull_up>;
    		};
    	};
    };
    
    将复用功能设置为 34 35 也就是i2c2-scl 和 i2c2-sda, 会在内部把引脚连接到 i2c2 控制器,有可能这就是导致 I2C3 没有挂载成功的原因,进一步确定建议您结合源码和内核的打印日志分析
  • Crocodile wrote: 2025-09-05 6:21 您好,我们没有在Luckfox Lyra 上实测过该功能 ,比较明显的问题是pinctrl设置里面的

    Code: Select all

    &pinctrl {
    	gpio_i2c3 {
    		gpio_i2c3_sda: gpio-i2c3-sda {
    			rockchip,pins =
    				<4 RK_PA1 35 &pcfg_pull_up>;
    		};
    	};
    
    	gpio_i2c3 {
    		gpio_i2c3_scl: gpio-i2c3-scl {
    			rockchip,pins =
    				<4 RK_PA0 34 &pcfg_pull_up>;
    		};
    	};
    };
    
    将复用功能设置为 34 35 也就是i2c2-scl 和 i2c2-sda, 会在内部把引脚连接到 i2c2 控制器,有可能这就是导致 I2C3 没有挂载成功的原因,进一步确定建议您结合源码和内核的打印日志分析
    这里我改了

    Code: Select all

    &pinctrl {
    	i2c_pcfg_pull_up: i2c-pcfg-pull-up {
            bias-pull-up;
            drive-open-drain;
        };
    
    	rm_io0 {
    		rm_io0_i2c2_sda: rm-io0-i2c2-sda {
    			rockchip,pins =
    				<0 RK_PA0 35 &pcfg_pull_up>;
    		};
    	};
    
    	rm_io1 {
    		rm_io1_i2c2_scl: rm-io1-i2c2-scl {
    			rockchip,pins =
    				<0 RK_PA1 34 &pcfg_pull_up>;
    		};
    	};
    
    	i2c3_gpio: i2c3-gpio {
    		rockchip,pins =
    			<4 RK_PA1 RK_FUNC_GPIO &i2c_pcfg_pull_up>,
    			<4 RK_PA0 RK_FUNC_GPIO &i2c_pcfg_pull_up>;
    	};
    };

    Code: Select all

    i2c3: i2c-gpio-3 {
    		compatible = "i2c-gpio";
    		gpios = <&gpio4 1 GPIO_ACTIVE_HIGH>, /* PT1_SDA = GPIO4_A1_z  */
    				<&gpio4 0 GPIO_ACTIVE_HIGH>; /* PT1_SCL = GPIO4_A0_z  */
    
    		i2c-gpio,delay-us = <2>;
    		#address-cells = <1>;
    		#size-cells = <0>;
            pinctrl-names = "default";
            pinctrl-0 = <&i2c3_gpio>;
    		status = "okay";
    	};
    然后看启动日志,显示找不到i2c3-gpio这个组。
    root@luckfox:~# dmesg |grep i2c
    [ 1.428940] rockchip-pinctrl pinctrl: unable to find group for node i2c3-gpio
    [ 1.429116] gpio-99 (i2c-gpio-4): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.429207] gpio-102 (i2c-gpio-4): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.429383] i2c-gpio i2c-gpio-4: using lines 99 (SDA) and 102 (SCL)
    [ 1.429557] gpio-100 (i2c-gpio-5): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.429648] gpio-101 (i2c-gpio-5): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.429797] i2c-gpio i2c-gpio-5: using lines 100 (SDA) and 101 (SCL)
    [ 1.429960] gpio-131 (i2c-gpio-6): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.430038] gpio-130 (i2c-gpio-6): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.430196] i2c-gpio i2c-gpio-6: using lines 131 (SDA) and 130 (SCL)
    [ 1.430343] gpio-33 (i2c-gpio-7): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.430422] gpio-32 (i2c-gpio-7): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.430560] i2c-gpio i2c-gpio-7: using lines 33 (SDA) and 32 (SCL)
    [ 1.430700] gpio-96 (i2c-gpio-8): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.430777] gpio-98 (i2c-gpio-8): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [ 1.430936] i2c-gpio i2c-gpio-8: using lines 96 (SDA) and 98 (SCL)
    [ 1.570350] i2c_dev: i2c /dev entries driver
  • 您的pinctrl应该添加group去消除 unable to find group for node i2c3-gpio 报错,

    Code: Select all

    &pinctrl {
        i2c3 {
            i2c3_gpio: i2c3-gpio {
                rockchip,pins =
                    <4 RK_PA1 0 &i2c_pcfg_pull_up>, /* SCL */
                    <4 RK_PA0 0 &i2c_pcfg_pull_up>; /* SDA */
            };
        };
    };
    
  • Crocodile wrote: 2025-09-08 2:26 您的pinctrl应该添加group去消除 unable to find group for node i2c3-gpio 报错,

    Code: Select all

    &pinctrl {
        i2c3 {
            i2c3_gpio: i2c3-gpio {
                rockchip,pins =
                    <4 RK_PA1 0 &i2c_pcfg_pull_up>, /* SCL */
                    <4 RK_PA0 0 &i2c_pcfg_pull_up>; /* SDA */
            };
        };
    };
    
    好的,谢谢哥 :lol: