文章目录

  • 前言
  • 一、SPI介绍
  • 1.SPI总线
  • 2.寻址方式
  • 二、通信原理
  • 1.通信过程
  • 2.极性和相位
  • 3.四种工作模式
  • 三、SPI与I2C的异同
  • 1.相同点
  • 2.不同点
  • 总结



前言

spi协议和I2C协议是非常类似的,两种硬件接口协议在芯片是被广泛使用的,上篇博文详细介绍了I2C协议,这次来介绍一下spi协议。

一、SPI介绍

1.SPI总线

SPI(Serial PEripheral Interface)是串行外设接口的缩写,SPI是一种高速的、全双工的、同步的串行通信总线:SPI采用主从方式工作、一般有一个主设备或多个从设备:SPI需要至少四根线(但从机较多时则需要增加接口),分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选)。SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议。下图为主从设备的连接示意图。

spi协议和python spi协议详解_物联网

2.寻址方式

当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或低电平)表示选中该从设备,这样通信才能开始,下图为有两个从机时的主从设备连接图。

spi协议和python spi协议详解_java_02

二、通信原理

1.通信过程

SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑“1”,低电平表示逻辑“0”,一个字符传送完成后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。下图为传送数据时的详细高低电平图。

spi协议和python spi协议详解_java_03

2.极性和相位

I2C通信时,在空闲状态下,时钟线和数据线都是处于高电平之下,但SPI通信不一样,它得起始电位是由它的极性和相位来控制的,下面我们就来介绍一下这两个东西。

SPI总线有四种不同的工作模式,取决于极性(CPOL)0和相位这两个因素

CPIL表示SCLK空闲时的状态
CPOL=0,空闲时SCLK为低电平
CPOL=1,空闲时SCLK为高电平

CPHA表示采样时间
CPHA=-0,每个周期的第一个时钟沿采样
CPHA=1,每个周期的第二个时钟沿采样

3.四种工作模式

CPOL=0, CPHA=0

spi协议和python spi协议详解_java_04

CPOL=0, CPHA=1

spi协议和python spi协议详解_spi协议和python_05


CPOL=1, CPHA=0

spi协议和python spi协议详解_java_06


CPOL=1, CPHA=1

spi协议和python spi协议详解_spi协议和python_07

三、SPI与I2C的异同

1.相同点

①均采用串行、同步的方式
②均采用TTL电平,传输距离和应用距离和应用场景类似
③均采用主从方式工作

2.不同点

①I2C采用半双工,SPI采用全双工
②I2C有应答机制,SPI无应答机制
③I2C通过总线广播从机地址来寻址,SPI通过向对应从机器从机发送使能信号来寻址
④I2C的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调

总结

对于SPI协议,我们还时需要掌握的,这样我们在做一些项目时能变得得心应手。