I2C最高速度是400K,速度较慢,所以一般用于传感器等速度要求较低的场景,这节课介绍一种速度较高的串行总线:SPI
SPI为同步全双工接口,组件有三根线,一根时钟线(SDK),主设备输入从设备输出(MISO),主设备输出从设备输入(MOSI)
这种方式支持多主多从,是通过片选的方式,即每个从设备有一条片选线与主设备连接,低电平有效,在选择与相应的设备连接时,拉低相应设备对应的片选线,通信结束后再拉高。
一些无线通信模块都是使用速度较高的SPI模块,
SPI比起I2C更加简单,I2C中,时钟线主要是与数据线配合使用,而没有一个固定的时钟周期,但在SPI中则不同。
SPI中,引入两个关于时钟的参数:时钟极性和时钟相位
时钟极性(CPOL):高电平启动/低电平启动
时钟相位(CPHA):时钟周期内的采样点在第一个/第二个边沿(上升沿、下降沿)
这两个参数构成了四种模式:
mood0:CPOL=0(低电平启动),CPHA=0(第一边沿采样)
mood1:CPOL=0(低电平启动),CPHA=1(第二边沿采样)
mood2:CPOL=1(高电平启动),CPHA=0(第一边沿采样)
mood3:CPOL=1(高电平启动),CPHA=1(第二边沿采样)
SPI的时钟线由主设备提供,从设备的发送、接收数据缓冲区共用移位寄存器,这样可以使通信过程中,主设备每发送1次数据,就会把从设备发送缓冲区的数据自动推到主设备的接收缓冲区中,实现主设备对整个通信过程的完全控制。
片选线可以用一根管脚,