FriendlyElec CM3588 GPIO引脚配置为SPI功能的正确方法
配置FriendlyElec CM3588 GPIO为SPI功能的方法
问题背景
FriendlyElec CM3588配备40引脚GPIO连接器,每个引脚可复用为多种功能。我希望使用其中部分引脚通过SPI连接显示屏,已有合适的Python库可用。但设备树中无/dev/spi*设备,推测相关引脚被配置为其他功能而非SPI。目前设备存在多个/dev/i2c*设备,且可使用gpioinfo工具,说明内核支持这些引脚;我查看了/boot/config-6.1.0-39-arm64文件,其中包含大量SPI相关配置。
解决步骤
核心思路是通过设备树overlay启用SPI控制器并复用对应GPIO引脚(这是ARM平台持久化配置外设的标准方式,临时配置重启会失效):
确认SPI对应的GPIO引脚
查阅CM3588官方引脚定义文档,找到目标SPI总线(如SPI0、SPI1)对应的物理引脚,明确SCK、MOSI、MISO、CS各自对应的GPIO编号(比如SPI0可能对应PA0~PA3)。准备SPI设备树overlay
- 先检查
/boot/overlays/目录是否有现成的SPI启用overlay(如spi0-overlay.dtbo),有则直接使用。 - 无现成文件时,自行编写overlay示例(以启用SPI0为例):
/dts-v1/; /plugin/; &spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; cs-gpios = <&gpioA 3 GPIO_ACTIVE_LOW>; // 对应CS引脚,按需调整 spidev@0 { compatible = "spidev"; reg = <0>; spi-max-frequency = <10000000>; // 总线频率,根据显示屏规格调整 }; }; &pio { spi0_pins: spi0-pins { pins = "PA0", "PA1", "PA2", "PA3"; // 对应SCK、MOSI、MISO、CS的GPIO function = "spi0"; }; }; - 将文件保存为
spi0-enable.dts,用dtc编译为dtbo:dtc -I dts -O dtbo -o spi0-enable.dtbo spi0-enable.dts - 把编译好的
spi0-enable.dtbo放到/boot/overlays/目录。
- 先检查
加载overlay并重启
编辑/boot/uEnv.txt,找到或新增overlays配置行,添加你的overlay文件名:overlays=spi0-enable保存后重启设备。
验证配置生效
重启后检查SPI设备是否存在:ls /dev/spi*也可通过
gpioinfo确认引脚功能已切换为SPI:gpioinfo | grep spi0
注意事项
- 若显示屏需要特定CS引脚,需调整overlay中
cs-gpios的GPIO编号参数。 - 内核已启用SPI相关配置(你已确认
/boot/config-6.1.0-39-arm64中的SPI选项),无需重新编译内核。 - 避免用sysfs的
echo命令临时修改引脚功能,该方式重启失效且可能与设备树配置冲突。
内容的提问来源于stack exchange,提问作者patmin
相关产品推荐
相关产品推荐

