SPI 协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式
相关通讯设备可工作于m/s 模式
主设备发起数据帧,允许多个从设备的存在
每个从设备 有独立的片选信号,SPI 一般来说是四线串行总线结构
接口: SCLK——Serial Clock(output from master)时钟(主设备发出) MOSI/SIMO——Master Output, Slave Input(output from master)数据信号线 mosi(主设备发出) MISO/SOMI——Master Input,Slave Outpu(output from slave)数据信号线(从设备) SS——Slave Select(active low;output from master)片选信号 下面来看一下 Linux中的SPI 驱动
在 Linux设备驱动框架的设计中,有一个重要的主机,外设驱动框架分离的思想,如下图
外设 a,b,c 的驱动与主机控制器 A,B,C 的驱动不相关,主机控制器驱动不关心外设,而外设驱动也不关心主机,外设只是访问核心层的通用的API 进行数据的传输,主机和外设之间可以进行任意的组合
如果我们不进行如图的主机和外设分离,外设 a,b,c 和主机 A,B,C 进行组合的时候,需要 9 种不同的驱动
设想一共有个主机控制器,n 个外设,分离的结构是需要 m+n 个驱动,不分离则需要 m*n 个驱动
下面介绍 spi 子系统的数据结构: 在 Linux中,使用 spi_master 结构来描述一个 SPI 主机控制器的驱动
view plain 1
struct spi_master { 2
struct device dev;/*总线编号,从 0 开始*/ 3
s16 bus_num;/*支持的片选的数量,从设备的片选号不能大于