#51单片机#SPI时序初步认识
SPI,全程Serial Peropheral Interface,译为串行外围设备接口,是一种高速的、全双工的、同步通信总线。
SPI常用于单片机和E2PROM、FLASH、实时时钟、数字信号处理器等器件的通信。SPI通信原理主要是主从方式通信,这种模式通常只有一个主机和一个或多个从机。
标准的SPI有4根线,分别是SSEL、SCLK、MISO、MOSI。
SSEL:从设备片选使能信号。若从设备为低电平使能,则当此引脚拉低后,从设备被选中,主机同被选中的从机进行通信。
SCLK:时钟信号。 由主机产生,类似于I2C中的SCL。
MOSI:主机给从机发送指令或者数据的通道。
MISO:主机读取从机的状态或者数据的通道。
实际应用中,存在只使用2根或3根线的SPI。用户可以根据自己的实际需求,取舍SPI功能线。
SPI的读写时序过程有四种模式。在接触他们之前,需要学习两个名词。
CPOL:Clock Polarity,时钟的极性。整个通信过程分为空闲时刻和通信时刻。若在数据发送之前和之后SCLK的空闲状态是高电平,则CPOL = 1,若为低电平,则CPOL = 0;
CPHA :Clock Phase,时钟相位。
同步通信的一个特点是所有数据的变化和采集都伴随着时钟沿进行。一个时钟周期必定包括一个上升沿和一个下降沿。数据从产生到稳定需要一定时间,故一般来说同一个周期内,上升沿产生的数据,在下降沿收集,下降沿产生的数据,在上升沿收集。
CPHA = 1,表示在一个时钟周期的第一个沿上,进行数据输出。CPOL = 1,该沿是下降沿。CPOL = 0,该沿是上升沿。
CPHA = 0,表示在一个时钟周期的第一个沿上,进行数据采集。CPOL = 1,该沿是下降沿。CPOL = 0,该沿是上升沿。
这里可能出现这样的情况:在第一个时钟沿就采集了第一帧数据传输的第一个bit,这个数据是何时输出的呢?情况有二:一在SSEL使能的边沿,二上一帧数据的最后一个时钟沿。有时两种情况会同时生效。
以下是这四种模式的通信时序图: