spi 基础知识

串行外设接口 (SPI) 总线是一种运行于全双工模式下的同步串行数据链路。用于在单个主节点和一个或多个从节点之间交换数据。

SPI 总线实施简单,仅使用四条数据信号线和控制信号线(请参见图 1)。

图 1 基本的 SPI 总线

尽管表 1 中的引脚名称取自 Motorola 公司的 SPI 标准,但特殊集成电路的 SPI 端口名称通常与图 1 中所标示的名称有所不同。

表 1 SPI 引脚名称分配

SPI 数据速率通常介于 1 到 70 MHz 之间,字节长度范围从 8 位和 12 位到这些数值的倍数位。

数据传输通常会包含一次数据交换。当主节点向从节点发送数据时,从节点也会向主节点发送数据为此,主节点的内部移位寄存器和从节点被设置成环形(请参见图 2)。

图 2 两个移位寄存器形成一个内部芯片环形缓冲器

在数据交换之前,主节点和从节点使其内部移位寄存器加载存储器数据。产生时钟信号时,主节点会通过 MOSI 线同步输出其移位寄存器。同时,从节点在 SIMO 处从主节点读取第一位,并将其存储到存储器中,然后通过 SOMI 输出 MSB。主节点会在 MISO 处读取从节点的第一位,并将其存储到存储器中以待稍后处理。整个过程将一直持续,直至交换完所有数据位,然后主节点使时钟空闲并通过 /SS 禁用从节点。

 

图 4 主节点与独立从节点(左)以及菊花链式从节点(右)进行通信

从节点独立寻址时,主节点必须提供多个从选择信号。该结构一般用在数据采集系统中,其中的多个模数转换器 (ADC) 和数模转换器 (DAC) 都必须单独接入。

SPI总线协议介绍(详见http://blog.csdn.net/ce123_zhouwei/article/details/6897293)

一、技术性能
        SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。总线结构如下图所示。

四、 时钟极性和时钟相位
        在SPI操作中,最重要的两项设置就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。
主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。

          SPI接口时钟配置心得:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿发送数据。

 
五、传输时序
        SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变(发送),上升沿一位数据被存入移位寄存器(采样)

五、数据传输
    在一个SPI时钟周期内,会完成如下操作:
1) 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;
2) 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。
这是通过移位寄存器来实现的。如下图所示,主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

六、优缺点

       SPI接口具有如下优点:

       1) 支持全双工操作;

       2) 操作简单;

       3) 数据传输速率较高。

      同时,它也具有如下缺点:

      1) 需要占用主机较多的口线(每个从机都需要一根片选线);

      2) 只支持单个主机。

      3) 没有指定的流控制,没有应答机制确认是否接收到数据。
 

SPI时序详解


          SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。

          CPOL时钟极性:表示同步时钟空闲电平。=0,空闲时是低电平;=1,空闲时是高电平

          CPHA时钟相位:表示是在哪个时钟跳变沿采样。=0,在同步时钟第一个跳变沿采样;=1,在同步时钟沿第二个跳变沿采样

         图1中表现了这四种时序,时序与CPOL、CPHL的关系也可以从图中看出。


         我们来关注SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿,第一个时钟沿),在时钟的后沿输出数据(下降沿,第二个时钟沿)。首先来看主器件,主器件的输出口(MOSI)输出的数据bit1,在时钟的前沿被从器件采样,那主器件是在何时刻输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时刻输出bit1的呢。从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。

从这张图就可以很清楚的看出主从器件的bit1是怎样输出的
 
          SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性
(2) CKPHA (Clock Phase)   = CPHA = PHA = Phase = (时钟)相位
(3) SCK=SCLK=SPI的时钟
(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)
对于一个时钟周期内,有两个edge,分别称为:
(1)Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;
(2)Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;
本博文采用如下用法:
  1. 极性=CPOL
  2. 相位=CPHA
  3. SCLK=时钟
  4. 第一个边沿和第二个边沿
CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:

 
下面详细介绍。

CPOL极性

           先说什么是SCLK时钟的空闲时刻,其就是当SCLK在发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。其英文精简解释为:Clock Polarity = IDLE state of SCK。
SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:
             从上图中可以看出,(CPOL=0)的SCK 波形,它有(传输)8 个脉冲,而在脉冲传输前和完成后 都保持在【低电平状态】。此时的状态就是时钟的空闲状态或无效状态,因为此时没有脉冲, 也就不会有数据传输。同理得出,(CPOL=)1 的图,时钟的空闲状态或无效状态时SCK 是保持 【高电平的】。

CPHA相位

           首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。

            我们看上面的图,发现数据 SI 是对应 SCK 的第一个时钟沿,再仔细看,数据是在SCK的第一个时钟边沿保持稳定【数据被采样捕获】,在下一个边沿改变【SCK 的下降沿数据改变】因此我们得出结论:该系列FLASH 是【数据在第一个时钟沿被采样捕获】或【数据在SPCK 起始边沿捕获,在SPCK 下一个边沿改变】

如何判断CPOL和CPHA

(1)如何判断CPOL:SCLK的空闲时候的电压(传输开始前或者传输结束后的电压),是0还是1;
(2)如何判断CPHA:而数据采样时刻(数据稳定时刻)对应着的SCLK的电平,是第一个边沿还是第二个边沿,对应着CPHA为0还是1。


 
最后来看一下S3C2440的SPI的CPOL和CPHA,结合前面讲的理论知识,下面的图就很好理解啦!

你可能感兴趣的:(SPI总线)