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

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

    时钟配置

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

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

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

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

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

    举例

    优缺点

    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时钟极性和时钟相位不固定(主从一致)

  • 物联沃分享整理
    物联沃-IOTWORD物联网 » 最详细解读SPI通信协议

    发表评论