Raspberry Pi-SPI设备树更改

时间:2018-08-23 18:18:37

标签: raspberry-pi linux-device-driver device-tree

我试图在Raspberry Pi 3上移动SPI总线。我想将其从GPIO 7-11移动到GPIO引脚22-26。文件“ bcm2708_common.dtsi”包含spi0总线的节点:

spi0: spi@7e204000 {
    compatible = "brcm,bcm2835-spi";
    reg = <0x7e204000 0x1000>;
    interrupts = <2 22>;
    clocks = <&clk_core>;
    #address-cells = <1>;
    #size-cells = <0>;
    status = "disabled";
    /* the dma channels */
    dmas = <&dma 6>, <&dma 7>;
    dma-names = "tx", "rx";
    /* the chipselects used - <0> means native GPIO
     * add more gpios if necessary as <&gpio 6 1>
     * (but do not forget to make them output!)
     */
    cs-gpios = <0>, <0>;
};

在顶级dts文件“ bcm2710-rpi-3-b.dts”中配置了spi:

&gpio {
    spi0_pins: spi0_pins {
        brcm,pins = <7 8 9 10 11>;
        brcm,function = <4>; /* alt0 */
    };
};

&spi0 {
    pinctrl-names = "default";
    pinctrl-0 = <&spi0_pins>;
    cs-gpios = <0 0>;

    spidev@0{
        compatible = "spidev";
        reg = <0>;  /* CE0 */
        #address-cells = <1>;
        #size-cells = <0>;
        spi-max-frequency = <500000>;
    };

    spidev@1{
        compatible = "spidev";
        reg = <1>;  /* CE1 */
        #address-cells = <1>;
        #size-cells = <0>;
        spi-max-frequency = <500000>;
    };
};

重新配置spi引脚就像更改gpio条目一样简单,还是需要做更多事情?

&gpio {
    spi0_pins: spi0_pins {
        brcm,pins = <22 23 24 25 26>;
        brcm,function = <4>; /* alt0 */
    };
};

1 个答案:

答案 0 :(得分:2)

不。您不仅可以更改DTSI中的引脚号并进行更改。

长答案: brcm,pins字段仅供驱动程序参考,如果硬件不支持您在此处编写的引脚,则无法使其正常工作。在Rpi 3b上,将引脚7,8,9,10,11支持为SPI,即可以将其复用为SPI(字段brcm,function指示将引脚设置为哪种复用模式)。

现在,如果您搜索BCM2835 ARM peripheral,也会在第152页中找到以下内容:

  

BCM2835器件只有一个这种类型的SPI接口。它是   在所有文档中均称为SPI0。它有两个额外的   迷你SPI接口(SPI1和SPI2)。这些的规格可以是   在2.3 Universal SPI Master(2x)下可以找到。

因此,Rpi上的SoC本身不支持任何其他引脚上的其他spi。

现在为以上引用的第二句话

  

它具有两个附加的微型SPI接口(SPI1和SPI2)。可以在2.3 Universal SPI Master(2x)下找到这些规范。

如果深入研究bcm283x.dtsi,您会发现这两个微型spis都被命名为SPI1和SPI2。为它们分配的gpio引脚分别为spi1_gpio16spi2_gpio40 使用针脚:

spi1_gpio16: spi1_gpio16 {
brcm,pins = <16 17 18 19 20 21>;
brcm,function = <BCM2835_FSEL_ALT4>;
};
spi2_gpio40: spi2_gpio40 {
brcm,pins = <40 41 42 43 44 45>;
brcm,function = <BCM2835_FSEL_ALT4>;
};

同样不是您要使用的引脚。

如果您确实确实在修复中并且不能使用其他任何东西,则可能会遇到一些spi