详解通信协议之SPI通信
1. SPI通信协议简介
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速、全双工、同步短距离通信总线,所以可以在同一时间发送和接收数据,数据传输速度可达到10M/bps,远超IIC通信总线。其优缺点如下:
优点:
- 无起始位和停止位,因此数据位可以连续传输而不会被中断; 没有像I2C这样复杂的从设备寻址系统; 数据传输速率比I2C更高(几乎快两倍);
- 分离的MISO和MOSI信号线,因此可以同时发送和接收数据; 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
- 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
缺点:
- 使用四根信号线(I2C和UART使用两根信号线);无法确认是否已成功接收数据(I2C拥有此功能);没有任何形式的错误检查,如UART中的奇偶校验位;
- 只允许一个主设备; 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);没有定义硬件级别的错误检查协议; 与RS-232和CAN总线相比,只能支持非常短的距离;
2. SPI硬件构成以及工作模式
SPI通信协议共需要四根线,分别为:主出从入(MOSI)、主入从出(MISO)、时钟线(SCLK)、片选线(CS)。下面对四根及进行解释:
MOSI(master output slave input):主设备输出数据,从设备接收数据;
MISO(master input slave output):从设备输出数据,主设备接收数据;
SCLK(serial clock):由主设备产生的时钟信号;
CS(chip select):从设备的使能信号,由主设备控制。
SPI有主、从两种模式,主机只能一个从机可以是一个也可以有多个,如下图所示。但是同一时间主机只能与一个从机通信。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理,所以每增加一个从设备就要增加一个片选线。
3. 通信原理以及时序
SPI通信数据流如下图所示,主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输。注意:不管是主机发送还是从机发送,都是先发送低位,再发送高位,主机需要和哪个从机通信就把那个从机的片选段拉低。
SPI外设的写操作和读操作是同步完成的。若只进行写操作,主机只需忽略接收到的字节(乱码);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据,读写同时发生,需要什么数据则存储什么数据。
SPI的读写时序由时钟极性和时钟相位共同决定,如下图所示。
这写都设置好就可以使用SPI通信了。