驱动调试--SPI通信深入解析



工作中调试了高通平台的几个项目,解决了几个围绕spi的问题。结合网上资料,写了篇spi调试总结,希望能帮助大家。

SPI总线概述---SPI总线接口---SPI总线结构---SPI总线数据传输过程---SPI四种工作方式---SPI调试案例

SPI总线概述

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

优点:数据传输速率较高

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

 

SPI总线接口


 

 

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

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

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

3SCK – 时钟信号

4CS   Slave使能信号,Master控制


SPI总线结构

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

              









 

 

SPI总线数据传输过程

 

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

                                                                 


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

1)Master通过MOSI线发送1位数据,同时Slave通过MOSI线读取这1位数据

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网络时 ,MISOMOSI接反了。然后飞线把顺序换回来,spi通信正常 。

解决方案:

  1. 硬件改版 , 修改pin网络

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

     

BUG 2

问题现象:

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

原因分析:

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


    行文至此,东哥想多说几句,优秀的嵌入式人要具备快速准确解决问题的能力,这不仅要知识面广,经验足,更需要正确的调试思路。需要多思考,深入思考。记得关注我的博客,常来看看。