IO特性
SPI接口一般使用四条信号线通信:
SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)
MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCLK:串行时钟信号,由主设备产生。
CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突
四种模式
Mode0:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。
Mode1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
Mode2:CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
Mode3:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
spi_bus
[图片]
SPI 总线设备驱动模型
设备树处理过程
我们可以下载安卓源码查看:
设备树在devices_tree,驱动在driver目录,
git clone https://android.googlesource.com/kernel/msm
MSM:指的是 Qualcomm 的 Mobile Station Modem 平台
spi_master:是当前spi_dev的父节点
spi 设备树上的设备节点中的信息都会转化为spi_device中的成员值,呈一一对应关系。
解析spi设备树的核心函数为 of_register_spi_devices
在of_register_spi_devices函数中解析设备树
访问 spi_master节点下的每一个子节点
解析子节点中的devices信息
spi_devices配置好后,使用spi_add_devices添加设备
spidev.c文件解析,spidev.c是spi通用的设备驱动文件,一些简单的spi设备可以直接使用spidev.c
https://blog.csdn.net/2301_77015050/article/details/132146419?ops_request_misc=&request_id=&biz_id=102&utm_term=spi%E9%A9%B1%E5%8A%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-132146419.142v100pc_search_result_base2&spm=1018.2226.3001.4187