一.SPI总线简介
串行外围设备接口SPI(serial peripheral interface)总线技能是Motorola公司推出的一种同步串行接口。
SPI 用于CPU与各种外围器材进行全双工、同步串行通讯。它只需四条线就可以完结MCU与各种外围器材的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有用从机挑选线CS。当SPI作业时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),一起从输入引脚(MISO)接纳的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器材接纳的字节数据进入移位寄存器中。即完结一个字节数据传输的本质是两个器材寄存器内容的交流。主SPI的时钟信号(SCK)使传输同步。其典型体系框图如下图所示。
二.SPI总线主要特点
· 全双工;
· 可以当作主机或从机作业;
· 供给频率可编程时钟;
· 发送结束中止标志;
· 写抵触维护;
.总线竞赛维护等。
三.SPI总线作业办法
SPI总线有四种作业办法,其间运用的最为广泛的是SPI0和SPI3办法(实线表明):
四种作业办法时序别离为:
时序详解:
CPOL:时钟极性挑选,为0时SPI总线闲暇为低电平,为1时SPI总线闲暇为高电平
CPHA:时钟相位挑选,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样
作业办法1:
当CPHA=0、CPOL=0时SPI总线作业在办法1。MISO引脚上的数据在第一个SPSCK沿跳变之前现已上线了,而为了确保正确传输,MOSI引脚的MSB位有必要与SPSCK的第一个边缘同步,在SPI传输进程中,首先将数据上线,然后在同步时钟信号的上升沿时,SPI的接纳方捕捉位信号,在时钟信号的一个周期结束时(下降沿),下一位数据信号上线,再重复上述进程,直到一个字节的8位信号传输结束。
作业办法2:
当CPHA=0、CPOL=1时SPI总线作业在办法2。与前者仅有不同之处只是在同步时钟信号的下降沿时捕捉位信号,上升沿时下一位数据上线。
作业办法3:
当CPHA=1、CPOL=0时SPI总线作业在办法3。MISO引脚和MOSI引脚上的数据的MSB位有必要与SPSCK的第一个边缘同步,在SPI传输进程中,在同步时钟信号周期开端时(上升沿)数据上线,然后在同步时钟信号的下降沿时,SPI的接纳方捕捉位信号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复上述进程,直到一个字节的8位信号传输结束。
作业办法4:
当CPHA=1、CPOL=1时SPI总线作业在办法4。与前者仅有不同之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。
四.SPI总线常见过错
1 SPR设定过错
在从器材时钟频率小于主器材时钟频率时,假如SCK的速率设得太快,将导致接纳到的数据不正确(SPI接口自身难以判别收到的数据是否正确,要在软件中处理)。
整个体系的速度受三个要素影响:主器材时钟CLK主、从器材时钟CLK从和同步串行时钟SCK,其间SCK是对CLK主的分频,CLK从和CLK主是异步的。要使SCK无差错无遗失地被从器材所检测到,从器材的时钟CLK从有必要要足够快。下面以SCK设置为CLK主的4分频的波形为例,剖析同步串行时钟、主时钟和从时钟之间的联系。
图1主从时钟和SCK的联系
如图1所示,当T从 在发送数据之前按照表1对SPR进行设置,SPR设定过错可以完全防止。 2 形式过错(MODF) 形式过错表明的是主从形式挑选的设置和引脚SS的衔接不一致。 器材作业在主形式的时分(MSTR=1),它的片选信号SS引脚有必要接高电平。在发送数据的进程中,假如它的SS从高电平跳至低电平,在SS的下降沿,SPI模块将检测到形式过错,对MODF方位1,强制器材从主形式转入从形式(即令MSTR=0),清空内部计数器counter,并结束正在进行的数据传输,如图3(a)所示。 3 溢出过错(OVR) 溢出过错表明接连传输多个数据时,后一个数据掩盖了前一个数据而产生的过错。 状况标志SPIF表明的是数据传输正在进行中,它对数据的传输有较大的影响。主器材的SPIF有用由数据寄存器的空标志SPTE=0产生,而从器材的SPIF有用则只能由收到的第一个SCK的跳变产生,且又因为从器材的SPIF和主器材宣布的SCK是异步的,因而从器材的传输标志SPIF从相对于主器材的传输标志SPIF主有必定的滞后。如图4所示,在主器材接连发送两个数据的时分将有或许导致从器材的传输标志和主器材下一个数据的传输标志相堆叠(图4中虚线和暗影部分),第一个收到的数据必定被掩盖,第二个数据的收/发也必定犯错,产生溢出过错。 经过对从器材的波形剖析发现,counter=8后的第一个时钟周期,数据最终一位的传输现已完结。在数据现已收/发结束的情况下,counter=8状况的长短对数据的正确性没有影响,因而可以缩短counter=8的状况,以防止前一个SPIF和后一个SPIF相堆叠。这样,从硬件上防止了这一阶段的溢出过错。 可是,假如从器材作业速度不够快或许软件正在处理其他作业,在SPI接口接纳到的数据尚未被读取的情况下,又接纳到一个新的数据,溢出过错仍是会产生的。此刻,SPI接口维护前一个数据不被掩盖,放弃新收到的数据,置溢出标志OVR=1;别的宣布中止信号(假如该中止答应),告诉从器材及时读取数据。 4 偏移过错(OFST) SPI接口一般要求从器材先作业,然后主器材才开端发送数据。有时在主器材往外发送数据的进程中,从器材才开端作业,或许SCK遭到外界搅扰,从器材未能精确地接纳到8个SCK。如图5所示,从器材接纳到的8个SCK其实是归于主器材发送相邻的两个数据的SCK主。这时,主器材的SPIF和从器材的SPIF会产生堆叠,数据产生了错位,从器材假如不对此进行纠正的话,数据的接纳/发送便一向地错下去。 在一个数据的传输进程中,SPR是不答应改动的,即SCK是均匀的,而从图5可以看出,从器材接纳到的8个SCK并不均匀,它们是别离归于两个数据的,因而可以核算SCK的占空时刻来判别是否产生了偏移过错。经剖析,正常时分SCK=1时的时钟周期数n的取值满意如下联系: 但因为主从时钟之间是异步的,而且经过了取整,所以正常时分SCK=1时的时钟周期计数值COUNT应满意: 比如在图5中,COUNT的最大值COUNT(max)=2或许1,都可认为是正常的。但当呈现COUNT(max)=8时,可以断定呈现了偏移过错。在实践规划中,先记载下第一个COUNT(max)的值,假如后边又呈现与记载值相差1以上的COUNT(max)呈现,可知有偏移过错OFST 5 其他过错 设定不妥,或许遭到外界搅扰,数据传输难免会产生过错,或许有时软件对过错的品种判别不清,有必要要有一种办法强制SPI接口从过错状况中康复过来。在SPI不作业,即SPEN=0的时分,铲除SPI模块内部简直一切的状况(专用寄存器在外)。假如软件在接纳数据的时分,可以发现数据有过错,不管是什么过错,都可以强制中止SPI的作业,从头进行数据传输。例如,在偏移过错(OFST)中,假如SPR2、SPR1和SPR0的设置恰当,也可以使SCK显得比较“均匀”。SPI接口硬件自身不或许检测到有过错,若用户软件可以发现过错,这时就可以强制中止SPI的传输作业,这样就可以防止过错一向继续下去。 在使用中,假如对数据的正确性要求较高,除了要在软件上满意SPI接口的时序要求外,还需要在软件上作恰当的处理。
图2主从时钟和SCK的联系
依据以上的剖析,SPR和主从时钟比的联系如表1所列。
表1 SPR的设置和主从时钟周期比值之间的联系
对从形式(MSTR=0),在没有数据传送的时分,SS高电平表明从器材未被选中,从器材不作业,MISO输出高阻;在数据传输进程中,片选信号SS有必要接低电平,且SS不答应跳变。假如SS从低电平跳到高电平,在SS的上跳沿,SPI模块也将检测到形式过错,清空内部计数器counter,并结束正在进行的数据传输。直到SS康复为低电平,从头使SPEN=1时,才从头开端作业,如图3(b)所示。
图3形式过错的检测
图4溢出过错
图5偏移过错
产生。SPI接口在“不均匀”的当地令SPIF=1,然后预备等候下一个数据的第一个SCK。其间COUNT的位数固定为8位,为了防止溢出时从头从00H开端计数,当计数到达ffH时中止计数。