SPI接口与通信协议

一、SPI概述

SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROMFLASH、传感器、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间,是一种全双工同步的通信总线,并且在芯片的管脚上只占用四根线,如今越来越多的芯片集成了这种通信协议。

SPI是一个环形总线结构,由MOSIMISOSCLKCS构成,其时序其实很简单,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。

1MOSI – (master output slave input) 主器件数据输出,从器件数据输入;

2MISO – (master input slave output) 主器件数据输入,从器件数据输出;

3SCLK – (Serial clock) SPI时钟信号,由主器件产生;

4CS – (Chip select) 从器件使能信号,由主器件控制。

点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

优点:

1)支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;

2)支持高速(100MHz以上);

3)协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;

4)硬件连接简单;

缺点:

1)相比IIC多两根线,没有寻址机制,只能靠片选选择不同设备;

2)没有从设备接受ACK,主设备对于发送成功与否不得而知;

3)典型应用只支持单主控;

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的上升沿上数据改变,同时一位数据被存入移位寄存器。

二、硬件电路

SPI电路中只能有一个主机,也就是只是单主模式,可以支持单主单从和单主多从电路。

1、单主单从

SPI接口与通信协议

2、单主多从,通过多个片选信号和菊花链的方式实现

SPI接口与通信协议

SPI接口与通信协议

四、SPI通信协议

1SPI4种模式

spi四种模式由SPI的时钟相位(CPHA)和时钟极性(CPOL)决定,分别可以为01,对应的4种组合构成了SPI4种模式(mode)

CPOL: (Clock Polarity), 时钟极性

CPOL0,时钟空闲时电平为低;

CPOL1,时钟空闲时电平为高;

CPHA:(Clock Phase), 时钟相位

CPHA0,时钟周期的上升沿采集数据,时钟周期的下降沿输出数据;

CPHA1,时钟周期的下降沿采集数据,时钟周期的上升沿输出数据;

Mode 0 : CPOL=0, CPHA=0 

Mode 1 : CPOL=0, CPHA=1

Mode 2 : CPOL=1, CPHA=0 

Mode 3 : CPOL=1, CPHA=1

四种模式如下图所示:

SPI接口与通信协议

SD卡的spi常用的是mode 0 mode 3,这两种模式的相同的地方是都在时钟上升沿采样传输数据,区别这两种方式的简单方法就是看空闲时,时钟的电平状态,低电平为mode 0 ,高电平为mode 3

2SPI读写协议

SPI主模块和与之通信的外设备时钟相位和极性应该一致,有2层意思:其一,主设备SPI时钟和极性的配置应该由外设来决定;其二,二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。

SPI读写为例

片选---读指令---地址---数据读出

SPI接口与通信协议

片选---读指令---地址---数据写入

SPI接口与通信协议