赞
踩
SPI是Serial Peripheral Interface的缩写,意即串行外设接口。SPI是一种高速的、全双工、同步通信总线,常用于处理器与板载外设(比如Flash存储器、实时时钟芯片、AD/DA芯片等)之间的通信。标准的SPI是4根线,分别是:
SSEL:也写作SCS,从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。
SCLK:也写作SCK,时钟信号,由主机产生,用于通信数据的同步。
MOSI:Master Output/Slave Input,主出从入,主机给从机发送指令或者数据的通道。
MISO:Master Input/Slave Output,主入从出,主机读取从机的状态或者数据的通道。
SPI总线通常只有一个主机,从机可以有一个,也可以有多个。当有多个从机时,SCLK、MOSI、MISO这3条线是共用的,但主机需要为每一个从机单独分配一条SSEL线,用于分时控制多个从机的通信。
图1 一主一从的SPI通信示意图
图2 一主三从SPI通信示意图
在某些情况下,也可以用3根线的SPI或者2根线的SPI进行通信。比如主机只给从机发送命令,从机不需要回复数据的时候,那么MISO就可以不要;而在主机只读取从机的数据,不需要给从机发送指令的时候,那MOSI就可以不要;当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么SSEL就可以不要;此时如果再加上主机只给从机发送数据,那么SSEL和MISO都可以不要;如果主机只读取从机送来的数据,SSEL和MOSI都可以不要。
3线和2线的SPI实际使用也是有应用的,但是当提及SPI的时候,一般都是指标准SPI,都是指4根线的这种形式。
SPI通信有四种模式,这四种模式由以下两个参数的值组合决定。
CPOL:Clock Polarity,即时钟的极性。
时钟的极性是什么概念呢?通常来说通信数据的传输都是有开始和结束的,那么在一次数据传输开始之前或者结束之后的状态我们称之为空闲状态。
CPOL=0,表示时钟SCLK在通信空闲状态时保持低电平。
CPOL=1,表示时钟SCLK在通信空闲状态时保持高电平。
CPHA:Clock Phase,就是时钟的相位。
主机和从机要交换数据,就牵涉到一个问题,即主机在什么时刻输出数据到MOSI上而从机在什么时刻读取这个数据,或者从机在什么时刻输出数据到MISO上而主机什么时刻读取这个数据。同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟的跳变沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样(即读取)。而一个完整的时钟周期必定包含了一个上升沿和一个下降沿,这是周期的定义所决定的,只是这两个沿的先后并无规定。又因为数据从产生的时刻到它的稳定是需要一定时间的,那么,如果主机在时钟上升沿输出数据到MOSI上,从机就只能在下降沿去采样这个数据了。反之如果一方在下降沿输出数据,那么另一方就必须在上升沿采样这个数据。
CPHA=0,表示数据的采样是在时钟周期的第一个沿,那么数据的输出自然就是在第二个沿。
CPHA=1,表示数据的采样是在时钟周期的第二个沿,那么数据的输出自然就是在第一个沿。
于是,CPOL与CPHA就产生了四种组合方式,即SPI的四种模式:
模式0:即CPOL=0、CPHA=0,时钟空闲时为低电平,数据采样在第一个沿(上升沿)进行,时序图如下
模式1:即CPOL=0、CPHA=1,时钟空闲时为低电平,数据采样在第二个沿(下降沿)进行,时序图如下
模式2:即CPOL=1、CPHA=0,时钟空闲时为高电平,数据采样在第一个沿(下降沿)进行,时序图如下
模式3:即CPOL=1、CPHA=1,时钟空闲时为高电平,数据采样在第二个沿(上升沿)进行,时序图如下
模式0和模式3是常用模式,其它两种则较少见。
让我们再仔细想一下,CPHA=0时,会有一个问题:就是当一帧数据开始传输第一个bit时,在第一个时钟沿上就采样该数据了,那么它是在什么时候输出来的呢?有两种情况:一是在SSEL生效的时刻,二是在上一帧数据的最后一个时钟沿,也就是说当CPHA=0时数据应该在第一个时钟沿到来之前就提前准备好。
下图是使用Kingst LA5016逻辑分析仪采集的一帧SPI通信数据。
从图中可以看出:
1、时钟SCLK在空闲时的电平是高电平,即CPOL=1
2、MOSI和MISO上的数据变化都是出现在SCLK下降沿,所以数据的采样就应该是在SCLK的上升沿,即第二个沿,即CPHA=1,图中SCLK通道上由箭头标出
所以本例中的SPI是工作在模式3。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。