SPI的通信和IIC通信接口相似,都会两个模块间进行数据通信的一种方法。相比于IIC通信,SPI的通信原理很简单,一般主从方式工作,这种模式通常有一个主设备和一个或多个从设备,通常采用的是4根线,它们是MISO(数据输入,针对主机来说)、MOSI(数据输出,针对主机来说)、SCLK(时钟,主机产生)、CS/SS(片选,一般由主机发送或者直接使能,通常为低电平有效),典型的硬件连接如下:
在SPI通信中,时钟作为一项重要的参数,必须保证主设备和从设备必须在相同的时序下工作,因为SCK的时钟频率决定了整个SPI总线的传输速度,所以只有主从双方步调一致才能进行数据的稳定传输。在用MCU作为主设备时,一般可通过对SPI控制寄存器编程.来选择不同的时钟频率,如果采用单片机IO口模拟SPI时序,那么就需要严格按照从机的数据传输格式进行模拟。
CS/SS是片选信号,若为低电平有效,只有控制该管脚为低电平从机才能实现使能,利用单片机的IO口可控制总线上连接的多个SPI设备。
在SPI数据传输中,数据在时钟sclk的作用下按照bit进行传输的。这就是SCLK时钟线存在的原因,因此,完成一个字节(8bit)的数据传输,至少8次 时钟信号的改变(上沿和下沿为一次,依据不同的从机传送协议),就可以完成8位数据的传输。
在SPI操作中,最重要的两项设置就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)。为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。
时钟极性(CPOL)定义了时钟空闲状态的电平,对数据传输的没有太大的影响。
时钟相位(CPHA)定义了数据的传送时间和传送格式。在程序编写时需要注意相位和数据的关系。下图形象的说明了时钟极性和数据传输的关系。
参考:
http://machinnneee.spaces.eepw.com.cn/articles/article/item/139027
https://blog.csdn.net/wwt18811707971/article/details/80896043
https://blog.csdn.net/yangzheng_yz/article/details/50470577