SPI是嵌入式通讯中经常使用的协议,相比I2C而言是他支持全双工通讯,在通讯的效率与速度方面都具有明显的优势,线面我们就深入浅出的了解下SPI,首先是他的硬件连接,如下图所示:
SPI的硬件接线主要由四根线组成,他们分别是时钟线SCLK,主机发送线MOSI,主机接收线MISO和片选信号线SS/CS,类似与I2C也是采用一主多从式的连接结构,且主机在通讯中起主导作用。下面我们来看一下一个具体的SPI通讯实例。
我们可以看到主机发送数据时首先会拉低对应从机的片选信号,紧接着时钟线发出八个脉冲,每个脉冲对应一位的数据,在时钟线的上升沿进行读取。这里我们只是简单的举一个例子来方便大家快速的理解,其实SPI一共有四种工作模式,不过初学者往往会被这几种模式长篇大论的介绍说搞晕,所以我们先简单介绍其中的一种工作模式,接下来我会详细讲解四种模式各有什么不同,我们在看一张图:
SPI共有四种工作模式,有两个寄存器(CPOL、CPHA)控制。首先要明确的一点就是,这四种工作模式影响的都只有时钟线、时钟线、时钟线(重要的事情说三遍),先说CPOL表示的是时钟线空闲时刻的状态,若CPOL=1则在时钟线空闲不传输数据时始终为高电平状态,相反若是CPOL=0则空闲时的时钟线为低电平,就这么简单。再说CPHA时钟相位听名字就觉得比较难以理解,其实都是纸老虎,CPHA表示的就是在第几个时钟边沿读写数据,若CPHA=0那么在第一个边沿对数据采样,若CPHA=1那么在第二个边沿对数据采样就这么简单。
现在我们再来看上面的举例图(第二张),你应该能知道他是那一种模式了,首先时钟线空闲为高电平CPOL=1,然后在第二个边沿数据采样,所以CPHA=1。有些地方会把这种模式称为模式3。
Mode 0 | CPOL=0, CPHA=0 |
Mode 1 | CPOL=0, CPHA=1 |
Mode 2 | CPOL=1, CPHA=0 |
Mode 3 | CPOL=1, CPHA=1 |
SPI就讲到这里。