【通信传输协议】总线协议之SPI
一、SPI简介
串行外设接口 serial peripheral interfacce,是摩托罗拉公司最先推出的一种同步串行传输规范。
高速、全双工、同步的串行通信总线。
SPI有主从两种模式,通常由一主多从模块组成。
SPI通信需要至少4根线,单向传输时3根,MISO(主设备入)、MOSI(主设备出)、SCLK和CS/SS(片选)。
二、SPI通信原理及通信过程
SPI通信方式主要由一主一从和一主多从。其中一主多从通信方式又分为常规模式和菊花链模式。
- 常规模式
常规模式比一主一从多了片选线,其他情况跟一主一从模式一致。
- 菊花链模式
菊花链模式是由主机的MOSI连到第一台从机的MOSI,再由MISO-MOSI在设备间互联,由最后一台从机MISO到主机的MISO。
- 通信原理
SPI主设备和从设备都有一个串行移位寄存器,Master通过向Slave的串行寄存器写入一个字节来发起一次传输。SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。
即:每次Master所谓的往Slave中“写入”数据时,Slave的移位寄存器会把最后一位“写”给Master,所以说读写操作是同步的。如果Master想要“读”Slave“时,就往Slave中随便传输一个数,Slave就会向Master发送移位寄存器中最后一位的数。
"SPI发送数据是从高位开始,UART发送数据是从低位开始。比如一个字节0x6B,0110_1011,SPI先发0,UART先发1。"
- 通信过程
- 1、主设备发起信号,将CS/SS拉低,启动通信;
- 2、主设备通过发送时钟信号,告诉从设备进行写数据或者读数据操作(采样时机可能是时钟上升沿或下降沿),因为SPI有4种通信模式,它将立即读取数据线上的信号,从而收到1bit;
- 3、主设备将要发送的数据写到发送数据缓存区(Memory),Memory经过移位寄存器(缓存长度不一定),移位寄存器通过MOSI信号将字节一位一位的移位传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
- 4、从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机,同时通过MOSI信号线接收主机发送的数据,这样两个移位寄存器中的内容就被交换。
SPI传输完一个字节后无需应答即可开始下一个字节的传送。
三、极性和相位
SPI通过串行时钟极性(CPOL)和相位(CPHA)的搭配来得到四种工作模式,也就是四种采样时机。
CPOL:表示SCLK空闲时的状态
CPOL = 0,串行时钟空闲状态为低电平;
CPOL = 1,串行时钟空闲状态为高电平;
CPHA:表示采样时刻
CPHA = 0,串行时钟的第一个跳变沿(上升沿或下降沿)采集数据;
CPHA = 1,串行时钟的第二个跳变沿(上升沿或下降沿)采集数据;
四、SPI和IIC的区别
相同点:
都是串行,同步总线;
均采用TTL电平,传输距离有限,不同于485可以最长传输1200m;
均采用主从方式工作。
不同点:
IIC半双工, SPI全双工;
IIC多主多从,所以需要应答机制,确定数据没有发错;SPI一主一从或多从,没有应答机制;IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来寻址;
IIC时钟极性和相位固定,SPI时钟极性和相位可调。