Linux SPI
-
Linux内核也将 SPI 驱动分为两部分:
- ①、 SPI 总线驱动, SPI 总线驱动就是 SOC 的 SPI 控制器驱动,也叫做 SPI 适配器驱动。
- ②、 SPI 设备驱动, SPI 设备驱动就是针对具体的 SPI 设备而编写的驱动。
-
SPI主机驱动
-
Linux 内核使用 spi_master 表示 SPI 主机驱动, spi_master 是个结构体,定义在 include/linux/spi/spi.h 文件
-
SPI 主机驱动的核心就是申请 spi_master,
-
然后初始化 spi_master,
-
最后向 Linux 内核注册spi_master
-
-
SPI设备驱动
- Linux 内核使用 spi_driver 结构体来表示 spi 设备驱动,在编写 SPI 设备驱动的时候需要实现 spi_driver。 spi_driver 结构体定义在include/linux/spi/spi.h 文件
-
SPI 设备和驱动匹配过程
- SPI 设备和驱动的匹配过程是由 SPI 总线来完成的, SPI总线为 spi_bus_type,定义在 drivers/spi/spi.c 文件
-
SPI 数据传输步骤如下:
- ①、申请并初始化 spi_transfer,设置 spi_transfer 的 tx_buf 成员变量, tx_buf 为要发送的数据。然后设置 rx_buf 成员变量, rx_buf 保存着接收到的数据。最后设置 len 成员变量,也就是要进行数据通信的长度。
- ②、使用 spi_message_init 函数初始化 spi_message。
- ③、使用spi_message_add_tail函数将前面设置好的spi_transfer添加到spi_message队列中。
- ④、使用 spi_sync 函数完成 SPI 数据同步传输。