打印
[学习笔记]

SPI介绍及常见使用问题

[复制链接]
1286|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SPI接口主要应用在 EEPROMFLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
标准的SPI接口有四个线,分别为CS,SCLK,MOSI和MISO;如下图:

下面我们根据问题来进一步熟悉这个模块:
1、主机发送了正确的数据出去,却收不到从机的回复?
      可能是主机没有发送SCLK。在SPI通信中,时钟线SCLK是由主机控制,只有SCLK持续发送,才能实现数据的传输。如果主机在发送了数据后,不再持续发送时钟信号,那么从机也将回复不了数据。
      排查方法:用示波器量SCLK,确认主机会在从机回复数据时,有SCLK信号输出
2、SPI可以实现一个主机对多个从机吗?
       可以。通过CS脚,可以实现一个主机分时与不同从机的通信,如下图:
   
3、SPI主机与从机可以通信,但收发的数据却是错的?
      可能是CPOL或CPHA没设置好。下面详细介绍一下这两个配置:
        a极性(CPOL):Clock Polarity时钟极性
          先说什么是SCLK时钟的空闲时刻,其就是当SCLK在数发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。
          先说英文,其精简解释为:Clock Polarity = IDLE state of SCK。
          再用中文详解:
          SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:
          CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;
          CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;
         如图:
         
    b、相位(CPHA):Clock Phase时钟相位
        表示数据采集,数据有效的时刻。相位,对应这数据采集是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应第一个边沿,1对应第二个边沿。      
       对于:
       CPHA=0
,表示第一个边沿:
      对于CPOL=0idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
      对于CPOL=1idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
      CPHA=1
,表示第二个边沿:
      对于CPOL=0idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
      对于CPOL=1idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;     如图:
      下图是CPHA = 0情况下,CPOL0或者为1的时序图:      
       下图是CPHA = 1情况下,CPOL0或者为1的时序图:
         
       怎么确定设置CPOLCPHA的值?
        SPI分主机和从机,两者通过SPI协议通讯。
        而设置SPI的模式,是从机的模式,决定了主机的模式。
        所以要先去搞懂从机的SPI是何种模式,然后再将主机的SPI的模式,设置和从机相同的模式,即可正常通讯
       如果SPI从机通信序列是固定的,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述。
       如果SPI从机也是SPI控制器,模式可调,则主机跟从机调成同一种模式即可。

使用特权

评论回复

相关帖子

沙发
weifeng90| | 2021-5-7 07:12 | 只看该作者
谢谢楼主的分享

使用特权

评论回复
板凳
elephant00| | 2021-5-8 15:59 | 只看该作者
收藏,很不错的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

223

帖子

4

粉丝