我试图在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 */
};
};
答案 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_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>;
};
同样不是您要使用的引脚。
如果您确实确实在修复中并且不能使用其他任何东西,则可能会遇到一些spi