SPI,即Serial Peripheral interface,即串行外围设备接口。其最早由摩托罗拉公司在其MC68HC11系列处理器上定义,但是后续并没有一个专门的委员会或标准化组织来定义和管理这个协议,因此尽管各制造商的SPI基本上完全兼容,但是仍有一些细节上的区别。
标准的SPI有且仅有如下四根电气线路:
初版SPI协议的规范定义于M68HC11系列的Datasheet的Chapter 8上(但是看这个没什么用)。
时钟相位(CPHA):在时钟脉冲(SCK)的第一个还是第二个边缘触发采样。
CHPA=0
:在SCK脉冲的第一个边缘触发采样CHPA=1
:在SCK脉冲的第二个边缘触发采样时钟极性(CPOL):定义时钟信号在信号就绪时的电平为高还是为低。
CPOL=0
:SCK空闲时为0,信号就绪时为1CPOL=1
:SCK空闲时为1,信号就绪时为0上述两个配置项共可以组合出4种SPI配置。
在上述两个配置项后,其数据传输大致流程为:
缺线SPI是指只使用MOSI或MISO的SPI,其通常是缺少MISO,用于单向通信的设备模型(例如显示屏等)。这也是最常用的SPI变种。
由于SPI所处的工作逻辑限制,尽管标准SPI是全双工电路,但是往往读写交替运行。3-wire SPI是指只使用一根电气线路分时复用给MOSI和MISO的一种方式,在保证基本不影响性能的情况下节约了电气连接。其可以使用标准四线SPI配合一些外围电路修改而成。程序中需要注意分时复用。
Dual SPI基于3-wire SPI进行改进,又增加了一个MISO和MOSI复用的电气线路,称为IO0和IO1,一次可以传输2bit数据。为半双工通信协议。
Quad SPI通常简称QSPI,基于3-wire SPI进行改进,使用四个MISO和MOSI复用的电气线路,称为IO0、IO1、IO2、IO3,一次可以传输4bit数据。为半双工通信协议。
SPI支持的特性如下:
SPI不支持的特性如下: