我试图移动一个覆盆子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 */
};
};发布于 2018-08-26 16:56:31
不是的。你不能只是改变在DTSI中的引脚号码,并使它改变。
很长的答案:brcm,pins字段只是驱动程序要参考的信息,如果硬件不支持你在那里写的引脚,你就不能让它工作。在Rpi 3b上,支持将引脚7、8、9、10、11作为SPI支持,也就是说,它们可以被复用为SPI (字段brcm,function告诉要设置引脚的多路复用模式)。
现在,如果您搜索BCM2835臂外围,您将在第152页中找到以下内容:
BCM2835设备只有一个类型的SPI接口。在所有文档中,它都被称为SPI0。它还有两个额外的迷你SPI接口(SPI1和SPI2)。其特殊性可在2.3通用SPI硕士(2x)下找到。
因此,Rpi上的SoC本身不支持任何其他引脚上的其他spi。
下面是上述引文的第二句。
它还有两个额外的迷你SPI接口(SPI1和SPI2)。这些>的特别化可在2.3通用SPI主(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有点兴趣。
https://stackoverflow.com/questions/51992005
复制相似问题