串行外设接口(Serial Peripheral Interface),通常称作SPI。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。
硬件连接SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。
MISO – Master Input Slave Output,主设备数据输入,从设备数据输出。 MOSI – Master Output Slave Input,主设备数据输出,从设备数据输入。 SCLK – Serial Clock,时钟信号,由主设备产生。它决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。 CS – Chip Select,片选,从设备使能信号,由主设备控制。当有多个 SPI从设备与 SPI主机相连时,设备的其它信号线 SCLK、MOSI及 MISO同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同只使用这 3条总线;而每个从设备都有独立的这一条 CS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯,而 SPI 协议中没有设备地址,它使用 CS 信号线来寻址,当主机要选择从设备时,把该从设备的 CS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以 CS线置低电平为开始信号,以 CS线被拉高作为结束信号。 SDO – Slave Data Output,主设备数据输出,从设备数据输入,对应MOSI。 SDI – Slave Data Input,主设备数据输入,从设备数据输出,对应MISO。