Linux SPI字符设备驱动开发(二) - SPI驱动框架

一、SPI驱动框架

如图所示,SPI驱动框架分为用户层、核心层和硬件层。

1. 用户层。 向上层开发人员提供接口,我们可以直接通过IO操作打开“/dev/spi”文件进行读写
2. 核心层。 分为控制器层和从设备层。
(1)控制器层。提供主设备,即芯片上SPI控制模块的注册。一般芯片上SPI驱动已经给我们写好了,嵌入式开发过程中,挂载好开发板的rootfs以后,就能在 /dev 目录下看到 SPI 相关的设备文件。我们自己需要做的,就是编写从设备层驱动。
(2) 从设备层。比如我们要通过SPI接口外接一个传感器,或外接另一块开发板,那么这个外接的设备就是SPI从设备,我们需要开发它的驱动加载到内核中。
3. 硬件层。 是spi模块和spi设备的硬件描述

  • 在整个驱动过程中,先注册芯片上的SPI控制器层,再注册SPI从设备驱动

在这里插入图片描述
Linux系统采用主机和从设备分离的思想,是因为芯片上的SPI主控制器功能单一,只负责与SPI总线交互,读取数据,而根据外设(SPI从设备)的不同,传输的数据又千差万别。

芯片上的SPI主控制器通过 Platform 总线注册进内核,外设(SPI从设备)通过SPI总线,以 boardinfo 的形式注册进内核。

当创建 spi_master 时,通过判断主机的 bus_num 和 外设的 bus_num 是否一致,来选择是否将外设挂接在该SPI主控制器下。

  • 下图是spi_master(芯片上的SPI控制器)、spi_device和spi_driver的关系:
    在这里插入图片描述
  • 下图是SPI设备和驱动的关系
    在这里插入图片描述
    在这里插入图片描述