SPI通信

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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。