SPI (串行外围设备接口) 协议简介

      最后更新:2022-07-04 14:20:30 手机定位技术交流文章

      1、SPI协议简介

      1.1 SPI协定的摘要

      SPI,它是串行接口的一个缩写.名称的概念指一系列边缘接口。它最初由摩托罗拉在其MC68HCXX系列处理器上定义。SPI接口主要用于EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器。**SPI,是一种高速的,全双工,同步的通信总线,**只有四个线在芯片的管脚上,节约了芯片的管脚,同时节省PCB布局空间,提供方便,这是由于这种简单易用的特性,现在越来越多的芯片集成了这个通信协议,例如,MSP430单片处理器系列。

      1.2 SPI优点

      1):为全职通讯提供支持

      2):通信简单

      3):高速数据传输速率

      1.3 缺点
      没有指定的流量控制和响应机制来验证数据是否收到,因此与数据中的IIC总线协议比较
      可靠性方面存在某些缺陷.

      2、 特点

      2.1 主 Slave 控制模式

      SPI指定两个SPI设备之间的通信必须由主机控制到奴隶。一个主机可以通过提供Clock和Slave Select来控制多个Slave设备。SPI协议还规定Slave设备的时钟由主设备通过SCK管向Slave设备提供。奴隶设备本身无法生成或控制时钟,没有时钟, 奴隶设备不能正常工作.

      2.2同步数据传输

      主机根据交换的数据生成相应的时钟脉冲。时钟脉冲形成时钟信号.时钟信号控制了两个SPI设备之间通过时钟极度(CPOL)和时钟相(CPHA)交换数据时和数据保存时。确保数据在两个设备之间同时传输。

      2.3数据交换

      SPI设备之间的数据传输也被称为数据交换。因为SPI协议规定,SPI设备不能在数据通信中仅作为“发送者”或“接收者”。在每个钟周期中,SPI设备发送和接收一个比特大小的数据(从主设备或设备),交换的是与设备相等的位大小的数据。一个奴隶设备需要能够从主人接收控制信号,在此之前,您必须能够访问(访问)主机。所以,主设备必须首先通过SS/CS端子选择Slave设备,然后选择要访问的Slave设备。在数据传输过程中,每个接收的数据必须在下一个数据传输之前保存。如果以前收到的数据没有读取,然后已经收到的完整的数据可能会被丢弃,SPI物理模块最终失败。因此,在程序中,数据通常在SPI完成后传输,在SPI设备中读取数据,即使这些数据(Dummy Data)在我们的程序中毫无用处(即使在发送后下一次读取是毫无意义的,但仍需从登记册上阅读。

      2.5SPI是主模式,只有从模式

      **SPI没有读写声明,**因为几乎每个SPI都是交换数据的主机设备,也就是说,您必须发送数据来接收数据;您必须发送数据来接收数据。

      3、 工作机制

      3.1 概述

      以上只是SPI设备通信的简单描述,这里是显示的一些组件:

      • SSPBUF:一般指SPI设备内部的内部缓冲区,通常物理形式为FIFO,用于在传输过程中存储临时数据;
      • SSPSR(英语:SSPSR)指SPI设备内部的传输注册表,其功能是基于一套好的位宽的数据传输到或输出SSPBUF。
      • 控制器(Controller):一般指SPI设备内部的控制记录,可以配置为SPI总线的传输模式。

      通常,我们只需要程序上面描述的四个端子来控制整个SPI设备之间的数据通信:

      • SCK:主要功能是从主机(主机)向奴隶(从)设备发送时钟信号,控制数据交换的时间和速度;
      • SS/CS:选择主机(主机)设备卡的Slave(从)设备,以便主机(主机)设备可以访问所选的Slave(从)设备;
      • SDO/MOSI:又称Tx-Channel on Master,作为数据输出,主要用于向SPI设备发送数据;
      • SDI/MISO:又称Rx-Channel on Master,作为数据输入,主要用于SPI设备接收数据;

      SPI设备在通信过程中,在主机和奴隶设备之间创建一个数据环。如上图所示,通过SDO和SDI管道,SSPSR控制了SSPBUF的输入和输出数据,控制器决定SPI总线的通信模式,SCK发送时钟信号。

      SDI(数据输入),SDO(数据输出),SCK(时钟),CS(电影选择)

      (1)SDO/MOSI-主要设备数据输出,设备数据输入;

      (2)SDI/MISO-主要设备数据输入和输出设备数据;

      (3),SCK-由主设备生成的时钟信号;

      (4),CS/SS-设备的电源信号,由主设备控制。当设备中有多个设备时,因为每个设备都有一个单片选择性拖脚插入主设备,当我们与主设备和一些设备进行通信时,必须从设备中选择相应的板,以使脚的电平衡低或高。

      3.2与SPI有关的缩写或表达

      SPI的极度和相位阶段通常被写成CPOL和CPHA,但还有其他一些文献,这些文献的总结如下:

      • CKPOL (Clock Polarity) = CPOL = POL = Polarity = (Clock) Polarity
      • CKPHA(时钟阶段) = CPHA = PHA = 阶段 = (时钟) 阶段
      • SCK=SCLK=SPI时钟
      • 边缘 = 时钟的电平面变化的时刻,即上升的边缘或下降的边缘。时钟循环中有两个边缘,分别命名为:
      • 导边 = 第一个边,开头电压为1, 则1变为0, 开头电压为0, 则0变为1;
      • 追随边 = 追随下边 = 追随第二边, 如果开源电压为 1, 则 0 变为 1 ( 即 第一个 1 变为 0 后, 以下 0 变为 1), 如果开源电压为 0, 则 1 变为 0 ;

      3SPI巴士的极度和阶段

      CPOL配置SPI总线的极度,CPHA配置SPI总线的相位。

      3.3.1SPI总线的极度

      极度,直接影响SPI总线在闲时的时信号是高或低电压。

      CPOL = 1:表示自由时间是高电压水平;

      CPOL = 0:表示空时的低电压水平。

      由于数据传输通常以跳跃开始,这意味着当数据传输时,它要么是上下的,要么是向上的。

      3.3.2SPI总线的阶段

      在时钟周期中将有两个跳跃。 相位直接决定SPI总线在跳跃过程中开始采样数据。

      CPHA = 0:表示从第一个跳跃变化开始采样;

      CPHA = 1: 表示从第二个跳跃开始采样.

      jumping along Whether jumping along rises along or falls along depends on CPOL.Remember, CPHA only decides which jumps to follow the sample.

      4SPI总线传输的4种模式

      CPOL和CPHA的不同的组合形成不同的SPI巴士模式。

      时钟极性CPOL用于配置SCLK的电平衡,该状态是时钟阶段CPHA不活跃或活跃的。
      用于配置下列线沿数据采样:
      CPOL=0表示,当SCLK=0处于空状态时,高电常态的主动状态是SCLK。
      CPOL=1表示,当SCLK=1处于空状态时,则主动状态处于低电位正常状态。
      CPHA=0表示,样品是在第一界线沿着的,数据是在第二界线沿着的。
      CPHA=1表示,样本在第二边,数据在第一边发送。

      例如:
      CPOL = 0, CPHA = 0: 此时,SCLK处于低电平衡状态,数据样本在第一侧,即沿着第一侧。
      SCLK从低电压跳到高电压,因此数据采样是向上的,数据传输是下降的。

      CPOL=0,CPHA=1:当SCLK处于闲置状态时,数据被发送到第一边,即第一边。
      SCLK从低电压跳到高电压,因此数据采样是向下,数据传输是向上。

      CPOL=1,CPHA=0: 此时,SCLK处于高电平衡状态,数据被收集在第一侧,即第一侧。
      SCLK从高压跳到低压,因此数据采集是向下移动,数据传输是向上移动。

      CPOL=1,CPHA=1: 此时,SCLK处于高电平衡状态,数据被传输到第一侧,即第一侧。
      SCLK从高压跳到低压,因此数据采集是向上的,数据传输是下降的。

      注意,我们的主要设备可以控制时钟,因为SPI通信没有特殊的通信周期,如UART或IIC通信,有一个特殊的通信启动信号,有专门的通信终止信号,因此SPI协议可以通过时钟信号线控制,当没有数据交换时,我们的时钟线要么保持高,要么保持低。

      更新:

      首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,沿边进行相应的数据抽样,无论是沿第一边还是沿第二边,0与第一边相符,沿着对第二方的反应。

      对于:

      CPHA=0,表示第一方沿线:

      对于CPOL=0,闲置时间是低的电平衡,第一侧是从低到高,因此是沿上;

      对于CPOL=1,闲置时间是高电平面,第一侧是高到低的,因此是下游的;

      CPHA = 1, 指示第二方沿线:

      对于CPOL=0,闲置时间是低的电平衡,沿线的第二边是高到低,因此沿线是低的;

      对于CPOL=1,闲置时间是高电平面,第一侧是低到高,因此是高;

      3.4 SSPSR

      SSPSR是一个SPI设备内部的变换注册表。它的主要功能是基于SPI时钟信号状态,向或从SSPBUF转达数据,每个移动数据的大小由总线宽度和通道宽度决定。

      Bus-Width函数指定从地址总线发送数据到主设备的单元。

      例如,我们想在主机(主机)内将16字节大小的数据写入SSPBUF:首先,为主机(主机)配置注册表设置总线宽度为字节;然后在地址总线输入处将数据写入主机的Tx-Data传输注册表,每次1字节大小数据被写入(使用 writeb函数);1字节数据被写入后,主机内部的Tx-Data传输登记器自动将1 Byte数据从地址总线传输到SSPBUF;上述操作重复16次。

      Channel-Width函数指定主机(主机)和奴隶(从)设备之间的数据传输单位。类似于巴士宽度,主机内部的传输登记册通过主机 - SDO管自动从主机 - SSPBUF传输数据到主机 - SDI上,而主机 - SSPSR每次将接收的数据转移到主机 - SSPBUF。总线宽度总是比或等于通道宽度。这样可以确保 Master 和 Slave 之间数据交换的频率不高于地址总线和 Master 之间数据交换的频率。结果是,在SSPBUF存储的数据无效。

      3.5 SSPBUF

      我们知道,在每个钟表周期中, Master 和 Slave 之间 交换 的 数据 实际上 是 从 SPI 内部 转移 登记 处 的 SSPBUF 复制 的 。我们可以对相应的SSPBUF注册表(Tx-Data/Rx-Data注册表)读写数据,它间接控制在SPI设备内SSPBUF。

      例如,在发送数据之前,首先,我们应该把我们发送的数据写给主机的Tx-Data登记处,这些数据根据总线宽度,由总线SPSR传输登记册自动转移到 master-SSPBUF,这些数据由Master-SSPBUF到Master-SSPSR根据通道宽度通过Master-SDO管道传输到Slave-SDI管道,Slave-SSPSR将从Slave-SDI接收的数据传输到Slave-SSPBUF。与此同时,Slave-SSPBUF内部的数据取决于每个接收器的通道宽度。通过Slave-SDO向Master-SDI发送, master-SSPSR将从 master-SDI接收的数据转移到 master-SSPBUF。 单一的数据转移完成后,用户程序可以读取由主设备Rx-Data注册表取得的数据,用于主设备数据交换。

      3.6 Controller

      主机控制器主要通过时钟信号和主机选择信号来控制主机。奴隶设备会等你,直到您收到发送到主机的卡选信号,然后按时钟信号工作。

      该程序必须实现主机(主机)的卡选择操作。例如:由程序降低SS/CS管脚的时钟信号,完成SPI设备数据通信的初始工作;当程序希望让SPI设备终止数据通信时,将时钟信号添加到SS/CS管脚上以提高电压水平。

      本文由https://zhuanlan.Zhihu.com/p/150121520翻译,如有违反,请与删除联系。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29198.html

          热门文章

          文章分类