图4
图4中,注意看CS和MISO信号。我们可以看出,CS信号有效后,从器件立刻输出了bit1(值为1)。
通常我们进行的spi操作都是16位的。图5记录了第一个字节和第二个字节间的相互衔接的过程。
第一个字节的最后一位在SCK的上升沿被采样,随后的SCK下降沿,从器件就输出了第二个字节的第一位。
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接口没有指定的流控制,没有应答机制确认是否接收到数据。
SPI接口时钟配置:
在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的SDO连接从设备的SDI,从设备的SDO连接主设备的SDI,从设备SDI接收的数据是主设备的SDO发送过来的,主设备SDI接收的数据是从设备SDO发送过来的,所以主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。下面这段话是SyChip Wlan8100 Module Spec上说的,充分说明了时钟极性是如何配置的:
The 81xx module will always input data bits at the rising edge of the cLOCk, and the host will always output data bits on the falling edge of the clock.
意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下降沿有效。
又如,下面这段话是摘自LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.
意思是:从设备SSD1289在时钟的上升沿接收数据,而且是按照从高位到低位的顺序接收数据的。因此主设备的SPI时钟极性同样应该配置为下降沿有效。
时钟极性和相位配置正确后,数据才能够被准确的发送和接收。因此应该对照从设备的SPI接口时序或者Spec文档说明来正确配置主设备的时钟。
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片 的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如P89LPC900.
SPI,是一种高速的,全双工,同步的通信总线,其工作模式有两种:主模式和从模式,无论那种模式,都支持
3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。到目前为止,我使用过的具有SPI总线的器件,就是存储芯片 Eprom:at25128,在使用过程中,发现的确是有这种总线的优点。下面以P89LPC900单片机的SPI总线来解释SPI总线的通用使用规 则。
LPC900单片机的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及/SS,其中SPICLK是整个SPI总线的公用时 钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO是主机的输入,从机的输出。/SS 是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。
SPI总线可以配置成单主单从,单主多从,互为主从。今以互为主从模式作为讲解:
要进行SPI互为主从操作,必须遵照以下步骤:
1 对A、B进行初始化,均设为主机(需要进行以下操作)。
a) SPI端口初始化为准双向。
b) SPCTL配置为0x50,SSIG=0,SPEN=1,MSTR=1。
c) 清除SPSTAT中的SPIF及WCOL标志位为0。
d) 如果需要使用SPI中断,可使能相应中断位。
2 将A上一个引脚连接到B的/SS引脚上,然后拉低/SS,可将B强行置为从机模式,同时B机会发生以下变化:
a) B机的MSTR位自动清0。
b) B机的MOSI及SPICLK强行变为输入模式,MISO则变为输出模式。
c) B机SPIF位置位。
d) 如果SPI中断使能,B机将执行SPI中断服务程序。
3 B机可设置为查询接收或中断接收方式,以时刻准备接收由A机发送过来的数据,要使B机恢复为主机,必须完整执行步骤1。 本示例中,通过两块DP932 实验板构成了SPI互为主从测试系统。
程序中应注意的问题:
1 程序中应注意对首次拉低SS引脚进行处理:当A机首次通过B_SS将B机设置为从机后,从机的SBIF位会置位(会被认为完成一次传输),如果这之前,使 能了SPI中断,则从机则会执行相应的中断服务程序(本示例程序中,当B机的SS引脚被拉为低电平,B机的SBIF首次置位进行处理)。
2 关于从机恢复为主机的问题:互为主从模式中,当B机被A机设置为从机后,CPCTL寄存器中MSTR位被清除为0,且SPIF被置1,MOSI和SPICLK强制变为输入模式,MISO强制变为输出模式。要想恢复为主机,必须执行以下操作:
a) 将MSTR位置1,SPIF位清0。
b) 将MOSI,SPICLK,MISO及SS重新恢复为准双向口。
c) 在a)、b)之前,需要注意将B_SS拉高,如果其一直为低电平,即使完成a)、b)操作,也会将B机重新设置为从机。
3 在SPI总线的使用过程中,可以通过DORD(SPI数据顺序选择位),CPOL(SPI时钟极性选择位),CPHA( SPI时钟相位选择位)控制主/从机传输格式。对于本实验,可以忽略这些位的影响,但是在使用一些其他SPI器件时,必须根据从器件数据手册的要求,对 SPI数据的传输顺序,SPI的时钟极性,及SPI的时钟相位进行正确的设置。
4 一些SPI的应用系统,由于硬件的设计并不是很合理,所以有时SPI通信不正常(传输数据出错,或其他情况),你可以试着降低SPI总线的传输速率,或者调节一些SPI时钟极性及相位,以使传输稳定。
本文关键字:暂无联系方式接口电路,单元电路 - 接口电路