作者 | 糊涂振
出品 | 汽车电子与软件
SPI是一种多主控或主从、四线、全双工同步串行通信协议,这意味着可以同时发送和接收数据。SPI是 Motorola 开发的一种用于同步串行通信的协议,它允许两个或多个设备之间进行全双工通信,这些设备可以指定为主设备或从设备。尽管 SPI链路中可以有多个主设备和从设备,但有多个主设备的情况并不常见。
SPI协议由摩托罗拉于 1970 年代后期开发,作为微控制器和外围设备之间的通信方式。SPI最初是在Motorola 6800微处理器中引入的,作为处理器和外部设备之间的通信方式。
在1990年代初期,SPI协议由联合电子设备工程委员会(JEDEC)标准化,该委员会是一个为电子设备设计和制造制定标准的行业组织。该协议的标准化有助于提高其采用率,并使其成为电子行业广泛使用的通信协议。
如今,SPI协议已广泛用于各种应用,包括工业控制、消费电子和汽车系统。由于其简单性和效率,它是微控制器和外围设备之间通信的热门选择。
SPI允许设备在短距离内相互通信,它具备以下一些重要特性,包括:
主从架构:在SPI中,一个设备充当主设备并启动通信,而另一个设备充当从设备并响应主设备的请求。
多个主设备:在MSP的帮助下,SPI还可以用作多主设备模式,方法是使用单独的CS线每个从设备。
多个从设备:SPI 支持与同一总线上的多个从设备通信。每个从设备都使用单独的片选 (CS)线进行选择。
全双工通信: SPI允许全双工通信,这意味着可以同时发送和接收数据。
同步通信:SPI是一种同步协议,这意味着主设备和从设备必须与公共时钟信号同步。时钟信号由主设备产生,用于同步数据的发送和接收。
可变的传输数据长度:SPI支持可变长度的数据传输,每次传输范围为4-16位。
可配置时钟频率:SPI的时钟频率可以根据系统的要求配置为不同的值。
简单的硬件要求:SPI的实现相对简单,因为它只需要几条硬件线路(时钟、数据输入、数据输出和片选)进行通信。
低功耗:由于SPI使用同步通信协议,因此它可以在较低的时钟频率下运行,从而降低功耗。
有限距离:SPI用于短距离通信,通常用于单个印刷电路板 (PCB)内或小型设备内的 PCB之间的通信。
#02
SPI总线是一种通信接口,它使用SPI协议在设备之间传输数据,它由一个主设备和一个或多个从设备组成,这些设备使用四根电线连接在一起,如下所示:
MOSI (主输出从输入)。
MISO (主输入从出)。
SCK (串行时钟)。
SS/CS/CE (从选/片选/片式启用)。
1)SPI协议中的 MOSI
MOSI代表Master Out Slave In,MOSI线将数据从主设备传输到从设备。在SPI总线中,主设备控制通信,并通过将SS线路拉低来选择要通信的从设备。然后,主设备可以使用MOSI线向从设备发送数据,并使用MISO线从从设备接收数据。
MOSI线用于将数据从主设备传输到从设备。从设备接收 MOSI线路上的数据,并根据主设备发送的命令和数据进行处理。MOSI线是 SPI 通信协议的重要组成部分,因为它允许主设备向从设备发送数据并控制从设备的行为。
2)SPI协议中的 MISO
MISO代表Master In Slave Out,MISO 线将数据从从设备传输到主设备。在 SPI 总线中,主设备控制通信,并通过将 SS线路拉低来选择要通信的从设备。然后,主设备可以使用 MOSI线路向从设备发送数据,并使用MISO线路从从设备接收数据。
MISO 线用于将数据从从设备传输到主设备。主设备在 MISO 线上接收数据,并根据从设备发送的命令和数据进行处理。MISO 线路是 SPI 通信协议的重要组成部分,因为它允许从设备将数据发送回主设备并响应主设备的命令。
3)SPI协议中的SCK
SCK代表串行时钟,由主设备生成,当主设备在MOSI线上向从设备发送数据,从设备在 MISO线上接收数据时,数据传输使用SCK线进行同步,以确保在正确的时间接收和传输数据。
4)SPI协议中的CS / SS/CE
片选 (CS)线,也称为从选 (SS) 线或片式使能,用于选择特定的从设备与主设备通信。在SPI总线中,主设备控制通信,并通过将C 线拉低来选择要与之通信的从设备。
SPI 总线中的每个从设备都有自己的CS线,用于选择它与主设备通信。主设备可以通过依次选择每个从设备并通过MOSI和MISO线路发送或接收数据,从而与多个从设备通信,这样确保数据仅在主设备和选定的从设备之间传输。
SPI协议有几种不同类型的,它们由主设备和从设备之间数据传输的方式定义。以下是4种常见的SPI协议类型:
可以看出是根据时钟极性(CPOL)和时钟相位(CPHA)的组合定义了数据采样与输出的时序规则,这四种工作模式的详细说明如下:
模式 0:CPOL = 0,CPHA = 0。数据采样边沿为时钟信号的上升沿(从低电平跳变至高电平时采样数据),数据输出边沿为时钟信号的下降沿(从高电平跳变至低电平时输出数据)。这种模式适用于大多数标准SPI从设备,时钟空闲时为低电平。
模式 1:CPOL = 0,CPHA = 1。数据采样边沿为时钟信号的下降沿(从高电平跳变至低电平时采样数据),数据输出边沿为时钟信号的上升沿(从低电平跳变至高电平时输出数据),这种模式需在时钟有效前准备数据,适用于高速模式。
模式 2:CPOL = 1,CPHA = 0。数据采样边沿为时钟信号的上升沿(注意此时时钟空闲为高电平),数据输出边沿为时钟信号的上升沿,这种模式的输出与采样在同一时钟边沿,需严格满足建立时间(Setup Time)要求。
模式 3:CPOL = 1,CPHA = 1。数据采样边沿为时钟信号的下降沿(从高电平跳变至低电平时采样数据),数据输出边沿为时钟信号的下降沿,这种模式的时钟空闲为高电平,适用于某些特殊传感器接口。
Source: SPI - 串行外设接口 |PiCockpit的
#04
根据SPI主从架构特性,可以配置多种通讯架构,比如单主单从,单主多从和多主多从等架构,这里介绍汽车ECU最常见的两种通讯架构。
1)串行外设接口(SPI)协议中的单主单从架构
在SPI的单主单从接口中,只有一个主设备与一个从设备通信。主设备控制通信的定时和数据传输,而从设备仅响应主设备发送的命令和数据。
在此配置中,通信通常从主设备向从设备发送时钟信号开始。时钟信号同步两个设备之间的数据传输。主设备还会向从设备发送命令,指示它要执行的作。从设备接收来自主设备的命令,并使用适当的数据进行响应。然后,主设备读取数据,通信完成。
需要注意的是,SPI协议没有为正在传输的数据定义任何特定格式。因此,在两个设备之间传输的数据格式必须由主设备和从设备商定。
2)串行外设接口(SPI)中的单主多从架构
在SPI协议的单主多从接口中,有一个主设备与多个从设备通信。主设备控制通信的定时和数据传输,并选择在任何给定时间与哪个从设备通信。
在此配置中,主设备同时向所有从设备发送时钟信号。但是,在任何给定时间,只有一个从设备可以与主设备通信,其他从设备必须保持非活动状态。为了选择要通信的从设备,主设备使用CS信号。每个从设备都有一个单独的CS信号,用于启用或禁用主设备与该特定从设备之间的通信。主设备可以通过激活其相应的CS信号来选择要与之通信的从设备,同时停用其他从设备的CS信号。
一旦主设备选择了从设备,它就会向该设备发送一个命令,指示它要执行的作。从设备接收来自主设备的命令,并使用适当的数据进行响应。
与特定从设备的通信完成后,主设备可以停用其CS信号并激活另一个从设备的CS信号以与其通信。主设备可以以类似的方式与所有从设备通信,并根据需要在它们之间切换。
需要注意的是,在 SPI 的单主多从架构中,所有从设备共享相同的时钟信号和数据线。因此,确保所有从设备和主设备之间的时间和数据格式兼容非常重要。
#05
首先要SPI协议的硬件基础,需要有支持SPI协议的微控制器或主设备,一个或多个支持SPI协议的外围设备,即通信中的从属设备,以及用于连接主从设备的四根线:MOSI(主输出从输入)、MISO(主输入从输出)、SCK(串行时钟)和 SS(从设备选择)。
然后开始通信,具体通讯过程如下所述:
1)初始化 (步骤 1):主设备通过设置必要的配置参数来初始化SPI通信,例如时钟频率、数据顺序(MSB或LSB优先)以及时钟极性(CPOL)和相位(CPHA)。SPI协议还允许各种配置选项,但注意必须以相同的方式为主设备和从设备设置这些选项,以确保按照上述配置阶段的描述进行正确通信。
2)从属选择(步骤 2):主设备通过将相应的从设备选择 (SS) 线路设置为低电平来选择要与之通信的从设备。
3)数据传输(步骤 3):主设备通过移出 MOSI线的数据,同时从 MISO线移入数据,将数据发送到从设备。主设备生成的时钟信号决定了数据传输的时间,从设备在 MOSI 线路上接收数据,并在 MISO 线路上发回其响应。
数据以二进制格式传输,每个位从最高有效位开始按顺序发送。传输的位数通常是可配置的,范围从4位到16位或32位。
4)从属选择 (步骤 4):数据传输完成后,主设备通过将SS线设置回高电平来取消选择从设备。
数据交换完成后,主设备将停用CS信号,向从设备指示通信已结束。主设备可以重复步骤 2-4与同一SPI总线上的其他从设备通信。
#06
使用SPI协议在微控制器和外围设备之间进行通信有几个优点:
单纯:SPI协议相对简单且易于实现,这使其成为许多应用的有吸引力的选择。
效率:SPI协议是一种全双工协议,这意味着可以同时发送和接收数据。这使其成为在设备之间传输数据的有效协议。
多面性:SPI协议可用于各种设备,包括传感器、显示器和存储设备。微控制器和其他电子元件也广泛支持它。
高速:SPI协议可以高速运行,使其适用于需要快速数据传输的应用。
低成本:SPI协议只需要四根电线进行通信,这使其成为许多应用的经济型解决方案。
凭借SPI协议这些优点,使得SPI协议成为了一种简单、高效且用途广泛的通信协议,因此SPI被广泛用于各种应用于以下领域,包括:
工业控制:SPI 用于各种工业控制应用,例如工厂自动化和过程控制。
消费电子产品:SPI 用于许多消费电子产品,例如智能手机、平板电脑和笔记本电脑,用于与传感器、显示器和存储设备进行通信。
汽车系统:SPI 用于各种汽车应用,包括发动机控制、信息娱乐系统和高级驾驶员辅助系统 (ADAS)。
医疗设备:SPI 用于医疗设备,例如心率监测器和血糖仪,以与传感器和其他外围设备进行通信。
物联网 (IoT) 设备:SPI 用于许多物联网设备,例如智能家居设备和可穿戴技术,以与传感器和其他外围设备进行通信。
数据存储: SPI 用于数据存储设备,例如固态驱动器 (SSD),以与主设备设备通信。
尽管SPI协议有这么多优点,应用也这么广泛,但它也有一些缺点,可能使其不太适合某些应用,比如:
设备数量有限,SPI协议仅限于单个主设备和最多四个从设备之间的通信,对于需要与大量设备通信的应用程序,这可能不够。
多主设备系统的复杂性:如果一个系统需要多个主设备,则 SPI 协议可能会变得复杂且更难实现。
限制距离:SPI 协议不是为长距离通信而设计的,因为用于通信的电线长度有限。
有限的数据传输:SPI 协议仅限于一次传输一个字节的数据,这对于某些需要传输大量数据的应用程序来说可能不够。
安全问题:SPI 协议没有内置的安全功能,这对于需要安全通信的应用程序来说可能是一个问题。
尽管SPI协议存在一些限制和缺点,但其简单性和高效性使其成为嵌入式系统和微控制器应用中不可或缺的通信方式。通过合理的硬件设计和软件优化,可以克服SPI协议的缺点,充分发挥其优势,满足各种应用场景的需求。