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

原创 2020-03-04 16:18:00 SPI SPI原理 CAN模块

SPI是什么


SPI(Serial Peripheral Interface),即串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。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用来决定SCLK空闲时的电平

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



相关产品 >

  • OKT507-C 开发板

    CPU: T507 工业级处理器,超低功耗,10年+生命周期|推荐全志工业级T507开发板系列,飞凌OKT507-C开发板采用全志T507 四核工业级处理器 T507设计开发,Cortex-A53架构,工业级宽温,性能强,低功耗,是一款高性价比的工业级产品,提供丰富的开发设计资料,提供产品规格书,软硬件手册等,全志的T507适用于车载电子、电力、医疗、工业控制、物联网、智能终端等领域。

    了解详情
    OKT507-C 开发板
  • OKMX8MP-C开发板

    内置NPU、ISP,AI计算能力高达2.3TOPS|飞凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 开发板 基于高性能低功耗工业级iMX8MP核心板设计,支持多种多种高速通信接口。iMX8MP开发板内置NPU,AI计算能力2.3TOPS,支持4K,支持双图像信号处理器(ISP),是一款支持LinuxQT/android操作系统的iMX8MP开发板。

    了解详情
    OKMX8MP-C开发板
  • OK3568-C开发板

    强而稳,国产芯,1Tops算力,多路高速接口|飞凌RK3568系列RK3568开发板基于国产工业级AI处理器RK3568四核64位Cortex-A55 处理器设计。RK3568作为国产化高性能处理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU达到1Tops,飞凌RK3568系列核心板提供瑞芯微RK3568规格书_datasheet_数据手册_原理图等,


    了解详情
    OK3568-C开发板
  • OKMX6ULL-C开发板

    40*29mm,双网双CAN,8路串口| i.MX6ULL开发板是基于NXP i.MX6ULL设计开发的的一款Linux开发板 ,主频800MHz,体积小,其核心板仅40*29mm,采用板对板连接器,适应场景丰富。 了解详情
    OKMX6ULL-C开发板

推荐阅读 换一批 换一批