1、SPI时序分析和基础知识总结时序分析和基础知识总结一、一、SPI总线的历史总线的历史二、二、SPI总线接口定义总线接口定义三、三、SPI总线的工作方式和传输时序总线的工作方式和传输时序四、四、SPI与与I2C的异同点的异同点五、五、SPI总线的优缺点总线的优缺点八、关于八、关于QSPI六、六、SPI总线的设置总线的设置七、七、SPI与与SD卡信号卡信号 SPI(Serial Peripheral Interface)串行外设接口总线,最早由Motorola提出,出现在其M68系列单片机中,由于其简单实用,又不牵涉到专利问题,因此许多厂家的设备都支持该接口,广泛应用于外设控制领域。SPI接口是一
2、种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的。但正因为没有确切的版本协议,不同家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法直接互连(需要软件进行必要的修改)。SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:1)SCLK:串行时钟,用来同步数据传输,由主机输出;2)MOSI:When master,out line;when slave,in line。主机输出从机输入数据线;3)MISO:When master,in line;when slave,out li
3、ne。主机输入从机输出数据线;比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,Master的MOSI引脚应与Slave的MOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO。Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。SDI:串行数据输入 SDO:串行数据输出 在这种情况下,当Master与Slave连接时,就应该用一方的SDO连接另一个方的SDI。4)SS:Slave
4、Select,片选线,用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。SPI接口采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。SPI的时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。SPI也支持多Slave应用。
5、多个Slave共享时钟线、数据线,可以直接并接在一起;而各Slave的片选线SS则单独与Master连接,受Master控制。在一段时间内,Master只能通过某根SS线激活一个Slave,进行数据传输,而此时其他Slave的时钟线和数据线端口则都应保持高阻状态,以免影响当前数据传输的进行。一主多从的SPI传输模式SPI总线添加从器件:每个器件需要一个单独的从选择信号。总信号数最终为总线添加从器件:每个器件需要一个单独的从选择信号。总信号数最终为 n+3 个,其中个,其中 n 是总线上从器件的数量。在是总线上从器件的数量。在 SPI 总线上添加新的从器件也不方便。总线上添加新的从器件也不方便。
6、对于额外添加的每个从器件,都需要一条新的从器件选择线。对于额外添加的每个从器件,都需要一条新的从器件选择线。SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。在SPI操作中,最重要的两项设置就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)。时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。所以为了保证主从机正确通信,应使得它
7、们的SPI具有相同的时钟极性和时钟相位。SPI总线有四种工作方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示);在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。四种工作方式时序分别为:时序详解时序详解:CPOL:时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平 CPHA:时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样工作方式工作方式1:当CPHA=0、CPOL=0时SPI总线工作在方式1。MISO引脚上的数据在第一个SPSCK沿跳变之前已经上线了,而为了保证正
8、确传输,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传输过程中,在同步时钟
9、信号周期开始时(上升沿)数据上线,然后在同步时钟信号的下降沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。工作方式工作方式4:当CPHA=1、CPOL=1时SPI总线工作在方式4。与前者唯一不同之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。在一个SPI时钟周期内,会完成如下操作:1)主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;2)从机通过MISO线发送1位数据,主机通过该线读取这1位数据。这是通过移位寄存器来实现的。如下图所示,主机和从机各有一个移位寄存器,且二者连接
10、成环。随着时钟脉冲,数据按位传输,高位在前,低位在后(MSB first),依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的一个字节,就必须发送一个空字节来引发从机的传输外设的一个字节,就必须发送一个空字节来引发从机的传输。另外:另外:SPI协议没有定义寻址机制,需通过外部SS信号线选择设备,当出现多slave应用时,需要多根SS信号线,实施起来较I2C要复杂。此外,SPI总线
11、不支持总线控制权仲裁,故只能用在单Master的场合;而I2C可以支持多Master的应用。SPI 协议相对I2C要简单,没有握手机制,数据传输效率高,速率也更快,通常应用中可达几Mbps;此外SPI是全双工通信,可同时发送和接收数据,因此,SPI比较适合用于数据传输的场合。比如需要较大批量数据传输的场合(比如MMC/SD卡的数据传输就支持SPI模式),或者无需寻址传输的场合。而I2C协议功能较丰富,但也相对复杂,多用在传输一些控制命令字等有意义数据的场合。SPI接口属于一种非常基本的外设接口,但是应用却很广泛。SPI也有所发展,比兔NS推出的SPI的精简接口Microwire,满足通常外设的
12、扩展需求。Motorola还推出了扩展功能的QSPI(Queued SPI)接口,应用更为广泛。SPI接口具有如下优点:1)支持全双工操作;2)操作简单;3)数据传输速率较高;4)提供频率可编程时钟 同时,它也具有如下缺点:1)需要占用主机较多的口线(每个从机都需要一根片选线);2)只支持单个主机。3)没有指定的流控制,没有应答机制确认是否接收到数据。除了时钟相位CPHA和时钟极性CPOL外,在SPI总线进行通信时,还有其他需要设置的参数,如SPR-状态控制寄存器。在从器件时钟频率小于主器件时钟频率时,如果SCK的速率设得太快,将导致接收到的数据不正确(SPI接口本身难以判断收到的数据是否正确
13、,要在软件中处理)。整个系统的速度受三个因素影响:主器件时钟CLK主、从器件时钟CLK从和同步串行时钟SCK,其中SCK是对CLK主的分频,CLK从和CLK主是异步的。要使SCK无差错无遗漏地被从器件所检测到,从器件的时钟CLK从必须要足够快。下面以SCK设置为CLK主的4分频的波形为例,分析同步串行时钟、主时钟和从时钟之间的关系。图1主从时钟和SCK的关系 如图1所示,当T从Tsck/2,即T从2T主时,无论主时钟和从时钟之间的相位关系如何,在从器件CLK从的上升沿必然能够检测到SCK的低电平,即SCK0的范围内至少包含一个CLK从的上升沿。图2中,当T从TSCK/22T主时,在从时钟的两个
14、上升沿都检测不到SCK的低电平,这样从器件就会漏掉一个SCK。在某些相位条件下,即使CLK从侥幸能检测到SCK的低电平,也不能保证可以继续检测到下一个SCK。只要遗漏了一个SCK,就相当于串行数据漏掉了一个位,后面继续接收/发送的数据就都是错误的了。图2主从时钟和SCK的关系 根据以上的分析,SPR和主从时钟比的关系如表1所列。在发送数据之前按照表1对SPR进行设置,SPR设定错误可以完全避免。表1 SPR的设置和主从时钟周期比值之间的关系 在SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,推出了QSPI,就是通常所谓的 Queue Serial periphe
15、ral interface,队列串行外设接口。是对Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。由于SPl只有1个8位的发送数据寄存器,所以CPU每次最多只能准备一个字节的待发送数据。而QSPI拥有具有16个QSPI传输控制组的传输队列,所以CPU每次最多可以准备16个待传输的数据,并且可以通过命令RAM设置每个待传输数据的长度。与SPI相比,QSPI结构最大的特点是以80字节的RAM取代了SPI的发送和接收数据寄存器。80字节的RAM分成3部分:16字的发送RAM,16字的接收RAM和16字节的命令RAM。这3部分形成了具有16个QSPI传输控制组的传输队列,每个QSPI
16、传输控制组由1个命令RAM、1个发送RAM和1个接收RAM组成。每个QSPI传输的数据长度、片选等信息可由该QSPI传输控制组的命令RAM单独决定。在QSPI模块的QWR寄存器中,NEWQP和ENDQP域分别决定了传输队列的起始点和结束点。起始点和结束点可以是16个QSPI传输控制组的任意一个。当QSPI传输启动时,QSPI模块将从起始点开始依次发送准备好的数据直到结束点,整个过程无需CPU干预。典型的QSPI传输流程如图2所示,其中QP为传输队列指针,指向即将传输的数据。QSPI模块具有7个引脚:QSPI_DIN为串行数据输入引脚;QSPI_DOUT为串行数据输出引脚;QSPI_CLK为串行时钟输出;QSPI_CS3:0为片选信号,通过外接译码器可以选择多达16个设备。一次典型的16位QSPI传输时序如图3所示。该时序假设片选信号低电平有效,时钟空闲时为低电平,在时钟的下降沿采样串行数据。其中,时钟空闲电平和采样时钟沿由QMR寄存器的CPOL和CPHA域决定。QSPI模块的队列机制加快了数据传输速度,减少了CPU的干预。除此之外,该模块提供了对时钟有效电平、采样沿、片选电平、传输数据位数等的自由配置,使其能灵活地与各种具有串行接口的设备进行通信。