SPI 简介
SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM, FLASH,实时时钟, AD 转换器,还有数字信号处理器和数字信号解码器之间。 SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议.
SPI 的内部简明图
从图中可以看出,主机和从机都有一个串行移位寄存器,主机通过向自己的SPI移位寄存器写入一个字节来发起一次传输。移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需要忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。
SPI的连接方式:
SPI 接口一般使用 4 条线通信:
MISO : 主设备数据输入,从设备数据输出引脚。主机从这条信号线读入数据,从机的数据则由这条信号线输出,即在这条线上数据的方向为从机到主机。
MOSI : 主设备数据输出,从设备数据输入。主机的数据从这条信号线输出,从机由这条信号线读入数据,即这条线上数据的方向为主机到从机。
SCLK : 时钟信号,由主设备产生。具体的时钟频率设置,需要参考主从设备的手册说明。
CS/NSS : 片选信号线。当SPI多个设备与MCU相连时,通过该引脚选择哪个设备与MCU通信。 CS引脚低电平有效。即只有当某个SPI设备的CS引脚为低电平时, MUC才能和它进行通信。
SPI 主要特点
可以同时发出和接收串行数据; 可以当作主机或从机工作; 提供频率可编程时钟; 发送结束中断标志; 写冲突保护; 总线竞争保护等。
SPI 时序
SPI 总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性( CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位( CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI 主模块和与之通信的外设备时钟相位和极性应该一致。
从时序图中,我们主要确认的是,什么时候对数据进行采样。 SPI 的外设,这 4 种模式并不一定都能够使用,实际的应用中还要参考对应的 SPI 设备的手册说明,确认可以使用什么模式。