欢迎光临散文网 会员登陆 & 注册

SPI通信

2021-04-19 17:51 作者:僚机Wingplane  | 我要投稿

SPI简介

串行外设接口(Serial Peripheral Interface Bus,SPI),是一种用于短程通信的同步串行通信接口规范,主要应用于单片机系统中。类似I²C。 这种接口首先被Motorola(摩托罗拉)公司开发,然后发展成了一种行业规范。典型应用包含SD卡和液晶显示器。 SPI设备之间使用全双工模式通信,包含一个主机和一个或多个从机。主机产生待读或待写的帧数据,多个从机通过一个片选线路 决定哪个来响应主机的请求。 有时SPI接口被称作四线程接口,SPI准确来讲称为同步串行接口,但是与同步串行接口协议(SSI)不同,SSI是一个四线程 同步通信协议,但是使用差分信号输入同时仅提供一个单工通信信道。

SPI总线规定了4个保留逻辑信号接口:

  • SCLK(Serial Clock):串行时钟,由主机发出

  • MOSI(Master Output,Slave Input):主机输出从机输入信号,由主机发出

  • MISO(Master Input,Slave Output):主机输入从机输出信号,由从机发出

  • SS(Slave Selected):选择信号,由主机发出,低电位有效

SPI总线:单一master对单一slave

单对单

SPI总线:单一master对复合slave

一对多

虽然上述名称是现在广泛在使用的,但是在有些情况下,比如旧的IC,可能与插图上描述的引脚口名称不同:

  • SCLK:SCK

  • MOSI:SIMO, SDO, DI, DIN, SI, MTSR

  • MISO:SOMI, SDI, DO, DOUT, SO, MRST

  • SDIO:SIO

  • SS: S̅S̅, SSEL, CS, C̅S̅, CE, nSS, /SS, SS#

MOSI / MISO惯例要求,在使用备用名称的设备上,主机上的SDI连接到从机上的SDI,反之亦然。从选择与芯片选择相同的功能,而不是寻址概念。引脚名称始终大写,如从选择,串行时钟和主输出从输入。

SPI Operation

SPI总线可以与单个主器件以及一个或多个从器件一起工作。

如果使用单个从器件,如果从器件允许,SS引脚可能会固定为逻辑低电平。有些器件需要下降边沿的片选信号来启动一个动作。一个例子是Maxim MAX1242 ADC,它在高→低转换时开始转换。对于多个从设备,每个从设备都需要从主站独立的SS信号。

大多数从器件具有三态输出,因此当未选择器件时,其MISO信号变为高阻抗(逻辑断开)。没有三态输出的器件不能与其他器件共享SPI总线段; 只有一个这样的从设备可以跟主设备说话。

数据传输

要开始通信,总线主机使用从设备支持的频率配置时钟,通常高达几MHz。然后主机在选择行上选择逻辑电平为0的从设备。如果需要等待时间,例如进行模数转换,则在发出时钟周期之前,主机必须至少等待一段时间。

在每个SPI时钟周期期间,发生全双工数据传输。主机在MOSI线路上发送一个位,从机读取它,而从机在MISO线路上发送一个位,主器件读取它。即使仅需要单向数据传输,也保持该序列。

传输通常涉及一些给定字大小的两个移位寄存器,例如8位,主器件中有1位,从器件中有1位。它们以虚拟环形拓扑连接。数据通常以最高有效位首先移出,同时将新的最低有效位移位到同一寄存器。同时,来自对方的数据被移入最低有效位寄存器。在寄存器位被移出和进入后,主器件和从器件已经交换了寄存器值。如果需要更换数据,则重新装入移位寄存器,重复该过程。传输可以持续任何数量的时钟周期。完成后,主站停止切换时钟信号,通常取消选择从站。

传输通常由8位字组成。然而,其他字大小也是常见的,例如,用于触摸屏控制器或音频编解码器的16位字,例如德州仪器公司的TSC2101 或12位字,用于许多数模转换器或模数转换器转换器。

总线上未使用芯片选择线激活的每个从器件都必须忽略输入时钟和MOSI信号,而不能驱动MISO。

典型的硬件设置使用两个移位寄存器来形成一个片间循环缓冲区,如下图:


时钟极性和相位

除了设置时钟频率外,主机还必须配置相对于数据的时钟极性和相位。摩托罗拉SPI指南将这两个选项分别命名为CPOL和CPHA,大多数厂商都采用了这一惯例。

时序图如下图所示。 该时序在下面进一步描述并适用于主设备和从设备。

显示时钟极性和相位的时序图。红线表示时钟前沿,蓝线,后沿。

  • CPOL确定时钟的极性。极性可以用简单的逆变器转换。

    • CPOL = 0是空闲0的时钟,每个周期由1的脉冲组成。也就是说,前沿是上升沿,后沿是下降沿。

    • CPOL = 1是空闲1的时钟,每个周期由0的脉冲组成。也就是说,前沿是下降沿,后沿是上升沿。

    • CPHA确定数据位相对于时钟脉冲的定时。在两种形式之间进行转换并不是微不足道的。

    • 对于CPHA = 0,“输出”侧在前一时钟周期的后沿更改数据,而“in”侧在时钟周期的前沿捕获(或不久之后)数据。外侧保持数据有效直到当前时钟周期的下降沿。对于第一个周期,第一个位必须位于MOSI线前面的前沿时钟边沿。

    • 考虑它的另一种方法是说,CPHA = 0周期由时钟空闲的半周期组成,随后是时钟被断言的半周期。

    • 对于CPHA = 1,“输出”侧在当前时钟周期的前沿更改数据,而“in”侧在时钟周期的后沿捕获(或不久之后)数据。外侧保持数据有效直到下一个时钟周期的前沿。对于上一个周期,从机将MISO线保持有效,直到从机选择被解除。

    • 考虑它的另一种方法是说,CHPA = 1周期由一个半周期组成,时钟被置位,随后是一个半周期,时钟空闲。

MOSI和MISO信号通常在半个周期内稳定(在其接收点),直到下一个时钟转换。SPI主从设备可能会在该半周期的不同点对数据进行采样。

这为主站和从站之间的通信通道增加了更多的灵活性。

模式

极性和相位的组合通常被称为根据以下约定通常编号的模式,CPOL为高位,CPHA为低位位:

对于“Microchip PIC”/“ARM”微控制器(注意,NCPHA是CPHA的反转):

极性

另一种常用的符号表示作为(CPOL,CPHA)元组的模式; 例如,值'(0,1)'将指示CPOL = 0和CPHA = 1。

中断

SPI器件有时使用另一条信号线将中断信号发送到主机CPU。实例包括从触摸屏传感器落笔中断,从温度传感器热限制警报,由实时时钟芯片,发出警报SDIO,和耳机插孔插入从在蜂窝电话的声音编解码器。中断不在SPI标准的范围内; 它们的使用既不被禁止也不被标准规定。



作者:btskyrmb
链接:https://www.jianshu.com/p/5de187bf5b75
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

SPI通信的评论 (共 条)

分享到微博请遵守国家法律