SPI通信基础
微控制器与传感器、显示器或其他设备间的连接需要基于一定的规则进行。在既定的规则下控制器与其他终端设备间才能相互理解各自的需求并达到设计目的,这种规则就称作通信协议。
电子设备间的通信与人类间的沟通相似,通信双方采用同种信号并且这种信号具有既定的含义。在日常电子设备中,用得较多的主要有I2C通信协议,SPI通信协议和以UART驱动的通信。
SPI,I2C和UART要比USB通信,以太网,蓝牙和WIFI慢,但是前者使用更加简便,并且使用更少的硬件和系统资源。因此,SPI,I2C和UART是基于微控制器等系统资源较少,通信速率要求没那么高的应用场景的理想通信方式。
串行通信 VS 并行通信
电子设备间通过互相连接的线缆传输以比特为单位的数据,从而达到通信目的。1比特是非0即1的二进制数据,这些数据以传输线上的电平作为物理载体。以一个工作电压为5V的系统为例,比特0可以表达为通信线上的一个电平为0的短脉冲,而比特1则可以表达为通信线上的一个电平为5V的短脉冲,因此,设备间的通信显式来看即为两设备间传输线上的电平变化。
数据传输可以采用串行或者并行的方式进行。在并行通信中,一个包含多个数据位的数据帧通过多个数据引脚经由多根数据线向外传输,以传输字母"C"为例(ASCII:01000011)
在串行通信中,数据位通过单根数据线逐个进行传输,仍以字母"C"为例
![Introduction to SPI - Serial Transmission of one byte](https://i-blog.csdnimg.cn/blog_migrate/dcfa65e787a72632c6fa8a4a61f72f6d.png)
SPI通信介绍
SD卡、RFID读卡器与2.4GHz的无线通信收发器都是采用SPI与微控制器进行通信。
SPI通信的一大优势及时数据传输过程中不会被打断,数据的传输是连续的。而在I2C或UART通信方式中,数据采用数据包的方式进行传输,因此一次只能传输有限的数据位,由于起始位与停止位的引入,数据传输不再连续。
采用SPI进行通信的设备间多具有主从关系。主机控制外设,而从机则负责接收指令。最简单的基于SPI的通信系统为单主机单从机系统,如下所示
MOSI(Master Output/Slave Input):主机发送数据,从机接收数据的数据线
MISO(Master Input/Slave Output):主机接收数据,从机发送数据的数据线
SCLK(Clock):时钟信号线
SS/CS(Slave Select/Chip Select):从机片选信号线
总结来看,SPI通信的特点可概括为
通信线: | 4 |
传输速率: | 最高10 Mbps |
串行或并行: | 串行 |
同步或异步: | 同步 |
最大主机数目: | 1 |
最大从机数目: | 无限制 |
实际上,从机的数量受限于主机所能负载的电容的大小,从机数目增多将加大负载电容的大小,从而导致主机电平信号的切换速度下降。
SPI工作原理
时钟信号
时钟信号可以让主机所输出数据位与从机采样数据位同步。每个时钟周期传输一位数据,所以数据传输的速率取决于时钟信号的频率。一般情况下SPI通信由主机发起,并且时钟信号由主机发出。
共享时钟信号的通信即为同步通信,SPI是同步通信的一种,也存在许多其他异步通信的方式,比如UART通信没有时钟信号,收发两方依靠既定的波特率维持通信时序。
SPI的时钟信号可以通过修改时钟极性和时钟相位等属性进行调整。通过设置时钟属性可以精准地设定数据的输出时刻和输入时刻。时钟极性属性可以设定数据输出或输入是在时钟的上升沿或者是下降沿,而时钟相位属性则可以设定数据输入或者输出是在时钟周期的第一个边沿或者是第二个边沿。
从机选择
主机通过拉低片选信号线来选择此次通信的从机。在空闲状态时,片选信号线保持在高电平状态。一般情况下,多要与多个从机进行通信,则会需要多根片选线。若主机只有一根片选线,多从机则需要采用菊花链接法。
多从机
在SPI通信方式下单台主机可以与单台从机进行通信,也可以与多台从机进行通信。在需要与多台从机协作完成任务时,根据配置的不同可以有两种选择:
- 如果主机具有多根片选线,那么从机可以按照如下方式进行连接
- 如果主机只有一根片选信号线,那么从机可以采用菊花链式连接
MOSI与MISO
主机通过MOSI数据线将数据传送给从机,而从机也即通过MOSI传输线接收数据。一般情况下数据传输从最高位开始。
从机也可以通过MISO数据线将数据传送给主机,此时,数据传输一般从最低位开始。
SPI数据传输步骤
- 主机发出时钟信号
![Introduction to SPI - Data Transmission Diagram Clock Signal](https://i-blog.csdnimg.cn/blog_migrate/ee51f02ba352a1d4fa4b0b7926f32164.png)
- 主机将片选信号线拉低,选中从机
![Introduction to SPI - Data Transmission Diagram Slave Select Activation](https://i-blog.csdnimg.cn/blog_migrate/9ce9e44f733c8be5fb73a738db2c8829.png)
- 主机通过MOSI信号线将数据位发送给从机,从机读取数据
![Introduction to SPI - Data Transmission Diagram Master to Slave Data Transfer](https://i-blog.csdnimg.cn/blog_migrate/987fc8ad54ca5ebc1d29a8408c20b7e2.png)
- 如果从机需要响应,从机则通过MISO数据线将数据位传输给主机,主机读取数据
![Introduction to SPI - Data Transmission Diagram Slave to Master Data Transfer](https://i-blog.csdnimg.cn/blog_migrate/3e38905da1a2f7308407b8a8f5a57600.png)
SPI通信优缺点
优势:
- 无需起始位与停止位,数据连续传输,没有中断
- 没有复杂的从机选址机制
- 数据传输速率高于I2C与UART
- 可全双工通信
劣势:
- 需要4条通信线
- 无响应位 (ACK)
- 无奇偶校验等纠错机制
- 只允许单主机
延伸阅读
原文链接(Reference)
https://www.circuitbasics.com/basics-of-the-spi-communication-protocol
原文链接(Reference)
https://www.circuitbasics.com/basics-of-the-spi-communication-protocol