我想使用 PRU 在 beaglebone black 上运行 McSPI 抛出寄存器编程。因此,我需要根据技术参考手册 AM335x 禁用 spidev(该 spi 模块的)来操作 mcspi 的寄存器。换句话说,我想从spidev控制spi模块并使用寄存器级编程。如何禁用 spidev 模块?
另外,在我的 BBB 中的以下命令中,显示两个 spi 模块的 spidev 均处于活动状态:
root@beaglebone:~# ls /dev/sp*
/dev/spidev1.0 /dev/spidev1.1 /dev/spidev2.0 /dev/spidev2.1
答案1
根据您使用的 GNU/Linux 发行版和内核版本,答案会有所不同,但通常您必须使用设备树或设备树覆盖。
在那里,您需要禁用spi1
和spi2
将引脚标记为由 PRU 控制。
对于 Linux 4.4.xa 设备树看起来像这样:
/dts-v1/;
#include "am33xx.dtsi"
#include "am335x-bone-common.dtsi"
#include "am33xx-pruss-rproc.dtsi"
&am33xx_pinmux {
pru_cape_bone_pins: pru_cape_bone_pins {
pinctrl-single,pins = <
BONE_P9_22 ( PIN_INPUT_PULLUP | MUX_MODE0 ) // SCLK
BONE_P9_21 ( PIN_INPUT_PULLUP | MUX_MODE0 ) // MISO
BONE_P9_18 ( PIN_OUTPUT_PULLUP | MUX_MODE0 ) // MOSI
BONE_P9_17 ( PIN_OUTPUT_PULLUP | MUX_MODE0 ) // CS0
>;
};
};
&pruss {
pinctrl-names = "default";
pinctrl-0 = <&pru_cape_bone_pins>;
};
&spi0 {
status = "disabled";
};
&spi1 {
status = "disabled";
};
然而:不要按原样使用此代码!
我不确定包含的.dtsi
文件、确切的引脚或部分/设备名称,对于其他内核版本也可能需要一些小的修改。
这只是我基于更完整的设备树的一个示例,该设备树启用了 spidev 和两个 I2C 总线,设置了一些 PRU 引脚等 - 可用这里。请记住,它的目标是运行内核 4.4.x 的 Debian Stretch 的 BeagleBone Green Wireless。
虽然这不是最完整的答案,但我希望它能引导您走向正确的方向。