SPI总线设备驱动模型
文章目录
- SPI总线设备驱动模型
- 参考资料:
- 一、平台总线设备驱动模型
- 二、 数据结构
- 2.1 SPI控制器数据结构
- 2.2 SPI设备数据结构
- 2.3 SPI设备驱动
- 三、 SPI驱动框架
- 3.1 SPI控制器驱动程序
- 3.2 SPI设备驱动程序
- 致谢
参考资料:
- 内核头文件:`include\linux\spi\spi.h
一、平台总线设备驱动模型
Linux驱动程序开始基于"平台总线设备驱动"模型,把驱动程序分成2边:
-
左边注册一个platform_driver结构体,里面是比较固定的、通用的代码
-
右边注册一个platform_device结构体,里面是硬件资源
- 可以在C文件中注册platform_device
- 也可以使用设备树创建一个节点,内核解析设备树时注册platform_device
二、 数据结构
SPI子系统中涉及2类硬件:SPI控制器、SPI设备。
SPI控制器有驱动程序,提供SPI的传输能力。
SPI设备也有自己的驱动程序,提供SPI设备的访问能力:
- 它知道怎么访问这个设备,它知道这个设备的数据含义是什么
- 它会调用SPI控制器的函数来收发数据。
2.1 SPI控制器数据结构
参考内核文件:include\linux\spi\spi.h
Linux中使用spi_master结构体描述SPI控制器,里面最重要的成员就是transfer
函数指针:
2.2 SPI设备数据结构
参考内核文件:include\linux\spi\spi.h
Linux中使用spi_device结构体描述SPI设备,里面记录有设备的片选引脚、频率、挂在哪个SPI控制器下面:
2.3 SPI设备驱动
参考内核文件:include\linux\spi\spi.h
Linux中使用spi_driver结构体描述SPI设备驱动:
三、 SPI驱动框架
3.1 SPI控制器驱动程序
SPI控制器的驱动程序可以基于"平台总线设备驱动"模型来实现:
- 在设备树里描述SPI控制器的硬件信息,在设备树子节点里描述挂在下面的SPI设备的信息
- 在platform_driver中提供一个probe函数
- 它会注册一个spi_master
- 还会解析设备树子节点,创建spi_device结构体
3.2 SPI设备驱动程序
跟"平台总线设备驱动模型"类似,Linux中也有一个"SPI总线设备驱动模型":
- 左边是spi_driver,使用C文件实现,里面有id_table表示能支持哪些SPI设备,有probe函数
- 右边是spi_device,用来描述SPI设备,比如它的片选引脚、频率
- 可以来自设备树:比如由SPI控制器驱动程序解析设备树后创建、注册spi_device
- 可以来自C文件:比如使用
spi_register_board_info
创建、注册spi_device
致谢
以上笔记源自
韦东山
老师的视频课程,感谢韦老师,韦老师是嵌入式培训界一股清流,为嵌入式linux开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!
在这样一个速食的时代,坚持做自己,慢下来,潜心琢磨,心怀敬畏,领悟知识,才能向下扎到根,向上捅破天,背着世界往前行!
仅此向嵌入行业里的每一个认真做技术的从业者致敬!