电子通信的SPI详解

传感器技术 2019-08-09 18:00


传感器技术编辑整理


将微控制器连接到传感器,显示器或其他模块时,您是否考虑过两个设备之间如何通信?他们到底在说什么?他们如何能够相互理解?

电子设备之间的通信就像人类之间的通信,双方都需要说同一种语言。在电子学中,这些语言称为通信协议。


SPI,I2C和UART

 

我们先了解三种最常见协议的基础知识:串行外设接口(SPI),内部集成电路(I2C)和通用异步接收器/发送器(UART)驱动通信。


SPI,I2C和UART比USB,以太网,蓝牙和WiFi等协议慢得多,但它们更简单,使用的硬件和系统资源也更少。SPI,I2C和UART非常适用于微控制器之间以及微控制器和传感器之间的通信,在这些传感器中不需要传输大量高速数据。


串行与并行通信
电子设备通过物理连接在设备之间的导线发送数据位来相互通信,有点像一个字母中的字母,除了26个字母(英文字母表中),一个位是二进制的,只能是1或0。通过电压的快速变化,位从一个设备传输到另一个设备。在工作电压为5V的系统中,0位作为0V的短脉冲通信,1位通过5V的短脉冲通信。
 
数据位可以并行或串行形式传输。在并行通信中,数据位是同时发送的,每个都通过单独的线路。下图显示了二进制(01000011)中字母“C”的并行传输:


在串行通信中,通过单线逐个发送这些位。下图显示了二进制(01000011)中字母“C”的串行传输:


SPI简介


SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。


1、SPI特点


(1)采用主-从模式(Master-Slave) 的控制方式 


SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave). 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作

(2)采用同步方式(Synchronous)传输数据


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



(3)数据交换(Data Exchanges)


SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)". 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了. 一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访问 (Access). 所以, Master 设备必须首先通过 SS/CS pin 对 Slave 设备进行片选, 把想要访问的 Slave 设备选上. 在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致 SPI 物理模块最终失效. 因此, 在程序中一般都会在 SPI 传输完数据后, 去读取 SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的。

(4)SPI有四种传输模式


上升沿、下降沿、前沿、后沿触发。当然也有MSB和LSB传输方式.


(5)SPI只有主模式和从模式之分。


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


2、 工作机制


(1)概述



上图只是对 SPI 设备间通信的一个简单的描述, 下面就来解释一下图中所示的几个组件(Module):


SSPBUF,Synchronous Serial Port Buffer, 泛指 SPI 设备里面的内部缓冲区, 一般在物理上是以 FIFO 的形式, 保存传输过程中的临时数据;

SSPSR, Synchronous Serial Port Register, 泛指 SPI 设备里面的移位寄存器(Shift Regitser), 它的作用是根据设置好的数据位宽(bit-width) 把数据移入或者移出 SSPBUF;

Controller, 泛指 SPI 设备里面的控制寄存器, 可以通过配置它们来设置 SPI 总线的传输模式。

通常情况下, 我们只需要对上图所描述的四个管脚(pin) 进行编程即可控制整个 SPI 设备之间的数据通信:

SCK, Serial Clock, 主要的作用是 Master 设备往 Slave 设备传输时钟信号, 控制数据交换的时机以及速率;


SS/CS, Slave Select/Chip Select, 用于 Master 设备片选 Slave 设备, 使被选中的 Slave 设备能够被 Master 设备所访问;

SDO/MOSI, Serial Data Output/Master Out Slave In, 在 Master 上面也被称为 Tx-Channel, 作为数据的出口, 主要用于 SPI 设备发送数据;


SDI/MISO, Serial Data Input/Master In Slave Out, 在 Master 上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI 设备接收数据;

SPI 设备在进行通信的过程中, Master 设备和 Slave 设备之间会产生一个数据链路回环(Data Loop), 就像上图所画的那样, 通过 SDO 和 SDI 管脚, SSPSR 控制数据移入移出 SSPBUF, Controller 确定 SPI 总线的通信模式, SCK 传输时钟信号。


(2) Timing



上图通过 Master 设备与 Slave 设备之间交换1 Byte 数据来说明 SPI 协议的工作机制.
首先, 在这里解释一下相位和极性的概念


a, SPI相关的缩写或说法

SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:

