一、SPI 驱动框架简介
Linux 内核将 SPI 驱动分为两部分:
- SPI 总线驱动: SOC 的 SPI 控制器驱动,也叫做 SPI 适配器驱动。一旦编写完成就不再需要再做修改,其他的SPI 设备直接调用主机驱动提供的API 函数完成读写操作即可。
- SPI 设备驱动:SPI 设备驱动就是针对具体的SPI 设备而编写的驱动。
二、SPI 主机驱动(spi_master )
Linux 内核使用 spi_master 表示 SPI 主机驱动。 spi_master 是个结构体,定义在 include/linux/spi/spi.h 文件中。
spi_message
spi 的数据会打包成spi_message ,然后以队列方式发送出去。
spi_master 两个用于数据传输的成员函数:
transfer
控制器数据传输函数。
int (*transfer)(struct spi_device *spi, struct spi_message *mesg);
transfer_one_message
用于发送一个 spi_message
int (*transfer_one_message)(struct spi_master *master, struct spi_message *mesg);
三、spi 设备驱动(spi_driver)
Linux 内核使用spi_driver 结构体来表示spi 设备驱动,我们在编写spi 设备驱动的时候需要实现spi_driver 。spi_driver 结构体定义在 include/linux/spi/spi.h 文件中。定义如下:
struct spi_driver
{
const struct spi_device_id *id_table;
int ( *probe )( struct spi_device *spi );
int ( *remove )( struct spi_device *spi );
void ( *shutdown )( struct spi_device *spi );
struct device_driver driver;
};
当 spi 设备和驱动匹配成功以后,probe 函数就会执行。
spi 设备驱动编写流程
-
初始化 spi_driver 结构体
包括匹配表,probe 函数
-
向Linux 内核注册 spi_driver文章来源:https://www.toymoban.com/news/detail-417044.html
int spi_register_driver(struct spi_driver *sdrv)
-
向Linux 内核 注销spi_driver文章来源地址https://www.toymoban.com/news/detail-417044.html
void spi_unregister_driver(struct spi_driver *sdrv)
到了这里,关于Linux SPI 驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!