飞凌干货 | 一文了解SPI总线工作原理

SPI是什么


SPI(Serial Peripheral Interface),即串行外围设备接口。是Motorola首先在其M C68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM、FLASH、 实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。

SPI,是一种高速、全双工、同步的通信总线,并且在 芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

 

SPI的特点

01、 - 从模式 (Master-Slave)  的控制方式 

SPI 规定两个 SPI 设备之间通信必须由主设备 (Master) 来控制从设备 (Slave)。一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多 个 Slave 设备。

SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作。

02、 同步方式 (Synchronous) 传输数据  

Master 设备会根据将要交换的数据来产生相应的 时钟脉冲(Clock Pulse),时钟脉冲组成了时钟信号(Clock Signal) ,时钟信号通过时钟极性 (CPOL) 和时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样,来保证数据在两个设备之间是同步传输的。

 

03、 数据交换 (Data Exchanges)

SPI 设备间的数据传输之所以又被称为数据交换,是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一 个 "发送者(Transmitter)" 或者 "接收者(Receiver)"。在每个 Clock 周期内,SPI 设备都会发送并接收一个 bit 大小的数据,相当于该设备有一个 bit 大小的数据被交换了。

1个 Slave 设备要想能够接收到 Master 发过来的控制信号,必须在此之前能够被 Master 设备进行访问 (Access),所以 Master 设备必须先通过 SS/CS pin 对 Slave 设备进行片选,把想要访问的 Slave 设备选上。

在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致 SPI 物理模块最终失效。

因此,在程序中一般都会在 SPI 传输完数据后,去读取 SPI 设备里的数据,即使这些数据(Dummy Data)在我们的程序里是无用的。

  04、 四种传输模式

§  CPOL用来决定SC LK空闲时的 电平

CPOL=0,空闲时为低电平;

CPOL=1,空闲时为高电平。

§  CPHA用来决定采样时刻:

CPHA=0,每个周期的第一个时钟沿采样;

CPHA=1,每个周期的第二个时钟沿采样。

 

05、 只有主模式和从模式之分

没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

  06、 SPI 极性和相位的设置  

SPI分主设备和从设备,两者通过SPI协议通讯。而设置SPI的模式,是从设备的模式,决定了主设备的模式。所以要先去搞懂从设备SPI是何种模式,然后再将主设备SPI的模式设置成和从设备相同的模式,即可正常通讯。

两种从设备SPI的模式:

(1)固定的,由SPI从设备硬件决定

SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述。

关于SPI从设备在空闲的时候,是高电平还是低电平,决定了CPOL是0还是1;然后再确定设备是在上升沿采样数据还是下降沿采样数据,这样就可以在定了CPOL值的前提下,对应着推算出CPHA是0还是1了。

(2)可配置的,由软件自己设定

从设备也是一个SPI控制器,4种模式都支持,此时只要自己设置为某种模式即可。知道了从设备的模式后,再去将SPI主设备的模式设置为和从设备模式一样的即可。

对于如何配置SPI的CPOL和CPHA,这里不多细说,多数都是直接去写对应的SPI控制器中对应寄存器中的CPOL和CPHA那两位,写0或写1即可。

 

SPI示例

 

对于我们的FIT_CAN_II_2515模块来说,其主芯片使用的是MCP2515。根据芯片手册,该芯片可以工作在SPI的MODE 0和MODE 3模式:

 

 

 

但芯片硬件并没有相应的配置 引脚

 

 

在咨询软件工程师后,确定是软件设置为MODE 0:

 

 

关于SPI总线工作原理先介绍到这里,希望能帮助到你,后续会分享更多有关SPI的干货,敬请关注我们【 飞凌嵌入式】公众号。

 

END