SPI协议并没有我想的那么简单( 二 )


 

  •  
    SCLK也可以是 SCK ;
     
  •  
    本文将按照以下命名进行讲解 [MISO, MOSI, SCK,NSS]
    下图显示了单个主机和单个从机之间的典型SPI连接 。
    SPI协议并没有我想的那么简单

    文章插图
    主从连接 时钟频率
    SPI总线上的主机必须在通信开始时候配置并生成相应的时钟信号 。在每个SPI时钟周期内,都会发生 全双工数据传输 。
    主机在 MOSI 线上发送一位数据,从机读取它,而从机在 MISO 线上发送一位数据,主机读取它 。
    就算只进行单向的数据传输,也要保持这样的顺序 。这就意味着无论接收任何数据,必须实际发送一些东西!在这种情况下,我们称其为虚拟数据;
    从理论上讲,只要实际可行,时钟速率就可以是您想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率 。
    时钟极性 CKP/Clock Polarity
    除了配置串行时钟速率(频率)外,SPI主设备还需要配置 时钟极性 。
    根据硬件制造商的命名规则不同,时钟极性通常写为 CKP或 CPOL 。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;
    CKP可以配置为1或0 。这意味着您可以根据需要将时钟的默认状态(IDLE)设置为高或低 。极性反转可以通过简单的逻辑逆变器实现 。您必须参考设备的数据手册才能正确设置CKP和CKE 。
     
    •  
      CKP = 0 :时钟空闲 IDLE 为低电平 0 ;
       
    •  
      CKP = 1 :时钟空闲 IDLE 为高电平 1 ;
       
    时钟相位 CKE /Clock Phase (Edge) 
    除配置串行时钟速率和极性外,SPI主设备还应配置时钟相位(或边沿) 。根据硬件制造商的不同,时钟相位通常写为 CKE或 CPHA;
    顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;
     
    •  
      CKE = 0 :在时钟信号 SCK 的第一个跳变沿采样;
       
    •  
      CKE = 1 :在时钟信号 SCK 的第二个跳变沿采样;
       
    时钟配置总结 
    综上几种情况,下图总结了所有时钟配置组合,并突出显示了实际采样数据的时刻;
     
    其中黑色线为采样数据的时刻;
    蓝色线为SCK时钟信号;
     
    具体如下图所示;
    SPI协议并没有我想的那么简单

    文章插图
    模式编号
    SPI的时钟极性和相位的配置通常称为 SPI模式,所有可能的模式都遵循以下约定;具体如下表所示;
    SPI Mode CPOL CPHA 0 [00] 0 0 1 [01] 0 1 2 [10] 1 0 3 [11] 1 1
    除此之外,我们还应该仔细检查微控制器数据手册中包含的模式表,以确保一切正常 。
    多从机模式
    前面说到SPI总线必须有一个主机,可以有多个从机,那么具体连接到SPI总线的方法有以下两种:
    第一种方法:多NSS
     
    1.  
      通常,每个从机都需要一条单独的SS线 。
       
    2.  
      如果要和特定的从机进行通讯,可以将相应的 NSS 信号线拉低,并保持其他 NSS 信号线的状态为高电平;如果同时将两个 NSS 信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条 MISO 线上传输数据,最终导致接收数据乱码 。
       
     
    具体连接方式如下图所示;
    SPI协议并没有我想的那么简单

    文章插图
    多NSS连接
    第二种方法:菊花链
    SPI协议并没有我想的那么简单

    文章插图
    在数字通信世界中,在设备信号(总线信号或中断信号)以串行的方式从一 个设备依次传到下一个设备,不断循环直到数据到达目标设备的方式被称为菊花链 。
     
    1.  
      菊花链的最大缺点是因为是信号串行传输,所以一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了;


      推荐阅读