- Serial Peripheral Interface 是摩托罗拉公司提出的一种总线协议,主要应用在EEPROM,FLASH,实时时钟,A/D转换,以及数字信号处理和数字信号解码器中
是一种高速,全双工,同步总线(UART是全双工异步,I2C是半双工同步)
- 占4个引脚:
- CS(片选),如果有多个从机,SPI需要专门的片选线,这点和I2C通过SDA和SCL配合来片选的情况不同,当设备很多的时候,SPI可以通过译码器来节约管脚,如此可以通过轮询或中断的方式获得设备的状态
- SDO(串行数据输出线),主机数据的输出线,从机有数据输入
- SDI(串行数据输入线), 主机数据的输入线,从机有数据输出
- SPICLK(同步串行时钟线),用于同步主机和从机的时钟线,是同步通讯的基础
- SPI通常有一个主设备和一个或多个从设备(VS I2C可以有多个主设备)
- SPI的时钟线只能由主机控制,从机不能控制时钟线(VS I2C的从机也可以控制时钟线)
- 数据通过SDO输出,在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取,完成一位数据的传输,由于SPI的时钟线只由主机控制,所以SPI可以一位一位的传输数据(VS I2C一次必须传输8bit数据)甚至终止传输。
SPI没有应答机制(VS I2C每8bit就需要一个ACK),这是SPI的一个缺点