串行传输协议-SPI

xiaoxiao2021-02-28  34

SPI总线概述

SPI全称是串行外设接口(Serial PeripheralInterface),全双工同步串行通信接口。

优点:数据传输速率较高

缺点:没有指定的流控制,没有应答机制确认是否接收到数据

 

SPI总线接口

                        

                            CS

                                                        CLK

                                                        MOSI

                                     MISO

 

                              1

 

 

SPI总线只需四条线就可以完成MCU与各种外围器件的通讯:

1MOSI Master数据输出,Slave数据输入

2MISO  Master数据输入,Slave数据输出

3SCK  – 时钟信号

4CS   Slave使能信号,Master控制。

 

SPI总线结构

 

SPI通信采用主从模式(Master-Slave)架构,一般为一个Master和多个Slave的应用模式。SPI总线构成如图2所示。

 

                               2

 

 

SPI总线数据传输过程

 

SPI接口在Master控制下产生的从器件使能信号和时钟信号,两个双向移位寄存器按位传输进行数据交换。传输数据以字节为单位,每个字节高位在前,低位在后(MSB first)。

 

在一个SPI时钟周期内,会完成如下操作:

2)Slaver通过MISO线发送1位数据,同时Master通过MISO线读取这1位数据

 

MasterSlave各有一个移位寄存器,如图4所示,而且这两个移位寄存器连接成环状。依照SCK的变化,数据以MSB first的方式依次移出Master寄存器和Slave寄存器,并且依次移入Slave寄存器和Master寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

 

SPI四种工作方式

 

下图是4种工作模式:(输入指接收端采样,输出指发送端输出数据)

 

SPI四种工作方式本质上是区分 数据采样的时间 和 数据输出的时间 这两个元素。

而这个时间区分是依靠sck 信号 ,故引出下面两个概念。

CPOL:时钟极性选择,为0SPI总线空闲为低电平,为1SPI总线空闲为高电平CPHA:时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样

 

SPI 调试案例

BUG 1

问题现象:

cpu接收到的数据均为0 , 抓取spi 4个信号波形,cs clk信号正常,mosi数据正常,miso无数据(为低电位)

原因分析:

1.miso信号线异常问题,故更换外设模组

      2.pin脚网络连接问题,故核对引脚接线图

分析验证:

      根据分析的1原因 ,更换几个模组发现现象依旧,而模组是量产产品,一般不会都有问题,说明1可以忽略。

          根据分析的 2原因,核对原理图 ,发现从cpu引出gpio pin网络时 ,MISO MOSI 接反了。然后飞线把顺序换回来,spi 通信正常 。

解决方案:

硬件改版 , 修改pin网络

软件互换cpu miso mosi输出的引脚(这要看软体是否支持)

 

BUG 2

问题现象:

      SPI波形显示,miso8 bit始终为0 该如何解释?

原因分析:

      因为spi工作需要先把slaver的寄存器地址发送过去 ,且clk是同步的,故前8 bit miso是没有信号的。故正常。

 

 

转载请注明原文地址: https://www.6miu.com/read-2619673.html

最新回复(0)