SPI是一种同步串行接口技术,SPI总线在物理上通过接在外围设备微控制器上面的微处理器控制单元(MCU)上叫做同步串行端口的模块来实现,允许MCU以全双工的同步串行方式,与各种外围设备进行高速数据通信。SPI主要应用在EEPROM,Flash,实时时钟(RTC),数模转换器(ADC),数字信号处理器(DSP)以及数字信号解码器之间。它在芯片中只占用四根管脚(pin)用来控制以及数据传输。主要特点:采用主从(Master-Slave)的控制方式SPI规定了两个SPI设备之间通信必须由主设备(Master)来控制次设备(Slave)。一个Master设备可以通过提供clock以及对Slave设备进行片选来控制多个Slave设备,SPI协议还规定SLave设备的CLock由master设备通过SCK管脚提供给slave设备,slave设备本身不能产生和控制clock,没有clock则slave 不能正常工作。采用同步方式传输数据Master设备会根据将要交换的数据来产生对应的时钟脉冲,时钟脉冲组成了时钟信号,时钟信号通过时钟极性(CPOL)和时钟复位(CPHA)控制着两个SPI设备间合适数据交换以及合适对接收到的数据进行采样,来保证数据在两个设备之间是同步传输的。数据交换SPI设备间的数据传输之所以又被称为数据交换,是因为SPI协议规定一个SPI设备不能再数据通信过程中仅仅之充当一个“发送者”或“接收者”,在每个clock周期内,SPI设备都会发送并接收一个Bit大小的数据,相当于该设备有一个Bit大小的数据被交换了。Master设备首先必须通过CS对Slave设备进行片选,把想要访问的Slave的设备选上。在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致SPI物理模块最终失效。因此,在程序中一般都会在SPI传输完数据后,去读取SPI设备里的数据,即使这些数据在我们的程序是无用的。先前面试官问SPI三线式和四线式有什么区别:三线式:一个数据线,一个时钟线,一个片选信号。同一时间只能读或者写四线式:两个数据线,一个时钟线,一个片选信号。是双工的,一根可以写数据,一根可以回读数据,