SPI协议

一、SPI协议简介

SPI(serial peripheral interface)是一种同步串行通信协议,由一个主设备和一个或多个从设备组成,主设备启动与从设备的同步通信,从而完成数据的交换。SPI是一种高速全双工同步通信总线,标准的SPI仅仅使用4个引脚,主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间。有迹象表明,SPI总线首次推出是在1979年,Motorola公司将SPI总线集成在他们第一支改自68000微处理器的微控制器芯片上。由于在芯片中只占用四根管脚 (Pin) 用来控制以及数据传输, 节约了芯片的 pin 数目, 同时为 PCB 在布局上节省了空间。 正是出于这种简单易用的特性, 现在越来越多的芯片上都集成了 SPI技术。SPI通讯需要使用4条线:3条总线和1条片选:
SPI协议

二、SPI协议总线

SPI总线包括4条逻辑线,定义如下:

名称 解释
MISO Master input slave output 主机输入,从机输出(数据来自从机)
MOSI Master output slave input 主机输出,从机输入(数据来自主机)
SCLK Serial Clock 串行时钟信号,由主机产生发送给从机
CS Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号

其他制造商可能会遵循其他命名规则,但是最终他们指的相同的含义。以下是一些常用术语:

名称 常用术语
MISO SIMO,DOUT,DO,SDO或SO(在主机端)
MOSI SOMI,DIN,DI,SDI或SI (在主机端)
SCLK SCK
CS CE,CS或SSEL

SPI协议

三、SPI四种工作模式

SPI 有四种工作模式,通过串行时钟极性(CPOL)和相位(CPHA)的搭配来得到四种工作模式:

①、 CPOL=0,CPHA=0——串行时钟空闲状态为低电平。
②、 CPOL=1,CPHA=0——串行时钟空闲状态为高电平,此时可以通过配置时钟相位(CPHA)来选择具体的传输协议。
③、 CPOL=0,CPHA=1——串行时钟的第一个跳变沿(上升沿或下降沿)采集数据。
④、 CPOL=1,CPHA=1——串行时钟的第二个跳变沿(上升沿或下降沿)采集数据

SPI协议
SPI协议

四、SPI协议时序

以 CPOL=0, CPHA=0 这个工作模式为例, SPI 进行全双工通信的时序如下图所示:
SPI协议
从上图可以看出, SPI 的时序图很简单,不像 I2C 那样还要分为读时序和写时序,因为 SPI 是全双工的,所以读写时序可以一起完成。图中CS 片选信号先拉低,选中要通信的从设备,然后通过 MOSI 和 MISO 这两根数据线进行收发数据, MOSI 数据线发出了0XD2 这个数据给从设备,同时从设备也通过 MISO 线给主设备返回了 0X66 这个数据。这个就是 SPI 时序图。

五、SPI的优缺点

优点 缺点
①支持全双工通信 ①没有指定的流控
②通信简单 ②没有应答机制确认是否接受到数据
③数据传输速率快

六、SPI协议特点

SPI协议特点
①高速、同步、全双工、非差分、总线式
②主从机通信模式
上一篇:串口通信UART、I2C、SPI


下一篇:Java基础之SPI机制