SPI相关

SPI模块功能框图

典型的SPI控制器由如波特率发生器、主控逻辑、收发缓冲、控制部分等几大部分组成。


通常SPI通过4个管脚与外部器件相连:

l        MISO:主收从发管脚,仅由从设备控制;单向数据线;

l        MOSI:主发从收管理,仅由主设备控制;单向数据线;

l        SCK:串口时钟,由主设备控制,仅由主设备控制;用于时钟同步

l        NSS(SEL):从设备选择管脚,对于主机,无用,可配置为GPIO口用于选择从机;仅由主设备控制;用于从机寻址;

从机仅控制MISO管脚,发数据到主机。


SPI通信协议

      这里的通信协议,同UART,只规定了每一帧数据如何传输,并未对帧结构的组成做介绍。相对而言,IIC不仅指定了位传输协议,还指定了帧的格式。

      CPOL和CPHA位组合成四种可能的时序关系。CPOL(时钟极性)位控制在没有数据传输时时钟的空闲状态电平,CPHA位控制数据采样的边沿。所有的采样均同步于SCK。


l        CPOL = 0,SCK引脚在空闲状态 = 0;CPOL = 1,SCK引脚在空闲状态 = 1;

l        CPHA = 1,接收器接收数据在SCK时钟的第二个边沿(CPOL
= 00时下降沿,CPOL = 1时上升沿)数据采样,第二个时钟边沿被锁存;CPHA = 0,接受器接收数据在SCK时钟的第一边沿(CPOL = 0时下降沿,CPOL = 1时上升沿)采样,数据在第二个时钟边沿被锁存。发送器总是在第二个时钟边沿输出数据。

l        CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿

   特别注意,当总线上没有SCK时钟信号时,即使从机有数据要发送,从机也会等待SCK信号到来,并在SCK信号的指定边沿将信号输出。数据帧格式为:MSB/LSB在先,8/16/32位等,收发双发数据帧格式、时钟极性和相位的配置必须相同。对于每帧的具体内容,并不作解释。

SPI配置

SPI从模式

在从配置里,SCK引脚用于接收到从主设备来的串行时钟,时钟由主设备提供。


1.   配置步骤

l        定义数据帧格式为8位或16位;帧格式为MSB或LSB为第一位;

l        选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系,从设备和主设备的CPOL和CPHA位必须配置成相同的方式。

l        设备为从模式,使能SPI。


此时,MOSI引脚是数据输入,MISO引脚是数据输出。


2.   数据发送过程

    只有当从设备收到主设备传到的时钟信号时,才可始发送。在MOSI引脚上出现第一个数据位时,发送过程开始,第一个位被发送出去。余下的位(对于8位数据帧格式,还有7位;对于16位数据帧格式,还有15位)被装进移位寄存器。当发送缓冲器中的数据传输到移位寄存器时, TXE(发送缓冲为空)标志被设置,此时可以产生中断以通知应用程序;


3.   数据接收过程

当数据接收完成时:

移位寄存器中的数据传送到接收缓冲器,接收移位寄存寄存器中的RXNE(接收缓冲非空)标志被设置;此时,可能产生中断。

SPI主模式

在主配置时,串行时钟在SCK脚产生。

1.   配置步骤

l        配置SCK波特率。波特率由主机控制;

l        配置CPOL和CPHA位,和定义8或16位数据帧、LSBFIRST位帧格式。

l        设置为主模式,使能SPI;

l        在这个配置中,MOSI脚是数据输出,而MISO脚是数据输入。

2.   数据发送过程

    当一字节写进发送缓冲器时,发送过程开始。在发送第一个数据位时,数据字被并行地(通过内部总线)传入移位寄存器,而后串行地移出到MOSI脚上;MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位。数据从发送缓冲器传输到移位寄存器时TXE标志将被置位,同时可能产生中断。

3.   数据接收过程

对于接收器来说,当数据传输完成时:
移位寄存器里的数据传送到接收缓冲器,并且RXNE标志被置位;


特殊配置-单工通信


SPI通常以全双工的方式通信,但也能够以两种配置工作于单工方式:

l        1条时钟线和1条双向数据线

l        1条时钟线和1条数据线(双工模式下只读方式)

1.   1条时钟线和1条双向数据线

设置SPI_CR1寄存器中的BIDIMODE位而启用此模式。在这个模式中,SCK用作时钟,主模式中的MOSI或从模式中的MISO用作数据通信。传输的方向由配置寄存中的特殊位控制:当位是1的时候,数据线是输出,否则是输入。

2.   1条时钟和1条数据线(双工模式下只读方式)

为了释放一根I/O脚作为它用,可以通过设置禁止SPI输出功能,SPI将运行于只接收模式。 接收脚(主设备的MISO,或者从设备的MOSI)可以当作通用IO口使用。因此读数据寄存器时,读不到接收的值。

1.4.4   常见SPI控制器的状态标志

应用程序通过3个状态标志可以完全监控SPI总线的状态。

1.   忙(Busy)标志

此标志表明SPI通信层的状态。当它被设置时,表明SPI正忙于通信,并且/或者在发送缓冲器里有一个有效的数据字正在等待被发送。此标志的目的是说明在SPI总线上是否有正在进行的通信。以下情况时此标志将被置位:

l        数据被写进主设备的发送数据寄存器上。

l        SCK时钟出现在从设备的时钟引脚上。

发送/接收一个字(字节)完成后,BUSY标志立即清除;此标志由硬件设置和清除。监视此标志可以避免写冲突错误。写此标志无效。仅当SPE位被设置时此标志才有意义。

2.   发送缓冲器空闲标志(TXE)

此标志被置位时表明发送缓冲器为空,因此下一个待发送的数据可以写进缓冲器里。当发送缓冲器有一个待发送的数据时,TXE标志被清除。当SPI被禁止时,此标志被清除。

3.   接收缓冲器非空(RXNE)

此标志为’1’时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志。

1.4.5   错误标志

1.   主模式错误(MODF)

主模式故障仅发生在:在片选引脚硬件模式管理下,主设备的NSS脚被拉低;或者在片选引脚软件模式管理下,SSI位被复位时;MODF位被自动置位。主模式故障对SPI设备有以下影响:

l        MODF位被置位,如果设置了ERRIE位则产生SPI中断;

l        SPE位被复位。这将停止一切输出,并且关闭SPI接口;

l        MSTR位被复位,因此强迫此设备进入从模式。

下面的步骤用于清除MODF位:


l        当MODF位被置位时,执行一次对SPI_SR寄存器的读或写操作;

l        然后写SPI_CR1寄存器 。

在有多个MCU的系统中,为了避免出现多个从设备的冲突,必须先拉高该主设备的NSS脚,再对MODF位进行清零。在清零的过程中或者清零完成之后,SPE和MSTR位可以恢复到它们的原始状态。

出于安全的考虑,当MODF位被置位的情况下,硬件不允许设置SPE和MSTR位。

通常配置下,从设备的MODF位不能被置位。然而,在多主配置里,一个设备可以在设置了MODF位的情况下,处于从设备模式;此时,MODF位指示可能出现了多主冲突。中断程序可以执行一个复位或返回到默认状态来从错误状态中恢复。

2.   溢出错误

当主设备已经发送了数据字节,而从设备还没有清除前一个数据字节产生的RXNE时,即为溢出错误。当产生溢出错误时:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值