单片机通信协议——SPI协议

1.  SPI协议介绍

SPI(Serial Peripheral Interface)协议,顾名思义,就是外围设备接口。是Motorola公司1979年推出的一种高速全双工同步串行通信协议,他在芯片上只占有四根线,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

2.  SPI主从模式

SPI通信原理很简单,它以主从方式工作,这种工作方式通常有一个主设备和多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

3.  SPI信号线

SPI四根信号线分别为:

主输入/从输出(MISO,Master Input Slave Output)/SDI(Slave Data Input)

该引脚在从模式下发送数据,在主模式下接收数据

主输出/从输入(MOSI,Master Output Slave Input)/SDO(Serial Data Output)

该引脚在主模式下发送数据,在从模式下接收数据

同步时钟(SCLK,Synchronous Clock)

串行时钟信号,由主设备产生。

设备片选信号(CS,Chip Select)

由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

SPI协议只能有一个主设备,这意味着只有一个主设备能够发起通信。当主设备想对从设备进行读/写时,它首先拉低从设备对应的CS线(CS线低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现“写”,同时可以对MISO采样实现“读”。

4. SPI的四种工作模式

主从设备必须采用相同的工作模式,才能正常工作。如果有多个从设备且他们的工作模式并不相同那么在通信之前主设备应该修改成和从设备一样的工作模式在进行通信。

CPOL(Clock Polarity,时钟的极性):规约SPI总线在空闲时,时钟信号是高电平还是低电平;

CPHA(Clock Phase,时钟的相位):规约SPI设备在时钟上升沿还是下降沿触发数据采样;

根据时钟极性和时钟相位的不同,SPI协议一共有四种工作模式:

模式0:CPOL=0,CPHA=0;SCK串行时钟线空闲时是低电平,数据在SCK时钟上升沿被采样,在时钟下降沿切换;

模式1:CPOL=1,CPHA=0;SCK串行时钟线空闲时是低电平,数据在SCK时钟下降沿被采样,在时钟上升沿切换;

模式2:CPOL=1,CPHA=0;SCK串行时钟空闲是高电平,数据在SCK时钟下降沿被采样,在上升沿切换;

模式3:CPOL=1,CPHA=1,SCK串行时钟线空闲是高电平,数据在SCK时钟的上升沿采样,在下降沿切换;

其中较为常用的是模式0和模式3,上图实例的就是模式3,我们可以清晰的看出在模式3下总线空闲时,串行时钟线SCL为高电平,当SS被主机拉低后,数据传输开始,数据线MOSI和MISO的数据切换发生再时钟的下降沿,数据的采样发生在时钟的上升沿。

5. SPI数据交换

一个从设备要想能够接收到主设备发过来的控制信号,必须在此之前能够被主设备访问。所以主设备通过拉低CS/SS管脚对从设备进行片选,选择想要通信的从设备。

SPI设备间的数据传输之所以又被叫做数据交换是因为SPI协议规定一个SPI设备不能再数据通信过程中仅仅充当一个“发送者”或者“接收者”。SPI设备在通信时两边各有一个移位寄存器,这样在发送一个bit数据的同时也会接收到一个bit的数据,当发送完8bit数据的时候也接收到了8bit数据,这也就意味着完成了1byte的数据交换。

6. SPI的三种模式

SPI协议工作在三种模式下,分别是运行模式、等待模式和停止模式。

运行模式(Run Mode):基本的操作模式;

等待模式(Wait Mode):SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。 停止模式(Stop Mode):为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步。

7.  SPI数据交换流程

1.首先拉低对应的SS信号线,表示与该设备进行通信;

2.主机通过发送SCLK串行时钟信号来告诉从机写/读数据;

3.主机将要发送的数据写入发送数据缓存区,缓存区通过移位寄存器(0~7),串行移位寄存器通过MOSI信号将数据一位一位的移出去传送给主机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区;

4.从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。同时接收MOSI信号线接收主机发送过来的数据,这样实现交换

SPI只有主模式和读模式,没有读和写的说法,数据的发送与接收必须是同步进行的。如果想要写操作,那么主机只需要忽略读进来的数据;如果想要进行读操作,只需要发给从机一个空字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值