SPI接口与通信协议
一、SPI概述
SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM、FLASH、传感器、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间,是一种全双工同步的通信总线,并且在芯片的管脚上只占用四根线,如今越来越多的芯片集成了这种通信协议。
SPI是一个环形总线结构,由MOSI、MISO、SCLK、CS构成,其时序其实很简单,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。
(1)MOSI – (master output slave input) 主器件数据输出,从器件数据输入;
(2)MISO – (master input slave output) 主器件数据输入,从器件数据输出;
(3)SCLK – (Serial clock) SPI时钟信号,由主器件产生;
(4)CS – (Chip select) 从器件使能信号,由主器件控制。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
优点:
(1)支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;
(2)支持高速(100MHz以上);
(3)协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;
(4)硬件连接简单;
缺点:
(1)相比IIC多两根线,没有寻址机制,只能靠片选选择不同设备;
(2)没有从设备接受ACK,主设备对于发送成功与否不得而知;
(3)典型应用只支持单主控;
SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的上升沿上数据改变,同时一位数据被存入移位寄存器。
二、硬件电路
SPI电路中只能有一个主机,也就是只是单主模式,可以支持单主单从和单主多从电路。
1、单主单从
2、单主多从,通过多个片选信号和菊花链的方式实现
四、SPI通信协议
1、SPI的4种模式
spi四种模式由SPI的时钟相位(CPHA)和时钟极性(CPOL)决定,分别可以为0或1,对应的4种组合构成了SPI的4种模式(mode)
CPOL: (Clock Polarity), 时钟极性
当CPOL为0时,时钟空闲时电平为低;
当CPOL为1时,时钟空闲时电平为高;
CPHA:(Clock Phase), 时钟相位
当CPHA为0时,时钟周期的上升沿采集数据,时钟周期的下降沿输出数据;
当CPHA为1时,时钟周期的下降沿采集数据,时钟周期的上升沿输出数据;
Mode 0 : CPOL=0, CPHA=0
Mode 1 : CPOL=0, CPHA=1
Mode 2 : CPOL=1, CPHA=0
Mode 3 : CPOL=1, CPHA=1
四种模式如下图所示:
SD卡的spi常用的是mode 0 和mode 3,这两种模式的相同的地方是都在时钟上升沿采样传输数据,区别这两种方式的简单方法就是看空闲时,时钟的电平状态,低电平为mode 0 ,高电平为mode 3。
2、SPI读写协议
SPI主模块和与之通信的外设备时钟相位和极性应该一致,有2层意思:其一,主设备SPI时钟和极性的配置应该由外设来决定;其二,二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。
以SPI读写为例
片选---读指令---地址---数据读出
片选---读指令---地址---数据写入