NXP

imx7d 通过imx7d-sdb.dts 添加 spi设备

2019-07-12 13:30发布

通过nxp yocto工程获得的kernel 对应的imx7d-sdb.dts并不包含spi设备(即 在/dev/下没有spidev0.0 和 spidev1.0),想要访问spi设备需要自己添加。废话不多说,下面说一下我自己添加的过程,本人亲测,有效。 linux kerel大概从2.6以后用dts把一些跟板级硬件配置相关的东东都放在了Device Tree Source中,一般放置在内核的arch/arm/boot/dts/目录。这样做的好处多多,有多少,自己百度。 我添加spi的过程如下: 1:打开 imx7d-sdb.dts 添加spi节点: &ecspi1 {   
    fsl,spi-num-chipselects = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
    cs-gpios = <&gpio4 19 0>;     
    status = "okay";         spidev@1 {
        spi-max-frequency = <48000000>;
        reg = <0>;
        compatible = "rohm,dh2228fv";
    };  
    
}; &ecspi2 {   
    fsl,spi-num-chipselects = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
    cs-gpios = <&gpio4 23 0>;     
    status = "okay";         spidev@2 {
        spi-max-frequency = <48000000>;
        reg = <0>;
        compatible = "rohm,dh2228fv";
    };   }; 2:定义相关引脚
        pinctrl_ecspi1_cs: ecspi1_cs_grp {
            fsl,pins = <
                           MX7D_PAD_ECSPI1_SS0__GPIO4_IO19    0x80000000
            >;
        };         pinctrl_ecspi1: ecspi1grp {
            fsl,pins = <
                MX7D_PAD_ECSPI1_SCLK__ECSPI1_SCLK    0x1
                MX7D_PAD_ECSPI1_MOSI__ECSPI1_MOSI    0x1
                MX7D_PAD_ECSPI1_MISO__ECSPI1_MISO    0x1
            >;
        };
                pinctrl_ecspi2_cs: ecspi2_cs_grp {
            fsl,pins = <
                           MX7D_PAD_ECSPI2_SS0__GPIO4_IO23     0x80000000
            >;
        };         pinctrl_ecspi2: ecspi2grp {
            fsl,pins = <
                MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK     0x1
                MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI    0x1
                MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO    0x1
            >;
        }; 3:make;找到编译好的dtb(即imx7d-sdb.dtb),替换原来的dtb,注意名字要和uboot里面 fdt_file设置一样。 4:重启,ls /dev/spi* spidev0.0  spidev1.0 大功告成,哈哈。 note:有些板子kernel会启动失败,我遇到的情况是spi引脚被别的设备占用了,在dts中注释掉被占用的引脚即可。 例如: uart6 ,udsh2