SPI是“全双工”(具有单独的发送和接收线路),因此可以在同一时间发送和接收数据,另外SPI的接收硬件可以是一个简单的移位寄存器。这比异步串行通信所需的完整UART要简单得多,并且更加便宜;
本文讲述比较精简,详细的可以参考大佬文章
SPI协议详解(图文并茂+超详细) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/290620901
1.SPI通讯的优势
- 全双工串行通信;
- 高速数据传输速率。
- 简单的软件配置;
- 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
- 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
2.SPI的缺点
- 没有硬件从机应答信号(主机可能在不知情的情况下无法发送);
- 通常仅支持一个主设备;
- 需要更多的引脚(与I2C不同);
- 没有定义硬件级别的错误检查协议;
- 与RS-232和CAN总线相比,只能支持非常短的距离
3.基本时序图
实际用示波器抓出来的波形不会这么规则
SPI总线包括4条逻辑线,定义如下:
MISO:Master input slave output 主机输入,从机输出(数据来自从机);
MOSI:Master output slave input 主机输出,从机输入(数据来自主机);
SCLK : Serial Clock 串行时钟信号,由主机产生发送给从机;
CS:Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号
4.SPI的时钟极性和相序
(1)时钟极性0、时钟相位0:
5.多从机连接方式
(1)多NSS
(2)菊花链
-
NSS(Chip Select)方式:
- 优势:
- 简单易用:NSS方式是SPI连接中最常见和最简单的方式之一。在NSS方式中,每个设备都有一个独立的片选信号,可以通过控制片选信号来选择要与主控器通信的设备。
- 灵活性高:每个设备都有独立的片选信号,因此可以独立选择通信的设备,使得系统的灵活性更高。
- 容错性好:由于每个设备有独立的片选信号,因此可以避免片选信号冲突或者误选的情况,提高了系统的稳定性和可靠性。
- 劣势:
- 占用引脚多:由于每个设备都需要一个独立的片选信号,因此在连接多个设备时可能会占用大量的引脚资源,特别是在系统复杂度较高时可能会造成引脚不足的问题。
- 优势:
-
菊花链(Daisy Chain)方式:
- 优势:
- 引脚占用少:菊花链方式通过将多个设备串联在一起,只需一个片选信号,因此在连接多个设备时可以节省大量的引脚资源,特别适用于系统复杂度较高或者引脚资源有限的情况。
- 线路简洁:菊花链方式的连接线路相对较简单,只需要一根片选信号线和一根数据线,可以减少连接线的数量和长度,提高系统的整体可靠性。
- 劣势:
- 灵活性较差:菊花链方式中,所有设备共享同一个片选信号,因此在通信时需要依次选中每个设备,可能会降低系统的响应速度和灵活性。
- 容错性较差:由于所有设备共享同一个片选信号,一旦出现片选信号错误或者冲突,可能会导致通信失败或者数据错误,降低了系统的稳定性和可靠性。
- 优势: