SPI ( Serial Peripheral Interface,串行外设接口)是一种同步、串行通讯接口规格,常用于短距离通讯,主要是在嵌入式系统中。此接口由Mototola公司推出,已成为一种事实标准(没有统一的协议规范,但是基于其广泛的使用,根据实际使用中大家通用的习惯形成了一个类似行规的标准)。对通信操作的实现只作一般的抽象描述,芯片厂商与驱动开发者通过data sheets和application notes沟通实现上的细节。
SPI是一种高速的,全双工,同步的通信总线。分为主(master)、从(slave)两种模式,一个SPI通讯系统需要包含一个(且只能是一个)maser(主设备),一个或多个slave(从设备)。SPI接口的读写操作,都是由master发起。当存在多个从设备时,通过各自的片选(slave select)信号进行管理;
SPI一般有四个接口:
名称 | 解释 |
---|---|
SCLK | Serial Clock (output from master); master输出至slave的通讯时钟 |
MOSI | Master Output, Slave Input(output from master); 自master输出至slave的数据线 |
MISO | SOMI: Master Input, Slave Output(output from slave); 自slave输出至master的数据线 |
SS | Slave Select (active low, outputfrom master). master对slave的片选信号,自master输出至slave,低有效。 |
当MASTER片选一个SLAVE时,每向SLAVE发送一个周期的SCLK信号,都会有1bit的数据从MOSI发送至slave,与此同时,slave每收到一个周期的SCLK信号,都会从MISO向master发送1bit的数据。这种全双工通讯,是由硬件保证的(MASTER与HOST中各有一个移位寄存器作为收发数据的缓存)
SPI有四种操作模式——模式0、模式1、模式2和模式3,它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极性(clock polarity)CPOL与时钟相位(clock phase)CPHA。
CPOL表示SCK的空闲状态的有效电平;
CPOL = 0表示SCK的空闲状态是低电平,CPOL = 1表示SCK的空闲状态是高电平;
CPHA规定了数据的采样时间;
CPHA = 0表示在SCK的有效电平的第一个跳变边沿进行数据采样,CPHA = 1表示在SCK的有效电平的第二个跳边沿进行数据采样;
具体如下: