SPI是一种采用串行同步方式的3线或4线通信接口,使用信号有使能信号,同步时钟,同步数据输入和数据输出。其常用于微控制器和外围芯片的直接连接和扩展。
一个典型的SPI总线系统包括一个主机和一个从机,双方之间通过主机输出/从机输入(MOSI),主机输入/从机输出(MISO) ,同步时钟信号(SCLK),从机选择(SS|),4跟信号线相连。SPI的通信过程本质上就是在同步时钟作用下的串行移位。可以把主机和从机看成是两个串行移位寄存器,通过MOSI和MISO首尾相连。主机发起传输时,先拉低从机选择信号,然后在内部时钟的作用下将SPI数据寄存器中的内容逐步移出,通过MOSI传送到从机。双方数据交换完毕后,拉高从机选择信号,停止SCLK,结束SPI.
SPI根据同步时钟的极性和同步时钟的相位两个参数,可以配置为4种不同的工作模式。同步时钟(CPOL)的极性指SPI总线处于传输空闲时,SCLK信号的状态。同步时钟的相位(CPHA)指进行SPI传输时对数据进行采样/锁存点相对于SCLK上时钟信号的位置。
AVR的SPI是采用硬件方式实现的全双工3线同步通信接口,支持主机,从机模式和4种不同传输模式的SPI时序。主机方式的最高速率为系统时钟频率的1/2,从机方式为1/4。 ATMega 16的SPI接口的硬件部分由数据寄存器,时钟逻辑,引脚逻辑和控制逻辑4部分组成。与SPI相关的寄存器有SPI控制寄存器SPCR,SPI状态寄存器SPSR,SPI数据寄存器SPDR。