概述
SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信协议,用于在MCU和外部设备之间进行数据交换。SPI是一种非常常见的通信协议 ,广泛应用于各种嵌入式系统和电子设备中。
SPI通信通常由一个主设备和一个或多个从设备(外部设备)组成。主设备负责控制通信的时间和数据传输,从设备根据主设备的指令进行响应。
SPI通信需要使用多跟单信号线,包括时钟信号线(SCK)、主输出从输入信号线(MOSI,Master output Slave input)、主输入从输出信号线(MISO,Master input Slave output)以及片选信号(SS)。
通信原理
SPI通过时钟信号的边沿读取或写入数据。主设备在时钟信号的上升沿或下降沿发送数据到MOSI端,同时在MISO端根据相同的规则接收来自从设备的数据。
发送数据
假设现在主设备要存储信息到存储器(从设备)中,有以下几个步骤:
-
建立通信:根据从设备数据手册,清楚从设备的SS是高电平有效还是低电平有效,主设备通过片选信号发送相应的电平与从设备建立通信。
-
发送数据:根据从设备数据手册,清楚从设备的读/写数据指令,包括起始位、操作码、存储地址、数据,主机采用相应的规则发送数据。
当空闲时钟为低/高电平,在时钟信号的上升/下降沿,数据信号才会被采样。这样一来就有四种采集方式,具体使用哪一种,需要查看芯片的数据手册。
以SS高电平有效,空闲时钟为低电平,在时钟信号的上升沿采集数据信号为例:
在时钟信号上升沿这一刻,数据信号如果是逻辑“1”,那么采集到的信号就是逻辑“1”;如果是逻辑“0”,那么采集到的信号就是逻辑“0”,有几个上升沿就会传输多少个数据。
数据线和时钟线配合发送数据。
接收数据
假设现在主设备要接收存储器(从设备)中的信息,有以下几个步骤:
-
建立通信:根据从设备数据手册,清楚从设备的SS是高电平有效还是低电平有效,主设备通过片选信号发送相应的电平与从设备建立通信。
-
主设备给从设备发送数据,包括起始位、操作码、(想要接收的数据)存储地址。
-
从设备发送数据。
需要注意的是,主设备即使只接收不发送数据,它也得继续给从设备提供时钟信号。
特点
-
简单。
-
高速:SPI通信速率相对较快,可以达到主设备和从设备之间的最高时钟频率。
-
全双工:主设备与从设备可以同时进行数据传输。
-
低成本:SPI通信只需要少量的引脚和硬件资源。
-
多种通信模式:SPI可以支持一主一从的通信模式,也可以实现一主多从通信模式。