SPI是一种全双工的串行通信总线,最早由Motorola提出,虽然应用广泛,但没有一个统一的总线标准。相较于IIC总线,SPI具有通信速度快、协议灵活、无复杂的总线仲裁机制、支持中断等优点,但缺点也很明显。例如,SPI需要四根线,而IIC只需要两根线;SPI为一主多从的总线架构,从而不会发生抢占总线的情况,所以在I/O电路上,可使用Push-Pull输出,对比IIC的OD门可获得更快的开关速度,但是SPI在发送一帧数据后,会产生中断,中断期间需读取数据寄存器中的数据,否则后续传输的数据会丢失,这就导致在连续传输数据的情况下,SPI的通信速度会受制于中断的处理速度;SPI协议虽然灵活,但是由于缺乏统一定义,各厂商间的兼容性并不强,而且SPI协议缺乏握手以及数据校验机制,主机发出的数据从机并不一定能正确接收,即SPI通信的可靠性不及IIC。基于以上SPI的基本特性,下文将着重讨论以下几个问题:
1、 Motorola如何定义SPI总线?
2、 为什么SPI的速率可以更快?有什么因素限制了其上限?
3、 移位寄存器的原理?
4、 SPI传输数据的完整过程是怎样的?
Motorala的总线协议
图1 SPI总线模块示意图