You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Toradex Verdin iMX8M Plus平台多SPI设备节点配置问题咨询

Toradex Verdin iMX8M Plus平台多SPI设备节点配置问题咨询

你好!看到你在Toradex Verdin iMX8M Plus平台上配置多SPI设备节点时碰了壁,目前只有spidev0.0能正常出现,想要的spidev0.1、spidev1.0、spidev1.1、spidev2.0、spidev2.1都没出来,我来帮你梳理下问题点和解决思路:

一、当前配置里的几个关键问题

  1. 兼容属性不匹配
    你在imx8mp-verdin-yavia.dtsi里给spidev节点用了compatible = "toradex,evalspi",但实际上Toradex官方的SPI overlay里用的是"rohm,dh2228fv"来绑定spidev驱动(部分内核版本也支持直接用"spidev"),这个属性不对会导致内核无法识别并加载spidev驱动,自然不会生成对应的设备节点。

  2. SPI片选引脚被复用为GPIO
    看imx8mp-verdin.dtsi里的pinctrl_ecspi1配置,MX8MP_IOMUXC_ECSPI1_SS0被设置成了GPIO5_IO09,如果要使用多个片选(比如@0、@1、@2),需要把对应的SS引脚都配置为SPI片选功能,而不是GPIO。而且你还需要确认硬件上ecspi1是否支持多个片选,并找到对应的引脚定义来配置。

  3. ecspi2/ecspi3未配置spidev节点
    你需要的spidev1.x、spidev2.x对应ecspi2和ecspi3控制器,但目前你只给ecspi1添加了spidev子节点,ecspi2和ecspi3完全没配置,自然不会生成对应的设备文件。另外还要注意:你的pinctrl_bt_uart里把ecspi2的所有引脚都复用成了UART4的引脚,这会直接导致ecspi2无法使用,必须先解决这个引脚冲突问题。

  4. overlay与板级dtsi的配置冲突
    你提到有一个未修改的官方overlay,里面已经配置了ecspi1的spidev@0,如果同时加载overlay和板级dtsi的配置,很可能会出现冲突,导致配置不生效。

二、具体修改步骤

1. 修正spidev节点的兼容属性

把所有spidev子节点的compatible字段改成和官方overlay一致的"rohm,dh2228fv",比如:

spidev@0 {
    compatible = "rohm,dh2228fv";
    reg = <0>;
    spi-max-frequency = <10000000>;
    status = "okay";
};

2. 修复SPI引脚配置

  • ecspi1的片选引脚:修改pinctrl_ecspi1,把SS0/SS1/SS2配置为SPI片选功能,而不是GPIO。比如:
pinctrl_ecspi1: ecspi1grp {
    fsl,pins = <
        MX8MP_IOMUXC_ECSPI1_SCLK__ECSPI1_SCLK       0x4 /* SODIMM 196 */
        MX8MP_IOMUXC_ECSPI1_MOSI__ECSPI1_MOSI       0x4 /* SODIMM 200 */
        MX8MP_IOMUXC_ECSPI1_MISO__ECSPI1_MISO       0x1c4   /* SODIMM 198 */
        MX8MP_IOMUXC_ECSPI1_SS0__ECSPI1_SS0     0x1c4   /* 恢复为SPI片选功能 */
        MX8MP_IOMUXC_ECSPI1_SS1__ECSPI1_SS1     0x1c4   /* 配置SS1引脚,需对应硬件手册的SODIMM编号 */
        MX8MP_IOMUXC_ECSPI1_SS2__ECSPI1_SS2     0x1c4   /* 配置SS2引脚,需对应硬件手册的SODIMM编号 */
    >;
};
  • ecspi2的引脚冲突:修改pinctrl_bt_uart,把UART4的引脚换成其他未被占用的引脚,或者放弃蓝牙UART功能,释放ecspi2的引脚,同时配置pinctrl_ecspi2为SPI功能。

3. 给ecspi2/ecspi3添加spidev节点

在imx8mp-verdin-yavia.dtsi里补充ecspi2和ecspi3的配置,比如:

/* Verdin SPI_2 */
&ecspi2 {
    status = "okay";

    spidev@0 {
        compatible = "rohm,dh2228fv";
        reg = <0>;
        spi-max-frequency = <10000000>;
        status = "okay";
    };

    spidev@1 {
        compatible = "rohm,dh2228fv";
        reg = <1>;
        spi-max-frequency = <10000000>;
        status = "okay";
    };
};

/* Verdin SPI_3 */
&ecspi3 {
    status = "okay";

    spidev@0 {
        compatible = "rohm,dh2228fv";
        reg = <0>;
        spi-max-frequency = <10000000>;
        status = "okay";
    };

    spidev@1 {
        compatible = "rohm,dh2228fv";
        reg = <1>;
        spi-max-frequency = <10000000>;
        status = "okay";
    };
};

4. 处理overlay冲突

要么修改官方overlay,把所有需要的spidev节点都加进去,然后只加载这个overlay;要么禁用这个overlay,直接在板级dtsi里完成所有SPI配置,避免冲突。

三、验证配置

修改完成后重新编译设备树,烧写到板子上,重启后查看/dev目录下的spidev节点,确认是否都正常生成。如果还是有问题,可以通过dmesg | grep spi查看内核日志,排查驱动加载和设备节点创建的错误信息。

备注:内容来源于stack exchange,提问作者Nahel VERDIER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:29:37