1. 简介
SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在要求通讯速率较高的场合。SPI用于多设备之间通讯,分为主机Master和从机Slave,主机只有一个,从机可以有多个,通过片选信 对从机进行选择,一次只能选择一个从机。通讯只能由主机发起,支持的操作分为读取和写入,即主机读取从机的数据,以及向从机写入数据。
SPI一般有4根线,分别是片选线SS、时钟线SCK、主设备输出从设备输入MOSI、主设备输入从设备输出MISO,其中除MISO对于主机为输入引脚外,其他引脚对于主机均为输出引脚。因为有独立的输入和输出引脚,因此SPI支持全双工工作模式,即可以同时接收和发送。
2. 总线传输信
空闲状态:片选信 SS低电平有效,那么空闲状态片选信 SS为高。
开始信 及结束信 :开始信 需要将片选信 SS拉低,结束信 需要将片选信 SS拉高。
通讯模式:SPI有4种通讯模式,分别为0、1、2、3,根据时钟极性和时钟相位确定,时钟极性分别为空闲低电平和空闲高电平,时钟相位分别为SCK奇数边沿采样和偶数边沿采样。常用的模式为模式0和模式3。
SPI模式 时钟极性(空闲时SCK时钟) 时钟相位(采样时刻)
0 低电平 奇数边沿
1 低电平 偶数边沿
2 高电平 奇数边沿
3 高电平 偶数边沿
3. 时序说明
以模式0举例说明:
空闲状态:片选信 SS为高,SCK输出低电平。
开始信 :片选信 SS变低,SCK输出低电平。
结束信 :片选信 SS变高,SCK输出低电平。
读取:SCK由低变高之后,读取MISO引脚信 。
写入:SCK输出低电平,MOSI引脚输出相应的电平,然后SCK输出高电平。
一个时钟周期同时读取和写入:SCK输出低电平,主设备控制MOSI输出相应电平,从设备控制MISO输出相应电平,然后SCK输出高电平,从设备读取MOSI引脚电平,主设备读取MISO引脚电平。即无论主设备还是从设备,均在SCK为低电平时输出信 ,在SCK为高电平时读取信 。
4. 初始化
初始化跟普通GPIO类似,SCK和MOSI设置为推挽输出,而MISO设置为浮空输入。
GPIO初始化完成之后,SCK置为低电平,进入空闲状态。
5. 模拟信
由于SPI支持一个周期内同时读取和写入,因此读取和写入操作可以用一个函数实现,而单独的读取函数和写入函数可以通过调用该读写函数实现。
完整代码(仅自己编写的部分)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!