SPI通信协议详细介绍

SPI通信详细介绍

SPI简要概述

SPI通信英文全称(Serial Peripheral Interface)串行外设接口,从其名称中可以看出,其通信方式为串行通信,其主要应用于MCU与外设之间的通信。此外,由于其通信速率较快(由SPI的SCK管脚定义),稳定可靠渐渐发展为主流的通信方式。

SPI信号定义

SPI通信一般为四根信号,分为SCK(Serial Clock)串行时钟CS(Chip Select)片选MOSI(Master Output Slave Input)主发从收及MISO(Master Input Slave Output)从发主收从信号定义可以看出其拥有系统时钟,通讯方式为同步通讯。还可以看出其收发模式可以分为主发和从发两种,由于其收发信号线为两根,因此主机在进行发送的同时,从机也可以将数据发送给主机。因此,其为全双工通信。综上所述,我们可以了解到SPI通信是一种同步、全双工、串行的一种通讯方式。

SPI分为主设备和从设备之分,但在同一个时刻,只能有一个主设备,但可以有多个从设备。主设备通过控制不同的片选引脚进而与某一个从设备建立通信。因此按照主设备与从设备的数量可以分为一对一一对多之分。

  • 一对一
    在这里插入图片描述
  • 一对多
    在这里插入图片描述

SPI通信时序

  1. 拉低(拉高)片选脚,选中从设备,告诉从设备预建立通信(高有效/低有效由芯片决定)
  2. 主设备发送CLK信号,主从设备按照规定的CLK频率进行通信(在idle状态下的CLK初始极性(H/L)可以划分为不同的模式)
  3. 主设备通过MOSI引脚发送数据到从机,其中高位先发,低位后发。SPI规定,每8/16位为一组,即(即每次最多可以传输两个字节),可以传输多次(即连续发送)
  4. 从设备通过MISO引脚发送数据到主机,同MOSI引脚功能类似

在这里插入图片描述

SPI模式

其中,将片选之前CLK的初始相位开始采样的时间可以划分为四种模式

CPOLClock Polarity 信号极性,即在片选之前(CLK空闲状态),CLK的初始相位为高(bit = 1)或低(bit = 0)

CPHAClock Phase 信号相位,定义了信号的采集时间。CPHA=0,表示在SCK的第一个跳变沿(上升沿/下降沿)进行数据采样,在第一个跳变沿进行数据传输。CPHA=1,表示在SCK的第二个跳变沿(上升沿/下降沿)进行数据采样,在第一个跳变沿进行数据传输。

即信号采样时处于一个信号周期的Leading时刻(bit = 0)还是Trailing时刻(bit = 1)

  • Tip:芯片具体支持/使用的哪种SPI通讯模式由芯片本身决定(具体看芯片手册的SPI时序图)

具体可以表示为:

SPI_ModeCPOLCPHA空闲时SCK状态采样时刻
000低电平CLK的第一个跳变沿
101低电平CLK的第二个跳变沿
210高电平CLK的第一个跳变沿
311高电平CLK的第二个跳变沿
  • 下面分别给出四种通讯模式下的SPI时序图(以CS低有效,一次发送8Bit的数据为例子)

Mode0:CPOL=0,CPHA=0

在这里插入图片描述

Mode1:CPOL=0,CPHA=1

在这里插入图片描述

Mode2:CPOL=1,CPHA=0

在这里插入图片描述

Mode3:CPOL=1,CPHA=1

在这里插入图片描述

伪代码实现

在数据发送过程中,主设备通过MOSI线发送数据,从设备通过MISO线接收数据。数据的发送速率由CLK信号的频率决定。SPI协议支持全双工通信,即在主设备发送数据的同时,也可以接收从设备的数据。

在代码实现过程中,首先需要配置SPI的工作模式,然后在主设备上设置CS信号为低电平(假设低有效),使从设备被选中。然后,主设备通过MOSI线发送数据,从设备通过MISO线接收数据。数据发送完毕后,主设备将CS信号设置为高电平,结束数据传输。

以下是SPI通信的伪代码:

// 配置SPI为Mode0
SPI_Config(Mode0);
// 设置CS信号为低电平
CS = 0;
// 通过MOSI线发送数据
SPI_Send(data);
// 通过MISO线接收数据
data = SPI_Receive();
// 设置CS信号为高电平
CS = 1;
  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值