什么是SPI
是一种高速的全双工同步通信总线。
分为主从两种模式,有一个主设备和多个从设备,通过片选信号管理从设备。
SPI接口的读写操作都是由主设备发起的。
SPI构成
有四条信号线:只有主设备可以控制信号线
SDI 数据输入 SDO 数据输出 SCK 时钟 CS 片选
主从设备连接:
MISO 主设备输入连从设备输出 MOSI 主设备输出从设备输入
SCLK串行时钟信号由主设备产生 CS/SS 从设备片选信号 主设备控制
SPI四种通信模式
存在两个特殊的寄存器配置:CPOL CPHA
CPOL配置SPI的极性 CPHA配置相位→关于极性和相位的理解可以看 这篇文章
举个栗子:当两个全配置成1时,表示空闲状态是1高电平,在第二个跳边沿进行数据采样;也就是当时钟信号第一次由高变成低时数据输出,再由低变成高时数据采样(偶数次边沿采样),即每个周期的上升沿数据采样。
SPI数据发送接收
可参考文章SPI原理超详细讲解---值得一看
SPI工作中的注意事项
- 主从模式有相同的工作模式——SCLK,CPOL和CPHA相同
- 原理概括——在时序控制下,两个双向移位寄存器进行数据交换
- 注意SPI并没有读写这一说法从机也不会通过标志位判断读还是写,SPI中只有主模式和从模式之分,外设的读操作和写操作是同时进行的。
- 接上,如果只想对从机写,则外设忽略接收到的数据即可;若只想读就要向从机发一个空字节来引发从机传输——发一个数据必然会收到一个数据,要收到数据也必须先发一个数据。
- 多从机模式的连接有两种方法 :多NSS和菊花链参考文章SPI协议详解(图文并茂+超详细)
- SPI的优势在于可以传输任意大小字节的数据;硬件结构简单不需要地址(不同于I2C)从机使用主机的时钟(不同于UART)不需要收发器(不同于CAN)
- 从理论上讲,只要实际可行,时钟速率就可以是您想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。
- 缺点是没有应答信号,支持短距离传输,需要很多引脚(与I2C相比)
- 关于SPI补充可参考文章关于SPI协议,看这一篇文章就够了!