1 SPI通信概述

SPI(Serial Peripheral interface,串行外围设备接口),是一种高速的、全双工,同步通信总线。

SPI采用主从控制模式(Master-Slave)架构,一般有1个主设备、一个或多个从设备,使得主设备可以与多个从设备之间实现片间通信。

SPI在芯片管脚中只占用四根线节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便。

主要应用在 EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。

1.1 SPI的主从模式

SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主),提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,主设备通过片选信号(SC)选择一个从设备进行同步通信,从而完成数据的交换。

alt text

1.2 SPI的四根信号线

alt text

4线SPI接口有4根信号线,分别为时钟信号(SCLK)、片选信号(SS/CS)、主设备输出从设备输入(MOSI Master OUT Slave IN )和主设备输入从设备输出(MISO Master IN Slave OUT)。

管脚名称 作用
CS(片选信号) CS 用于选择从设备,只有片选信号有效时,对Slave的操作才有效。
CLK(时钟信号) CLK 是由主机产生的同步时钟,用于同步数据(Master 设备产生,提供给Slave 设备)。
MOSI(Master OUT Slave IN) 用于传输数据,方向为:Master 设备输出,Slave 设备输入。
MISO(Master IN Slave OUT) 用于传输数据,方向为:Slave 设备输出,Master 设备输入。

1.3 数据交换

alt text

alt text

SCK默认低电平,当SS第一个下降沿的时候,MOSI和MISO移出数据,在SCK的上升沿移入数据,如此循环八次,便交换一个字节,所以SPI通信其实就是交换数据。

alt text

见上图,主机想要给从机发送0xAA,交换一个字节后,主机接收到的是0x55,从机则接收到0xAA,我们如果只想接收数据,就随便发送一个数据给从机;只想发送数据实现某种功能,那么从机交换过来的数据我们可以不读。