SPI ( Serial Peripheral In terface )是一种串行串行同步通讯协 议,由一个主设备和一个或多个从设备 组成,主设备启动一个与从设 备的同步通讯,从而完成数据的交换。
SPI接口由SDI (串行数据输
入),SDO (串行数据输出),SCK (串行移位时钟),CS (从使能 信号)四种信号构成,CS决定了唯一的与主设备通信的从设备,如没 有CS信号,则只能存在一个从设备,主设备通过产生移位时钟来发 起通讯。通讯时,数据由SDO输出,SDI输入,数据在时钟的上升或 下降沿由SDO输出,在紧接着的下降或上升沿由 SDI读入,这样经 过8/16次时钟的改变,完成8/16位数据的传输。
总线协议
该总线通信基于 主-从(所有的串行的总线均是这样,USB,IIC, SPI等)配置,而且下面提到的方向性的操作合指代全部从主设备的角 度说得。它有以下4个信号:
MOSI:主出/从入 MISO:主入/从出 SCK:串行时钟
SS:从属选择;芯片上 从属选择” (slave-select)的引脚数决定了可 连到总线上的器件数量。
在SPI传输中,数据是同步进行发送和接收的。 数据传输的时钟基 于来自主处理器的时钟脉冲(好像也可以是IO上的电平的模拟时钟), 摩托罗拉没有定义任何通用 SPI的时钟规范。然而,最常用的时钟设 置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI 串行时钟的活动状态,而 CPHA定义相对于SO-数据位的时钟相位。 CPOL和CPHA的设置决定了数据取样的时钟沿。
数据方向和通信速度
SPI传输串行数据时首先传输最高位。波特率可以高达 度能达到5MHz。
SPI总线接口及时序
SPI总线包括1根串行同步时钟信号线以及2根数据线。
5Mbps ,
具体速度大小取决于SPI硬件。例如,Xicor公司的SPI串行器件传输 速
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串 行同步时钟极性和相位可以进行配置,时钟极性( CPOL )对传输协议 没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电 平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位
(CPHA )能够配置用于选择两种不同的传输协议之一进行数据传输。 如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据 被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下 降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该 一致。SPI接口时序如图3、图4所示。
sc K li'1;:? SCKI'J'-L*
SCK'-/'l:
4-6
SCK^llirJ]7 SCK^irJ/S
SCKKRUl h scKurot MS MISI
X MSB )G^DG二X
\\ MISO
—MSH ::X
L站
图3 CPHA=0时SPI总线数摇传输时序
SCK(CPOt S< K(t r]*H
XX MOSI
k. MISt)
图4 CPHA=1时SPI总线数据传输时序
SPI是一个环形总线结构,由ss (cs )、sck、sdi、sdo构成,其 时序其实很简单,主要是在 sck的控制下,两个双向移位寄存器进行 数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发 送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是 sdo=1 ;寄存器
=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去, 那么这时寄存器=0101010,sdi,这样在8个时钟脉冲以后,两个寄存 器的内容互相交换一次。这样就完成里一个
例子
spi时序。
假设主机和从机初始化就绪:并且主机的sbuff=Oxaa
(10101010 ),从机的 sbuff=0x55( 01010101 ),下面将分步对 spi 的 8个时钟周期的数据情况演示一遍:
假设上升沿发送数据.
脉冲 (SCLK ) 0 1上 1下 2上 2下 3上 3下 4上 4下 5上 5下 6上 6下 7上 7下 8上 8下 主机sbuff(主端发 从机sbuff(主端接 sdi串行输入到 sdo串行输出从 主端 主端 送) 受) 10101010 0101010x 01010100 1010100x 10101001 0101001x 01010010 1010010x 10100101 0100101x 01001010 1001010x 10010101 0010101x 00101010 0101010x 01010101 01010101 1010101x 10101011 0101011x 01010110 1010110x 10101101 0101101x 01011010 1011010x 10110101 0110101x 01101010 1101010x 11010101 1010101x 10101010 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示 下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候, 从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选 脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因 为,首先主机要发送命令过去,然后从机根据主机的命令准备数据, 主机在下一个8位时钟周期才把数据读回来,主机产生时钟SCLK , 而数据又必须依靠边沿启动才
能传送。
SPI总线是Motorola公司推出的三线同步接口,同步串行 3线方 式进行通信:一条时钟线SCK,一条数据输入线MOSI,—条数据输出 线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。 SPI 主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提 供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。图 3示出SPI总线工作的四种方式,其中使用的最为广泛的是 SPI0和 SPI3方式(实线表示):
输入j输出 1 -Tinrin_呵 SCK ---------- ] -- ----- -- -- - 1」 ■j\\ n 厂i _ 图2 SPI总线四种工作方式
Li J SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串 行同步时钟极性和相位可以进行配置,时钟极性( CPOL )对传输协议 没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电 平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位
(CPHA )能够配置用于选择两种不同的传输协议之一进行数据传输。 如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据 被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下 降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该 一致。SPI接口时序如图3、图4所示。
因篇幅问题不能全部显示,请点此查看更多更全内容