SPI 通信协议 最详细解读!!!

SPI(Serial Peripheral Interface,串行外围接口)是一种高速、全双工、同步的通信总线,主要应用在EEPROM、FLASH、实时时钟、AD转换器上,以及数字信号处理器和数字信号解码器之间。

信号线

SPI有四根信号线:

  • MOSI:Master Output Slave Input,主机向信号线上输出数据,从机读取。

  • MISO:Master Input Slave Output,从机向信号线上输出数据,主机读取。

  • SCLK:Serial Clock,串行时钟信号。由主机产生并发送给从机。

  • SS/CS:Slave Select,片选信号。通常是低电平有效,由主机输出,在主设备连接多个从设备时用来控制与哪个从设备通信。

如果主机连接多个从设备时,则每个从设备上都需要有一个片选引脚接入到主设备机中,当我们的主设备希望和某个从设备通信时,需要将对应从设备的片选引脚电平拉低。同时,SPI协议还规定时钟信号必须由主机提供给从机,从机自身不能产生和控制时钟信号,没有时钟信号同步从机不能正常工作。

SPI 通信协议 最详细解读!!!_第1张图片

传输方式

SPI总线上的主机必须在通信开始时候配置并生成相应的时钟信号,然后再进行数据传输。主机向MOSI信号线传送数据给从机,同时,从机也必须将一些内容通过MISO信号线返回给主机,也就是说,每隔时钟周期内,都在发生全双工数据通信。时钟信号的作用就是保证两个设备之间的传输始终是同步的。

即使只进行单向数据传输,也要保证主机和从机时刻都有数据交换,两者必须要互相发送一些东西,接收方只需要忽略即可。这种情况我们称为虚拟数据。

时钟配置

SPI协议需要对时钟进行配置,一般配置下面三个参数:

  • 时钟频率:理论上讲,时钟频率可以任何想要的速率,实际上会受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。

时钟极性:Clock Polarity,CPOL,表示SPI总线的极性。CPOL = 0,表示时钟空闲时是低电平;CPOL = 1,表示时钟空闲时是高电平。

SPI 通信协议 最详细解读!!!_第2张图片

时钟相位:Clock Phase,CPHA,表示SPI总线的相位。一个时钟周期会有2个跳变沿,SPHA决定了接收端在时钟信号的哪一个跳变沿对接收数据进行采样。CPHA = 0,表示从第一个跳变沿开始采样;CPHA = 1:表示从第二个跳变沿开始采样。

SPI 通信协议 最详细解读!!!_第3张图片

CPOL和CPHA可以组合出四种工作模式,可以根据不同器件的支持情况和自己的需求进行选择和配置。

举例

SPI 通信协议 最详细解读!!!_第4张图片
SPI 通信协议 最详细解读!!!_第5张图片

优缺点

SPI的优点:

  1. 支持全双工通信,独立的MISO、MOSI可以同时发送和接收数据。

  1. 通信简单。

  1. 数据传输速率快,比I2C快几乎两倍。

  1. 无起始位和停止位,因此数据可以持续传输不会中断。

SPI的缺点:

  1. 没有指定的流控制,没有应答机制确认是否接收到数据,与I2C相比在数据可靠性上有一定的缺陷。

  1. 使用四根线,I2C、UART只使用两根线。

  1. 没有任何形式的错误检查,UART有奇偶校验位。

I2C和SPI异同点

相同点

  • 串行、同步

  • 采用TTL电平,传输距离近

  • 采用主从方式(I2C一个或多个主机和一个或多个从机;SPI一个主机和一个或多个从机)

不同点

  • I2C半双工;SPI全双工

  • I2C有应答机制;SPI无应答机制

  • I2C通过向总线广播从机地址来寻址(节省硬件资源);SPI通过向对应从机发送使能信号来寻址(寻址速度快)

  • I2C时钟极性和时钟相位固定;SPI时钟极性和时钟相位不固定(主从一致)

你可能感兴趣的:(通信协议,单片机,嵌入式硬件,linux,windows,risc-v)