(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性

(2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (时钟)相位
(3) SCK=SCLK=SPI的时钟
(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)

对于一个时钟周期内,有两个edge,分别称为:

Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;

Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;


b,SPI的相位和极性


CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:
Mode 0 CPOL=0, CPHA=0
Mode 1 CPOL=0, CPHA=1
Mode 2 CPOL=1, CPHA=0
Mode 3 CPOL=1, CPHA=1

c,CPOL极性


先说什么是SCLK时钟的空闲时刻,其就是当SCLK在数发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。

先说英文,其精简解释为:Clock Polarity = IDLE state of SCK。

再用中文详解:

SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:

CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;

CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;


d,CPHA相位


首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。

对于:

CPHA=0,表示第一个边沿:
对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
CPHA=1,表示第二个边沿:
对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

还是上图大家更容易看懂


e,软件中如何设置SPI的极性和相位


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

对于从设备的SPI是什么模式,有两种:


固定的,有SPI从设备硬件决定的


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

关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;

然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以推算出CPHA是0还是1了。

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


从设备也是一个SPI控制器,4种模式都支持,此时只要自己设置为某种模式即可。
然后知道了从设备的模式后,再去将SPI主设备的模式,设置为和从设备模式一样,即可。
对于如何配置SPI的CPOL和CPHA的话,不多细说,多数都是直接去写对应的SPI控制器中对应寄存器中的CPOL和CPHA那两位,写0或写1即可。


(3)SSPSR


SSPSR 是 SPI 设备内部的移位寄存器(Shift Register). 它的主要作用是根据 SPI 时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以及 Channel-Width 所决定。

Bus-Width 的作用是指定地址总线到 Master 设备之间数据传输的单位.

例如, 我们想要往 Master 设备里面的 SSPBUF 写入 16 Byte 大小的数据: 首先, 给 Master 设备的配置寄存器设置 Bus-Width 为 Byte; 然后往 Master 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入 1 Byte 大小的数据(使用 writeb 函数); 写完 1 Byte 数据之后, Master 设备里面的 Tx-Data 移位寄存器会自动把从地址总线传来的1 Byte 数据移入 SSPBUF 里; 上述动作一共需要重复执行 16 次.

Channel-Width 的作用是指定 Master 设备与 Slave 设备之间数据传输的单位. 与 Bus-Width 相似, Master 设备内部的移位寄存器会依据 Channel-Width 自动地把数据从 Master-SSPBUF 里通过 Master-SDO 管脚搬运到 Slave 设备里的 Slave-SDI 引脚, Slave-SSPSR 再把每次接收的数据移入 Slave-SSPBUF里.通常情况下, Bus-Width 总是会大于或等于 Channel-Width, 这样能保证不会出现因 Master 与 Slave 之间数据交换的频率比地址总线与 Master 之间的数据交换频率要快, 导致 SSPBUF 里面存放的数据为无效数据这样的情况.


(4) SSPBUF


我们知道, 在每个时钟周期内, Master 与 Slave 之间交换的数据其实都是 SPI 内部移位寄存器从 SSPBUF 里面拷贝的. 我们可以通过往 SSPBUF 对应的寄存器 (Tx-Data / Rx-Data register) 里读写数据, 间接地操控 SPI 设备内部的 SSPBUF.

例如, 在发送数据之前, 我们应该先往 Master 的 Tx-Data 寄存器写入将要发送出去的数据, 这些数据会被 Master-SSPSR 移位寄存器根据 Bus-Width 自动移入 Master-SSPBUF 里, 然后这些数据又会被 Master-SSPSR 根据 Channel-Width 从 Master-SSPBUF 中移出, 通过 Master-SDO 管脚传给 Slave-SDI 管脚, Slave-SSPSR 则把从 Slave-SDI 接收到的数据移入 Slave-SSPBUF 里. 与此同时, Slave-SSPBUF 里面的数据根据每次接收数据的大小(Channel-Width), 通过 Slave-SDO 发往 Master-SDI, Master-SSPSR 再把从 Master-SDI 接收的数据移入 Master-SSPBUF.在单次数据传输完成之后, 用户程序可以通过从 Master 设备的 Rx-Data 寄存器读取 Master 设备数据交换得到的数据.

(5) Controller


Master 设备里面的 Controller 主要通过时钟信号(Clock Signal)以及片选信号(Slave Select Signal)来控制 Slave 设备. Slave 设备会一直等待, 直到接收到 Master 设备发过来的片选信号, 然后根据时钟信号来工作.

Master 设备的片选操作必须由程序所实现. 例如: 由程序把 SS/CS 管脚的时钟信号拉低电平, 完成 SPI 设备数据通信的前期工作; 当程序想让 SPI 设备结束数据通信时, 再把 SS/CS 管脚上的时钟信号拉高电平.


SPI的优点和缺点


使用SPI有一些优点和缺点,如果在不同的通信协议之间进行选择,您应该根据项目的要求知道何时使用SPI:
 
优点
没有启动和停止位,因此数据可以连续流式传输而不会中断
没有复杂的从机寻址系统,如I2C
比I2C更高的数据传输速率(几乎快两倍)
单独的MISO和MOSI线,因此可以同时发送和接收数据
 
缺点
使用四根线(I2C和UART使用两根)
无法确认数据已成功接收(I2C已执行此操作)
没有错误检查,如UART中的奇偶校验位
仅允许单个主机


传感器技术 制造业的未来是智能化,智能化的基础就是传感器; 互联网的方向是物联网,物联网的基石也是传感器; 关注传感器技术,获得技术资讯、产品应用、市场机会,掌握最黑科技,为中国工业导航。
评论
  • 随着国家对环保要求日趋严格。以铅酸电池为动力的电动自行车、电动摩托车,将逐渐受到环保管制。而能量密度更高的磷酸铁锂等锂电池成为优先的选择,锂电池以其高能量密度、快速充电、轻量化等特点,已经大量应用于电动车领域。光耦在锂电池系统PMU中的应用,能提供完善的安全保护和系统支撑。BMS和电池被封装成安装所需要的尺寸外形,高速的CAN以及RS-485等通信总线,被应用在与控制器、中控之间通信。晶台光耦,被广泛应用于通信隔离、双MCU系统应用地隔离、电机驱动隔离等。下图例举在电动摩托车上的应用中包含的部件
    晶台光耦 2024-12-17 13:47 60浏览
  •  2024年下半年,接二连三的“Duang Duang”声,从自动驾驶行业中传来:文远知行、黑芝麻、地平线、小马智行等相继登陆二级市场,希迪智驾、Momenta、佑驾等若干家企业在排队冲刺IPO中。算法模型的历史性迭代与政策的不断加码,让自动驾驶的前景越来越清晰。由来只有新人笑,有谁听到旧人哭。在资本密集兑现的自动驾驶小元年里,很多人可能都已经遗忘,“全球自动驾驶第一股”的名号,曾经属于一家叫做图森未来的公司。曾经风光无两的“图森”,历经内讧与退市等不堪往事之后,而今的“未来”似乎被锚
    锦缎研究院 2024-12-18 11:13 74浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-18 14:02 72浏览
  • 户外照明的“璀璨王者”,艾迈斯欧司朗OSCONIQ® C3030降临啦全球领先的光学解决方案供应商艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)近日宣布,推出新一代高性能LED——OSCONIQ® C 3030。这款尖端LED系列专为严苛的户外及体育场照明环境而设计,兼具出色的发光强度与卓越的散热效能。其支持高达3A的驱动电流及最大9W的功率输出,以紧凑扁平封装呈现卓越亮度和可靠性,确保高强度照明持久耐用且性能出众。应用领域01体育场及高杆照明OSCONIQ® C 3030以卓越的光通量密度、出
    艾迈斯欧司朗 2024-12-18 14:25 77浏览
  • 以人形机器人和通用人工智能为代表的新技术、新产品、新业态蓬勃发展,正成为全球科技创新的制高点与未来产业的新赛道。01、Optimus-Gen 2来了,人形机器人管家还远吗?没有一点点防备,特斯拉人形机器人Optimus-Gen 2来了!12月13日,马斯克于社交媒体上公布了特斯拉第二代人形机器人的产品演示,并预计将于本月内发布。在视频中,Optimus-Gen 2相比上一代有了大幅改进,不仅拥有AI大模型的加持,并在没有其他性能影响的前提下(相比上一代)将体重减少10kg,更包含:由特斯拉设计的
    艾迈斯欧司朗 2024-12-18 12:50 73浏览
  • 上汽大通G90是一款集豪华、科技与舒适于一身的中大型MPV,号称“国产埃尔法”。在国内市场,作为“卷王”的G90主要面向中大型MPV市场,满足家庭出行、商务接待和客运租赁等多元化场景需求,在国内市场上取得了不错的销售成绩。在海外市场,上汽大通G90也展现出了强大的竞争力,通过技术创新和品质提升,上汽大通的产品在国际市场上获得了广泛认可,出口量持续增长,如果你去过泰国,你就应该可以了解到,上汽的品牌出海战略,他们在泰国有建立工厂,上汽大通G90作为品牌的旗舰车型之一,自然也在海外市场上占据了重要地
    lauguo2013 2024-12-18 10:11 76浏览
  •        随着对车载高速总线的深入研究,以电信号为媒介的传输方式逐渐显露出劣势,当传输速率超过25Gbps时,基于电信号传输已经很难保证长距离传输下的信号质量与损耗。在这样的背景下,应用于工业领域的光通信技术因其高带宽、长距离、低电磁干扰的特点得到了密切的关注,IEEE在2023年发布了802.3cz[1]协议,旨在定义一套光纤以太网在车载领域的应用标准。MultiGBASE-AU总览       以下是Mult
    经纬恒润 2024-12-17 17:29 72浏览
  •   前言  作为一名电子专业的学生,半导体存储显然是绕不过去的一个坎,今天聊一聊关于Nand Flash的一些小知识。  这里十分感谢深圳雷龙发展有限公司为博主提供的两片CS创世SD NAND的存储芯片,同时也给大家推荐该品牌的相关产品。  一、定义  存储芯片根据断电后是否保留存储的信息可分为易失性存储芯片(RAM)和非易失性存储芯片(ROM)。  非易失性存储器芯片在断电后亦能持续保存代码及数据,分为闪型存储器 (Flash Memory)与只读存储器(Read-OnlyMemory),其中
    雷龙发展 2024-12-17 17:37 65浏览
  • 车载光纤通信随着ADAS(高阶驾驶辅助系统)、汽车智能网联、V2X和信息娱乐技术的不断发展,车载电子系统和应用数量迅速增加。不断增长的车内传输数据量对车载通信网络造成了巨大的数据带宽和安全性需求,传统的车载总线技术已经不能满足当今高速传输的要求。铜缆的广泛使用导致了严重的电磁干扰(EMI),同时也存在CAN、LIN、FlexRay等传统总线技术不太容易解决的问题。在此背景下,车载光纤通信技术逐渐受到关注和重视,除了大大提高数据传输率外,还具有抗电磁干扰、减少电缆空间和车辆质量等优点,在未来具有很
    广电计量 2024-12-18 13:31 67浏览
  • 2003年买的电子管功放机,俗称胆机,坏过几次,咨询厂家,购买零件,自己修理,干中学,学中干。有照片记录的是2011年3月,一天,发现整流管比之前红亮了很多,赶紧关机,想找原因,反反复复折腾了几个月,搞好了。就此,还在网上论坛咨询和讨论,欧博Rererence 5.0电子管发粉红色光,何故?-『胆艺轩音响技术论坛』-胆艺轩[Tubebbs]论坛 发表于2011-5-7同时与厂家联系得到支持,见文:29kg胆机修理之联想——环保简易,做到真难!-面包板社区 发表于2011-6-13又继续使用了多年
    自做自受 2024-12-17 22:18 155浏览
  • 随着现代汽车工业的不断发展,驾驶安全与舒适性成为消费者关注的焦点。在这个追求极致体验的时代,汽车ASF随动转向LED大灯技术应运而生,它不仅代表了车辆操控辅助系统的最新进展,更是对未来智能安全出行愿景的一次大胆探索。擎耀将深入探讨ASF随动转向技术的原理及落地方案,旨在为汽车LED照明升级行业提供一份详尽且实用的参考。首先,ASF随动转向技术不是什么高精尖的技术,一般的汽车大灯制造厂商都可能完成,通过软硬件的逻辑加上传感器,基本就可以实时监测车辆的行驶状态,包括但不限于车速、转向角度等关键参数。
    lauguo2013 2024-12-17 14:43 55浏览
  • 1. 磁性材料的磁化曲线磁性材料是由铁磁性物质或亚铁磁性物质组成的,在外加磁场H 作用下,必有相应的磁化强度M 或磁感应强度B,它们随磁场强度H 的变化曲线称为磁化曲线(M~H或B~H曲线)。磁化曲线一般来说是非线性的,具有2个特点:磁饱和现象及磁滞现象。即当磁场强度H足够大时,磁化强度M达到一个确定的饱和值Ms,继续增大H,Ms保持不变;以及当材料的M值达到饱和后,外磁场H降低为零时,M并不恢复为零,而是沿MsMr曲线变化。材料的工作状态相当于M~H曲线
    锦正茂科技 2024-12-17 10:40 125浏览
  • You are correct that the length of the via affects its inductance. Not only the length of the via, but also the shape and proximity of the return-current path determines the inductance.   For example, let's work with a four-layer board h
    tao180539_524066311 2024-12-18 15:56 71浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