通信协议之spi

5.1 简介

SPI(Serial Peripheral Interface)是 Motorola公司于1979年推出的一种高速全双工同步串行通信协议,它由一个主设备(Master)和一个或多个从设备(Slave)组成,主设备启动与从设备的同步通信,从而完成数据的交换。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,一般需要4根线,事实上3根也可以。这四根线分别是MISO(Master Input Slave Output)/SDl(Serial Data lnput)、MOSI(Master Output Slave Input)/SDO(Serial Data Output)、SCLK(Synchronous Clock)、CS(Chip Select)。

MISO:主设备数据输入,从设备数据输出;
MOSl:主设备数据输出,从设备数据输入;
SCLK:同步时钟信号,由主设备产生;
CS:从设备使能信号,由主设备控制。当总线上有多个从设备的时候,主设备如果需要和某个从设备通信,就将该设备对应的片选引脚拉低使能;

SPI在芯片上只占用四个管脚来实现数据传输及控制,这样为PCB设计在布局上节省了空间,正是出于这种简单易用的特性,现在越来越多的芯片上都集成了SPI接口,主要应用在 Flash、通信模块(NFC、以太网、LoRa)、数模转换器(ADC)等通信领域。
由于SPI采用两根数据线实现全双工的数据通信,从而能达到比 I2C更快的通信速率。I2C协议v2.1规定了100K,400K和3.4M三种速率(bps)。而SPI是一种事实标准,并没有一个官方标准,已知已有的器件SPI速率可达到50Mbps,具体到产品中SPI的速率主要看主从器件SPI控制器的性能限制。此外,SPI没有相应的流控和应答机制,这样跟I2C协议相比在数据可靠性上有一定的缺陷。

5.2 SPI总线传输模式

Master设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse),时钟脉冲组成了时钟信号(Clock Signal),时钟信号通过时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)控制着两个SPI设备间何时数据交换以及何时对接收到的数据进行采样,来保证数据在两个设备之间是同步传输的。
CPOL(Clock Polarity,时钟的极性):规约SPI总线在空闲时,时钟信号是高电平(1)还是低电平(0);
CPHA(Clock Phase,时钟的相位):规约SPI设备是在时钟信号上升沿还是下降沿触发数据采样;

根据时钟极性(CPOL)和时钟相位(CPHA)的不同配置,SPI 总线传输一共有4种模式。这四种模式的时序
如下图所示:
在这里插入图片描述
时钟极性为0时,时钟线空闲为低电平,为1时,时钟线空闲为高电平。
时钟相位和时钟极性都相同时(都为1或都为0),数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换。不同时,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换;
例如:
时钟极性和时钟相位都为0时
在这里插入图片描述

5.3 SPI总线数据交换

一个Slave设备要想能够接收到Master发过来的控制信号,必须在此之前能够被Master设备进行访问(Access),所以,Master设备必须首先通过拉低 ss/cs管脚对Slave 设备进行片选,把想要访问的Slave设备选上。
SPI设备间的数据传输之所以又被称为数据交换,是因为 SPI协议 规定一个SPI设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)”或者“接收者(Receiver)"。事实上SPI设备在通信时两边各有1个移位寄存器,这样在发送一个 bit的同时将会收到对方1个bit 的数据,当发送完 8bit 数据后,也将收到对方的 8bit数据,这也就意味着完成了1个byte的数据交换。
在这里插入图片描述

SPI数据传输过程实际上就是主从设备两个移位寄存器的数据交换过程,所以SPI的读功能实际上可以由SPI的写功能实现,即随便写一个字节的无效数据(Dummy Data)即可。在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致SPI物理模块最终失效。因此,在程序中一般都会在SPI传输完数据后,去读取SPI设备里的数据,即使这些数据(Dummy Data)在我们的程序里是无用的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值