Lazy loaded image
SPI 驱动专题02 - SPI 总线驱动匹配机制分析
Words 982Read Time≈ 3 min
2026-9-12
参考资料
  • Linux 内核文档:
    • Documentation/spi/spi-summary.rst
    • Documentation/devicetree/bindings/spi/spi-controller.yaml
  • Linux 内核源码:
    • drivers/spi/spi.c
    • drivers/base/dd.c

SPI 总线驱动匹配机制分析

SPI 总线通过 Linux 设备模型把 spi_device 与 spi_driver 绑定。控制器注册后,SPI 核心根据固件节点创建从设备;设备或驱动任一方注册时,设备模型都会触发匹配。

SPI 总线匹配流程图

SPI 总线结构定义

在 drivers/spi/spi.c 中,SPI 总线类型的核心结构可概括为:
其中 .match 决定设备与驱动能否绑定,.probe 则在匹配成功后转调具体 spi_driver 的 probe。

spi_match_device 函数分析

不同内核版本细节略有调整,但匹配原则稳定:
匹配顺序的意义:
  1. 设备树匹配:嵌入式平台最常见,通过设备节点的 compatible 对比驱动 of_match_table
  1. ACPI 匹配:适用于使用 ACPI 描述硬件的平台
  1. SPI ID 表匹配:用 spi_device_id 的 name 对比设备 modalias
  1. 驱动名回退:设备 modalias 与 driver.name 相同则匹配

各种匹配方式详解

1. 设备树匹配

设备树节点:
驱动匹配表:
reg 在 SPI 子节点中通常表示片选号,不是 I2C 那种总线地址。

2. ACPI 匹配

3. SPI ID 表匹配

匹配时机和调用流程

SPI 匹配主要发生在两条路径:
  1. 控制器和设备创建路径:spi_register_controller 注册控制器,SPI 核心枚举固件子节点,创建并注册 spi_device
  1. 协议驱动注册路径:spi_register_driver 把 spi_driver 注册到 spi_bus_type

匹配成功后的处理

进入设备驱动 probe 前,核心层已完成对象绑定;具体驱动应在 probe 中校验 SPI mode、调用 spi_setup、申请 IRQ/GPIO/regulator,并注册到 IIO、MTD、input 等所属子系统。

总结

SPI 总线匹配本质上仍是 Linux 设备模型的“设备注册 + 驱动注册 + bus match + probe”机制。SPI 特有部分主要是 spi_device 的 modalias、片选、mode、频率和控制器能力约束。不要把“匹配成功”误解为“通信一定成功”——匹配只证明身份字符串对上了,时序、电气和协议是否正确仍要由 spi_setup 与实际传输验证。
 
上一篇
C++ String 常用操作
下一篇
嵌入式工程师习题集

Comments
Loading...