【问题标题】:Raspberry Pi - SPI device tree changesRaspberry Pi - SPI 设备树更改
【发布时间】:2018-08-27 00:56:31
【问题描述】:

我试图在 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>;
};

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

&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 */
    };
};

【问题讨论】:

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


    【解决方案1】:

    没有。您不能只更改 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,你会发现这两个迷你 spi 都被命名为 SPI1 和 SPI2。为它们分配的 gpio 引脚为 spi1_gpio16 和 spi2_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>;
    };
    

    所以再次不是您要使用的引脚。

    如果你真的在修复中并且不能使用其他任何东西,你可能会去 bit banging spi

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2016-10-08
      • 2018-11-20
      • 2020-10-21
      • 2018-01-29
      • 1970-01-01
      相关资源
      最近更新 更多