SPI总线协议
SPI(Serial Peripheral Interface),串行外围设备接口,是一种高速的,全双工,同步的通信总线,在芯片的管脚上占用四根线。
SPI是一个环形总线结构,由cs,sck,sdi,sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
上升沿发送、下降沿接收,高位先发送。
上升沿来的时候,sdo上的电平将被发送到从设备的寄存器中。
下降沿来的时候,sdi的电平将被接收到主设备中。
- 接口定义
内部结构
- 时钟极性和时钟相位
时钟极性(CPOL)设置时钟空闲时的电平,时钟相位(CPHA)设置读取数据和发送数据的时钟沿。
时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI接口时钟配置心得:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。
3. 传输时序
SPI接口在内部硬件实际上是由两个简单的移位寄存器,传输的数据为8位,在主器件产生从期间使能信号和移位脉冲下,按位传输,高位在前,地位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。
SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。
-
数据传输
在一个SPI时钟周期内,会完成如下操作:
a. 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;
b. 从机通过MISO线发送1位数据,主句通过该线读取这1位数据。
这是通过移位寄存器来实现的,如下图所示,主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到地位的方式一次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器的内容全部移出时,相当于完成了两个寄存器内容的交换。 -
优缺点
优点:支持全双工操作;操作简单;数据传输速率较高。
缺点:占用主机较多的口线(每一个从机都需要一根片选线);只支持单个主机;没有指定的流控制,没有应答机制确认是否接受到数据。