You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动加载SPI驱动模块时如何定义引脚及设备树相关配置问题

SPI自定义驱动开发常见问题解答

问题1:设备树compatible字段要求与手动加载驱动的关系

即使你用insmod手动加载驱动,设备树中对应SPI设备节点的compatible字段也必须填写,核心规则如下:

  • Linux SPI子系统匹配驱动和硬件设备的核心逻辑,就是将设备树compatible字段的值与驱动内of_device_id数组声明的兼容字符串做比对,该规则和驱动是内置到内核、还是手动加载的模块没有任何关联。
  • 手动加载驱动时,内核完成模块加载后会自动遍历SPI总线的设备链表,只有compatible字段匹配成功,才会触发执行驱动内的probe初始化函数,没有匹配逻辑的情况下驱动无法关联到对应的硬件实例,直接初始化失败。
  • 如果你不想走设备树匹配流程,也可以在驱动代码中硬编码SPI总线号、片选号等参数,通过spi_new_device或spi_register_board_info接口注册SPI设备,但该方式可移植性极差,非特殊场景不推荐使用。

问题2:SPI MISO/MOSI引脚的配置规则

SPI的MISO、MOSI、SCK属于总线公共引脚,不属于单个SPI设备的配置范畴,配置规则如下:

  • 绝大多数ARM/ARM64平台的SPI公共引脚,是在SPI控制器的设备树节点中通过pinctrl相关属性完成配置的,包括引脚复用关系、上下拉参数、速率等级等。只要确认对应SPI总线的控制器节点已经正确配置了这三个引脚,挂载到该总线下的所有SPI设备都不需要再单独配置这三个引脚。
  • 只有少数没有pinctrl子系统的平台,或者SPI控制器驱动有特殊要求的场景,才需要在控制器节点中通过miso-gpios、mosi-gpios、sck-gpios属性单独指定引脚,这种情况需要参考所用SoC的SPI控制器官方绑定文档。
  • 你看到的开发示例只提及总线号、片选配置,就是因为默认SPI总线本身已经提前完成了公共引脚的配置,单个设备仅需要指定所属总线、专属的片选引脚即可。

内容的提问来源于stack exchange,提问作者Fulgor3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:45:00