广告

一篇易懂的SPI通讯指南

2023-07-19 汽车电子与软件 阅读:
本文以比较浅显易懂的方式介绍了SPI的基本内容。

0mDednc

作者:糊涂振0mDednc

出品:汽车电子与软件0mDednc

010mDednc

SPI概念0mDednc

SPI(Serial Peripheral interface, 串行外设接口)是微处理控制单元(MCU)和外围IC(如传感器、ADC、DAC、驱动芯片和外部存储设备等)之间进行通信的同步串行端口,其通信速率一般可以从几千bps到几百Mbps甚至更高, 具体的SPI通信速率取决于主设备和从设备的规格和性能,以及他们之间的协商和支持能力。0mDednc

Source:An Introduction to SPI Communications Protocol0mDednc

SPI是一种全双工,同步,主从式接口,涉及两个主要角色:主设备(Master)和从设备(Slave)。SPI接口可以是3线式或4线式,这里重点介绍常用的4线SPI接口。4线SPI接口有四个信号:时钟信号(SCLK),片选信号(SS/CS),主设备输出从设备输入信号(MOSI)和主设备输入从设备输出信号(MISO),如下所示:0mDednc

Source: SPI Protocol - Serial Peripheral Interface - javatpoint0mDednc

其中,0mDednc

  • SCLK(Serial Clock):时钟信号线,由主设备提供,用于同步数据传输。0mDednc

  • MOSI(Master Out, Slave In):主设备输出,从设备输入,用于主设备向从设备发送数据。0mDednc

  • MISO(Master In, Slave Out):主设备输入,从设备输出,用于从设备向主设备发送数据。0mDednc

  • SS(Slave Select):从设备选择信号线,由主设备控制,用于选择要与主设备通信的从设备。0mDednc

020mDednc

SPI原理0mDednc

利用四线SPI接口可以构建不同SPI模式(拓扑方式),比如单主单从,单主多从和菊花链等模式,接下来就结合不同SPI模式来分别介绍SPI工作原理。0mDednc

1)单主单从模式0mDednc

单主单从模式,即主设备的SCLK、MOSI和MISO连接到从设备的相应引脚。从设备与主设备之间只有一组SCLK、MOSI和MISO线连接,如下所示:0mDednc

Source: Basics of the SPI Communication Protocol (circuitbasics.com)0mDednc

其基本原理是:0mDednc

首先是时钟同步,主设备产生SCLK,控制数据传输的时序。时钟信号由主设备提供,并在主设备和从设备之间同步传输。0mDednc

0mDednc

Source: Basics of the SPI Communication Protocol0mDednc

然后是片选信号,主设备将SS/CS引脚切换到低电压状态,从而激活了从设备。0mDednc

0mDednc

Source: Basics of the SPI Communication Protocol0mDednc

最后是数据传输过程,主设备通过MOSI线向从设备发送数据。从设备接收到数据后,将其通过MISO线传输给主设备。主设备和从设备之间的数据传输是同时进行的。0mDednc

0mDednc

Source: Introduction to SPI Interface | Analog Devices0mDednc

2)单主多从模式0mDednc

单主多从模式,即主设备的SCLK和MOSI连接到每个从设备的相应引脚,从设备的MISO连接到主设备的MISO引脚,每个从设备有独立的SS引脚与主设备连接,主设备通过选择SS来选择要与之通信的从设备。0mDednc

0mDednc

Source: Basics of the SPI Communication Protocol0mDednc

其基本原理与单主单从模式的几乎相同,唯一区别是当某个从设备的SS处于低电平时,该从设备与主设备进行通信,其他从设备的SS处于高电平状态。0mDednc

3)菊花链模式0mDednc

菊花链模式,即主设备的MOSI和SCLK连接到第一个从设备的MOSI和SCLK。从第一个从设备的MISO连接到第二个从设备的MOSI,以此类推,直到最后一个从设备的MISO。0mDednc

0mDednc

Source: Basics of the SPI Communication Protocol0mDednc

其工作原理是:0mDednc

首先,主设备提供SCLK,控制数据传输的时序。时钟信号由主设备产生,并在整个菊花链中进行传递,从设备根据时钟信号的边沿进行数据的传输和接收。0mDednc

然后,主设备通过MOSI线将数据发送到第一个从设备,第一个从设备接收到数据后,将其通过MISO线传输给第二个从设备,这样,数据从一个从设备级联传输到下一个从设备,直到传输到最后一个从设备。0mDednc

每个从设备都需要有一个独立的SS,主设备通过控制相应的SS选择要与之通信的从设备,只有被选中的从设备才会响应主设备的数据传输。0mDednc

在菊花链模式下,当数据从一个从设备传播到下一个从设备时,传输数据所需的时钟周期数量与从设备在菊花链中的位置成正比。在一个8位系统中,第3个从设备上的数据需要24个时钟脉冲,而在常规的SPI模式中只需要8个时钟脉冲,下图显示了通过菊花链传播的时钟周期和数据。0mDednc

