STM32
直播中

h1654155275.5661

7年用户 993经验值
私信 关注
[问答]

stm32mp135 i2c3无法正常probe怎么解决?

你好我的板子基于STM32mp135f-dk板子来设计的,使用buildroot编译(st/2023.02.2),通过修改开发板的设备树来实现我的功能(buildroot-external-st/board/stmicroelectronics/stm32mp1/linux-dts/stm32mp135f-dk-mx.dts)。
我一共使用了3路i2c,i21,i2c3和i2c5
设备树添加如下
i2c1{pinctrl-names = "default", "sleep";pinctrl-0 = < i2c1_pins_mx>;pinctrl-1 = < i2c1_sleep_pins_mx>;//status = "okay";status = "okay";
/ USER CODE BEGIN i2c1 /i2c-scl-rising-time-ns = <170>;i2c-scl-falling-time-ns = <5>;clock-frequency = <100000>;/delete-property/ dmas;/delete-property/ dma-names;//pcf8563@51{//    compatible = "nxp,pcf8563";//    reg = <0x51>;//    status = "okay";//};}; i2c3{pinctrl-names = "default", "sleep";pinctrl-0 = < i2c3_pins_mx>;pinctrl-1 = < i2c3_sleep_pins_mx>;status = "okay";
/ USER CODE BEGIN i2c1 /i2c-scl-rising-time-ns = <170>;i2c-scl-falling-time-ns = <5>;clock-frequency = <100000>;/delete-property/ dmas;/delete-property/ dma-names;pcf8563@51{compatible = "nxp,pcf8563";reg = <0x51>;status = "okay";};}; i2c5{pinctrl-names = "default", "sleep";pinctrl-0 = < i2c5_pins_mx>;pinctrl-1 = < i2c5_sleep_pins_mx>;status = "okay";
/ USER CODE BEGIN i2c5 /i2c-scl-rising-time-ns = <170>;i2c-scl-falling-time-ns = <5>;
...
但编译下载到板子上发现并没有i2c3下的设备枚举过程
然后在i2c/busses/i2c-stm32f7.c中增加log打印(stm32f7_i2c_probe的进入)
diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.cindex 7bb4a4af4..db6957db7 100644--- a/drivers/i2c/busses/i2c-stm32f7.c+++ b/drivers/i2c/busses/i2c-stm32f7.c@@ -2092,6 +2092,7 @@ static int stm32f7_i2c_probe(struct platform_device pdev)struct reset_control rst;dma_addr_t phy_addr;int irq_error, irq_event, ret;

  • printk("hgs begin stm32f7_i2c_proben");
编译烧录通过dmesg查看只有i2c1和i2c5有正常probe,而i2c3没有probe
dmesg | grep hgs

[    3.629664] hgs begin stm32f7_i2c_probe[    3.632602] stm32f7-i2c 40012000.i2c: hgs stm32f7_i2c_probe[    3.702230] hgs begin stm32f7_i2c_probe[    3.708457] stm32f7-i2c 4c006000.i2c: hgs stm32f7_i2c_probe


请问如果让i2c3正常probe


回帖(1)

王英

2024-7-5 17:27:38
您好!根据您提供的信息,您正在使用基于STM32MP135F-DK板子的自定义硬件,并使用Buildroot(版本2023.02.2)进行编译。您已经修改了设备树文件(buildroot-external-st/board/stmicroelectronics/stm32mp1/linux-dts/stm32mp135f-dk-mx.dts)以实现所需的功能,并使用了3个I2C接口(I2C1、I2C3和I2C5)。您遇到了I2C3无法正常probe的问题。

为了解决这个问题,请按照以下步骤操作:

1. 检查I2C3的设备树配置:首先,请确保I2C3的设备树配置正确。检查I2C3的节点是否已经添加到设备树文件中,并且配置了正确的pinctrl-names、pinctrl-0和pinctrl-1属性。例如:

```
i2c3 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&i2c3_pins_mx>;
    pinctrl-1 = <&i2c3_sleep_pins_mx>;
    status = "okay";
};
```

2. 检查I2C3的引脚配置:确保I2C3的SDA和SCL引脚已经正确连接到您的自定义硬件上,并且与您的设备兼容。检查引脚配置是否正确,例如:

```
&i2c3 {
    pins1 {
        pinmux = ; /* SDA */
        bias-pull-up;
    };
    pins2 {
        pinmux = ; /* SCL */
        bias-pull-up;
    };
};
```

3. 检查I2C3的驱动程序:确保您的内核已经包含了I2C3的驱动程序。您可以在内核配置文件(.config)中查找I2C3驱动程序的相关选项,例如:

```
CONFIG_I2C_STM32=y
```

4. 检查I2C3的设备:确保您要连接的I2C设备已经正确连接到I2C3的SDA和SCL引脚上,并且设备已经上电。

5. 重新编译和烧录:在完成上述检查和修改后,重新编译您的Buildroot项目,并将新的镜像烧录到您的板子上。

6. 检查系统日志:在烧录新的镜像后,检查系统日志以获取有关I2C3的probe失败的详细信息。您可以使用以下命令查看日志:

```
dmesg | grep i2c
```

根据日志中的信息,您可以进一步诊断问题并进行相应的调整。

希望这些建议能帮助您解决I2C3无法正常probe的问题。如果问题仍然存在,请随时提供更多详细信息,以便我们为您提供更具体的帮助。
举报

更多回帖

×
20
完善资料,
赚取积分