深入理解SPI通信协议及其工作原理

一、SPI简介

本文详细介绍SPI的通信原理和特点,主要用途为学习。

SPI是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。

SPI是有主从机设备的,主机只允许有一个,从机可以有多个。

SPI通信时需要用到四根线,单向传输时需要用到三根线,即单工模式。它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)和CS/SS(片选)

  • MISO( Master Input Slave Output):主设备输入从设备输出信号引脚。
  • MOSI(Master Output Slave Input):主设备输出从设备输入信号引脚。
  • SCLK(Serial Clock):时钟信号,由主设备产生。
  • CS/SS(Chip Select/Slave Select):从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。
  • 以下为一个标准的SPI连接方式:

     此为一主多从的连接方式,连接方式知道了下面我们了解一下通信过程。

    二、SPI通信过程

    第一步,首先需要主机对片选信号端进行选择,通常是将CS/SS引脚拉低代表选择该从机进行通信,实际使用时需要阅读使用手册来确定是拉低还是拉高。

    第二步,选择好要通信的芯片后就需要对其发送时钟信号了,SPI有四种工作模式,分别如下:

    我们根据想要通信的芯片的数据手册配置对应的时钟信号,在对应的时钟信号上升或下降沿向其输入我们想要存入的数据即可。

    第三步,当我们的主机要向从机的缓冲区发送数据时,数据的长度可以是不固定的,数据将会跟随我们的时钟上升或下降沿一位一位的发出。

    以93C46为例(一个常见的额EEPROM芯片),以下为向其发送数据时的标准格式:

    比如我们要向其0X0000001(7位)地址位发送0X00001111(8位)数据时就需要对其发送如下数据。

     

     该芯片片选端为高电平有效,时钟线空闲默认为低电平,且为上升沿读取数据,那么在实际传输数据时MOSI引脚和SCK引脚的电平匹配如下。

     通过如上配置我们便将需要传输的数据发送到芯片的对应地址进行保存了。以上的通信过程仅为该芯片使用的通信配置,当使用其他芯片时需以芯片手册为准。

    第四步,了解完写入数据我们还需要了解一下读取数据,即从机发送数据给主机。

    还是以93C46为例,在主机读取其数据时也需要向其发送数据,数据内容如下。

    即我们需要将起始位、读写位、地址位给到从机,从机会将对应地址的数据通过MISO引脚传输过来,实际数据通信过程如下。

     

    这样就完成了一个8位地址的读取。

    三、SPI的优缺点

    优点
    无起始位和停止位,因此数据位可以连续传输而不会被中断(根据通信芯片的选择可能有所区别,但SPI通信本身没有硬性的起始位停止位规定);
    没有像I2C这样复杂的从设备寻址系统;
    数据传输速率比I2C更高(几乎快两倍);
    分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
    极其灵活的数据传输,不限于8位,它可以是任意大小的字;
    非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
    缺点
    使用四根信号线(I2C和UART使用两根信号线);
    无法确认是否已成功接收数据(I2C应答位拥有此功能);
    没有任何形式的错误检查,如UART中的奇偶校验位;
    只允许一个主设备;
    没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
    没有定义硬件级别的错误检查协议;
    与RS-232和CAN总线相比,只能支持非常短的距离;

    参考链接:

    一文搞懂SPI通信协议_spi协议_不脱发的程序猿的博客-CSDN博客深入理解SPi通讯协议,5分钟看懂!_哔哩哔哩_bilibili

    物联沃分享整理
    物联沃-IOTWORD物联网 » 深入理解SPI通信协议及其工作原理

    发表评论