0mDednc

Source: Introduction to SPI Interface | Analog Devices0mDednc

030mDednc

SPI核心思想0mDednc

SPI的核心思想是,每个设备都有一个移位寄存器,它可以用来发送或接收一个字节的数据。这两个移位寄存器以环形方式连接在一起,一个寄存器的输出到另一个寄存器的输入,反之亦然。主设备控制共同的时钟信号,确保每个寄存器在另一个寄存器移出一个比特时,正好移入一个比特。0mDednc

0mDednc

Source: What Could Go Wrong: SPI | Hackaday0mDednc

040mDednc

SPI数据传输0mDednc

4.1采样和移位0mDednc

根据上面内容可知SPI通信,主设备必须发送SCLK信号,并通过使能SS信号(低电平)选择从设备。然后主设备和从设备可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上,即移位)和接收(采样或读入总线(MISO/SDI)上的数据,即采样)同时进行。0mDednc

> Sample(采样)0mDednc

采样是指主设备或从设备在时钟的上升沿或下降沿时读取数据位的操作。采样的目的是在合适的时机获取正确的数据位,以确保数据的准确传输。0mDednc

> Shift(移位)0mDednc

移位是指数据位从发送器移动到接收器的过程,以实现数据的传输。移位是SPI通信中的关键步骤之一,确保数据的逐位传输和同步。0mDednc

4.2时钟极性和时钟相位0mDednc

具体何时进行采样和移位操作,可以通过设置时钟极性和时钟相位来实现。0mDednc

> 时钟极性(Clock Polarity,CPOL)0mDednc

在空闲状态期间,CPOL位设置时钟信号的极性。0mDednc

CPOL = 1:表示空闲时是高电平;0mDednc

CPOL = 0:表示空闲时是低电平。0mDednc

空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间,如下所示:0mDednc

> 时钟相位(Clock Phase,CPHA)0mDednc

CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。0mDednc

CPHA = 0:表示从第一个跳变沿开始采样;0mDednc

CPHA = 1:表示从第二个跳变沿开始采样。0mDednc

主设备必须根据从设备的要求选择时钟极性和时钟相位,根据上述CPOL和CPHA位的选择,有四种SPI模式可用,如下所示:0mDednc

SPI模式0mDednc

CPOL0mDednc

CPHA0mDednc

空闲状态0mDednc

采样,移位0mDednc

0

00mDednc

00mDednc

低电平0mDednc

采样上升沿,移位下降沿0mDednc

10mDednc

00mDednc

10mDednc

低电平0mDednc

采样下降沿,移位上升沿0mDednc

20mDednc

10mDednc

00mDednc

高电平0mDednc

采样下降沿,移位上升沿0mDednc

30mDednc

10mDednc

10mDednc

高电平0mDednc

采样上升沿,移位下降沿0mDednc

0mDednc

对应到数据位,以CPOL = 0,CPHA = 0为例,绿色虚线表示片选使能,橙色虚线表示采样,蓝色虚线表示移位,如下所示:0mDednc

0mDednc

Source: Introduction to SPI Interface | Analog Devices0mDednc

4.3传输位序0mDednc

先发送高bit(MSB),还是先发送低bit(LSB)。如下图所示,若采用MSB first,那么MOSI发送的数据为01000011, 即0x43。0mDednc

0mDednc

Source: Basics of the SPI Communication Protocol0mDednc

若采用LSB first,那么MISO接收到0x43后,发送形式如下所示:0mDednc

0mDednc

 Source: Basics of the SPI Communication Protocol0mDednc

4.4 数据长度0mDednc

注意上面的各图演示的都是传输8位数据,实际上SPI可以根据设备所支持的情况传输不同位数的数据,比如Aurix TC2xx系列最高支持32位数据传输。0mDednc

0mDednc

总的来说,SPI数据传输取决于具体配置,选取哪种模式,何时采样,数据有多少位,是MSB还是LSB first,当然除此之外,实际实现这个功能还需要考虑更多因素。0mDednc

050mDednc

总结0mDednc

到此本文就以比较浅显易懂的方式介绍了SPI的基本内容,即通过四根信号线(SCLK, SS, MISO, MOSI),结合移位寄存器,实现主从设备间的数据传输;关于数据传输如何配置,要要设置时钟极性,时钟相位等参数。对于有需要深入研究这个主题的朋友,可参考以下内容:0mDednc

[1] MCAL_斯蒂芬杜的博客-CSDN博客0mDednc

[2] [Note][Aurix2G_TC397_MCAL]SPI 相关配置 - Yiyang_Cai - 博客园 (cnblogs.com)0mDednc

[3] AUTOSAR MCAL SPI配置_可力岼的博客-CSDN博客0mDednc

责编:Ricardo
文章来源及版权属于汽车电子与软件,EDN电子技术设计仅作转载分享,对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。如有疑问,请联系Demi.xia@aspencore.com
汽车电子与软件
汽车电子与软件
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
广告
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了