SPI总线是摩托罗拉提出的三线同步串行外围接口,采用主从模式架构,支持单主设备。时钟由主设备控制,数据在时钟脉冲下按位输出,高位在前。
SPI一般有4根线,分别是:
MOSI:主器件输出,从器件输入(也有叫sdo)
MISO:主器件输入,从器件输出 (也有叫sdi)
SCK:时钟信号,由主设备控制发出。
/SS :设备选择信号,由主设备控制,根据这个信号可以决定能连接到从设备的数量
spi的数据传输主要是在SCK的的控制下,两个双向以寄存器进行数据的交换。
SPI总线根据时钟极性(CPOL)和时钟相位(CPHA)的不同,有四种工作方式:
CPOL决定了SCK时钟信号空闲时的电平,CPOL用来决定SCK时钟信号空闲时的电平,CPOL=0时,空闲电平为低电平,CPOL=1时,空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA=0时在第一个时钟沿采样,CPHA=1,在每个周期第二个时钟沿采样。SPI主从模块的时钟极性和时钟相位应该设为一致
当CPOL=0,CPHA=0时
当CPOL和CPHA都为0时,SCK空闲时候为低电平,主从器件都是时钟前沿采样,时钟后沿输出数据,那么对于主从设备,它们的第一位数据bit1是什么时候发出去的呢。
主器件是在SCK信号有效以前发送bit1,由图1可以看出,主设备的bit1是在SCK上升沿的前半个时钟发出。与从机选择SSEL(下图的CS脚)没有关系。
从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK并没有起效,由图2可以看出。
图1
CS信号有效后(低电平有效,注意CS下降沿后发生的情况),故意用延时程序
延时了一段时间,之后再向数据寄存器写入了要发送的数据,来观察主器件输出bit1的情况(MOSI)。
可以看出,bit1(值为1)是在SCK信号有效之前的半个时钟周期的时刻开始输出的(与CS信号无关),
到了SCK的第一个时钟周期的上升沿正好被从器件采样。
图2
注意看CS和MISO信号。我们可以看出,CS信号有效后,从器件立刻输出了bit1(值为1)。
通常我们进行的spi操作都是16位的。图3记录了第一个字节和第二个字节间的相互衔接的过程。
第一个字节的最后一位在SCK的上升沿被采样,随后的SCK下降沿,从器件就输出了第二个字节的第一位。
图3
SPI总线协议介绍(接口定义,传输时序)
一、技术性能
SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。
时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。
-------------------------------------------------------
二、接口定义
SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。
(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK :时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制
-------------------------------------------------------
三、内部结构
-------------------------------------------------------
四、传输时序
SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。
SPI接口没有指定的流控制,没有应答机制确认是否接收到数据。
参考自:http://blog.sina.com.cn/s/blog_678f4ab70100p1lk.html