0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SPI总线的技术要点汇总

GReq_mcu168 来源:CSDN技术社区 作者:CSDN技术社区 2020-10-09 11:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前面总结了UART/I2C的技术要点,SPI相对I2C而言,比较简单。本文来总结一下SPI总线个人认为比较重要的一些技术要点。

什么是SPI?

SPI(Serial Peripheral Interface)是一种嵌入式系统中应用广泛的同步串行通信、主从架构式总线接口。80年代由摩托罗拉开发,已成为事实标准。

这句话里有几个关键要点:

同步

串行

通信

主从

总线

要理解这些要点,先上图,一图胜千言:

常见的SPI接口有这样几个引脚:

SCLK: 串行时钟,总是主端负责输出(Master)。总是由主端控制该信号,从端为输入采样。

MOSI:主出从入(Master Output Slave Input)。总是由主端控制该信号,从端为输入采样。

MISO:主入从出(Master Input Slave Output)。总是由从端控制该信号,主端为输入采样。

:从选择信号(Slave Select)。总是由主端控制该信号,从端为输入采样。

要理解上面这几个信号引脚的内涵,结合时序图,就比较容易理解了:

数字电路中,同步电路是一种通过时钟信号同步存储元件状态变化的数字电路。

主端>从端:

:主端发送低电平先选通从芯片,上面加帽表示低有效。啥意思呢?就是这个脚低电平期间选中从设备,主设备发送的时序报文对选中的从设备有效,其他挂载在总线上的设备忽略总线报文。

SCLK/SCK:发送同步移位时钟。

MOSI:将数据按照SCLK移位时钟周期,将数据移位发送至该引脚。被选中的从设备依照SCLK/SCK上升沿或者下降沿,按位采样,一般字节的高位在前,具体须遵从芯片手册时序定义。从端依赖SCK/SCLK对MOSI上的信号逐位采样,采样的位依次进入接收移位寄存器,完成对字节的重组。当字节接收完成,再由后续数字电路进行处理。后续处理芯片实现各异,如是一个单片机则可能引发中断请求,如是特定功能数字芯片,则依据接收报文完成相应的功能处理。

从端>主端:

:主芯片发送低电平先选通从芯片。

SCLK/SCK:发送同步移位时钟。

MISO: 类似MOSI发送位流,依赖SCLK/SCK将位流依次发送至引脚上,主设备在同步时钟的跳变边沿采样该引脚,进而移位接收位流。

采样沿:SPI采用边沿触发采样,对MOSI/MISO上的位序列进行采样,实际芯片有下面两种方式勘误见置顶留言,字数限制改不了,抱歉:

CPHA=0,表示上升沿采样

CPHA=1,表示下降沿采样

经过这些描述,解释了串行、同步、主从的概念。

什么是通信?

众所周知,计算机是一个二进制系统,所有的信息都是基于0/1进行编码、进行运行管理的。由0/1编码进而表示字符、文本、文件。那么SPI实现了底层的0/1码流的传递机制,能传递0/1,通过应用控制、很自然就能交换信息。

这是否有种一生二、二生三、三生万物的意思呢?

所以在研究各种通信总线的物理层时,就其本质而言都是界定如何对信息流的基本单元0/1进行编码、解码、收发的。

什么是SPI总线呢?

对于SPI总线而言,有两种拓扑:

独立片选拓扑:总线拓扑需要更多片选引脚,但通信效率高。信息直接在主从间传递

菊花链拓扑:节省引脚,但效率较低,数据信息传递需要级联传递。

独立片选拓扑

如上图:

每个从设备都有独立的片选引脚,主机同一时间段内,与一个从设备进行通信,也即选中一个从设备。

MOSI/MISO/SCLK并联在一起

MISO须是三态门,当从设备未选中时,该脚须设置为高阻态,而不能是输出态,否则会影响总线,这句话对于多从设备应用而言,请重点理解。尤其当用GPIO模拟SPI应用而言,须特别注意这一点!

对于MOSI/SCLK,虽然并联在一起,但是由于仅一个输出,多输入。输入引脚的阻抗本来就是高阻,所以不会有问题。

菊花链拓扑

有的芯片支持菊花链拓扑连接,这是何意呢?啥是菊花链呢?在电气和电子工程中,雏菊链是一种布线方案,其中多个设备按顺序或按环连接在一起,类似于雏菊的花环。其信息传递在链中流转。

那么对于SPI总线而言,具体是如何连接的呢?

其本质就是主从级联:

共用SCLK/,这两根线并联在一起

主MOSI连次级MOSI,次级MISO连次次级的MOSI....,然后由最后一级的MISO再送回到主设备的MISO。

某级从设备在第N组时钟周期用MISO发送第N-1组时钟周期接收到位给下级设备,同时把本组时钟周期期间前级设备通过MISO移位进来的数据保存按位序保存进接收寄存器中。其实在底层是按照位进行流转的。这个传递过程当变为高电平时则停止,各从设备当前寄存器中内容锁定了。具体应用时,如果要将某一字节传递到某个设备,则需要组织好传递的码流,以及时钟控制。

对于菊花链数据传递过程,其实类似于击鼓传花游戏。鼓点的作用就是同步时钟,花则是要传递的信息数据,鼓点的起停则类似于片选控制,唯一不同的是,击鼓传花传的是一朵花,而菊花链总线传递的是二进制流,至于从设备究竟要怎么应用这些数据流,则具体实现各异。

其实熟悉数据结构的同学可能会想,这个拓扑咋很像首尾相连的环形链表呢?确实很像,虽然没啥直接关系。

引脚的别名

对于SPI的引脚,不同的芯片厂商在DATASHEET上定义的引脚名字可能不同,这里将常见的别名整理一下:

MOSI主出从入:

SIMO, MTSR

SDI, DI, DIN, SI

SDO, DO, DOUT, SO

MISO主入从出

SOMI, MRST

SDO, DO, DOUT, SO

SDI, DI, DIN, SI

片选

S̅S̅, SSEL, CS, C̅S̅, CE, nSS, /SS, SS

很多功能芯片可能没有MISO引脚,也即无法支持读操作,仅仅支持写入操作。

SPI优缺点

优势:

传输速度高,SPI并未限定最高速度。有的应用甚至高达10Mbps。

全双工,但有的芯片没有MISO,则不支持。

相较于I2C而言,SPI简单一些,编程容易,控制简单

信号为单向信号,易于电隔离。尤其在工业产品中电气隔离在抗干扰方面、以及本质安全方面要求比较高。

没有复杂的总线仲裁机制,相对健壮。

劣势:

无寻址机制,需要额外的片选信号

SPI总线对于多从模式支持不好,两种拓扑都无法支持很多从设备,而且系统中也仅有一个主设备

没有定义错误检测机制

事实上的标准,但无正式标准

与I2C一样也只是芯片间总线,无法长距离通信

总结一下

或许有人会说I2C比SPI更好更为优越,SPI则相对简单粗暴。事实上做这样的对比,个人认为是没什么意义。

这两种协议在鲁棒性方面都比较好。I²C之所以优雅,是因为它在极简的基础架构(两线SDA/SCL)上提供了非常先进的功能,例如自动多主机冲突处理和内置地址管理。但是它相对却非常复杂,在性能上或许有所欠缺。

另一方面,SPI非常易于理解和实施,并且为扩展提供了很大的灵活性。SPI的优雅之处在于简单性。SPI应该被视为构建用于IC之间通信的自定义协议栈的良好接口。因此,尽管使用SPI可能需要做更多的工作,但可以提供更高的数据传输性能和灵活的自由度。

如果一定要比较,则SPI和I2C都为低速设备的通信提供了良好的接口支持,但是SPI更适合点对点传输数据流的应用,而I²C则更适合于多主机“寄存器访问”应用。

正确使用这两种协议可提供相同级别的鲁棒性,芯片厂商对两种接口都广泛支持。市面上提供了大量的外围芯片,比如 EEPROMADCDAC,RTC,微控制器传感器,LCD控制器,这些芯片主要提供I²C,SPI或同时支持这2个接口。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1867

    浏览量

    99869
  • SPI总线
    +关注

    关注

    4

    文章

    104

    浏览量

    28366

原文标题:万变不离其宗之SPI总线要点总结

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SPI、I2C、UART三种串行总线的区别与对比

    1)概念定义 SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS:意为IC之间总线) UART(Universal
    发表于 11-20 07:19

    搞不定示波器SPI解码?这几步就行!

    SPI总线是为芯片间的数据通信而设计的,因此,在大多数情况下,由于传输数据的不同使得信号并非周期性信号。这就要求在对该总线进行测试时,要能准确地触发到数据帧的“头”,并将其“稳定”显示在仪器上,便于
    的头像 发表于 11-19 17:32 529次阅读
    搞不定示波器<b class='flag-5'>SPI</b>解码?这几步就行!

    【EMC技术案例】SPI模块搭接机壳导致辐射超标问题案例

    【EMC技术案例】SPI模块搭接机壳导致辐射超标问题案例
    的头像 发表于 11-11 17:26 422次阅读
    【EMC<b class='flag-5'>技术</b>案例】<b class='flag-5'>SPI</b>模块搭接机壳导致辐射超标问题案例

    深入剖析SPI协议

    SPI,全称(Serial Peripheral interface)是由摩托罗拉公司首先定义的协议,中文名为串型外围设备接口。SPI是一种高速全双工的总线协议。
    的头像 发表于 08-21 15:04 3582次阅读
    深入剖析<b class='flag-5'>SPI</b>协议

    磨刀不误砍柴工:CAN总线布线的关键要点

    在工业和汽车通信中,合理的总线布局布线是确保通信可靠性的关键。本期我们将探讨如何选择导线以及布线拓扑结构,帮助您在项目中实现高效、可靠的CAN总线通信。总线布线的关键要点合理的
    的头像 发表于 07-18 11:35 727次阅读
    磨刀不误砍柴工:CAN<b class='flag-5'>总线</b>布线的关键<b class='flag-5'>要点</b>

    第十七章 SPI——读写串行FLASH

    本章介绍SPI协议,其为高速全双工通信总线,含物理层、协议层内容,还讲解W55MH32的SPI特性、初始化及DMA相关配置。
    的头像 发表于 06-19 17:06 1058次阅读
    第十七章 <b class='flag-5'>SPI</b>——读写串行FLASH

    ADuM3151/ADuM3152/ADuM3153用于SPI的3.75 kV、7通道、SPI隔离器、数字隔离器技术手册

    变压器技术,在CLK、MO/SI、MI/SO和SSSPI总线信号中具有低传播延迟特性,可支持最高17 MHz的SPI时钟速率。这些通道在工作时具有14 ns传播延迟和1 ns抖动,以针对SPI
    的头像 发表于 06-04 11:23 824次阅读
    ADuM3151/ADuM3152/ADuM3153用于<b class='flag-5'>SPI</b>的3.75 kV、7通道、<b class='flag-5'>SPI</b>隔离器、数字隔离器<b class='flag-5'>技术</b>手册

    ADUM4150用于SPI高速接口的5kV专用隔离器技术手册

    的iCoupler ^®^ 芯片级变压器技术,在CLK、MO/SI、MI/SO和SS SPI总线信号中具有低传播延迟特性,可支持最高17 MHz的SPI时钟速率。 这些通道在工作时具有
    的头像 发表于 06-04 10:55 667次阅读
    ADUM4150用于<b class='flag-5'>SPI</b>高速接口的5kV专用隔离器<b class='flag-5'>技术</b>手册

    ADUM4154用于SPI接口的5 kV专用隔离器技术手册

    基于ADI公司的iCoupler ^®^ 芯片级变压器技术,在CLK、MO/SI、MI/SO和SS SPI总线信号中具有低传播延迟和低抖动特性,可支持最高17 MHz的SPI时钟速率。
    的头像 发表于 06-04 10:48 708次阅读
    ADUM4154用于<b class='flag-5'>SPI</b>接口的5 kV专用隔离器<b class='flag-5'>技术</b>手册

    基于RK3576开发板的SPI使用说明

    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是 Motorola 公司推出的一种同步串行接口技术,是一种高速、全双工、同步的通信总线在用户空间的应用程序中
    的头像 发表于 05-07 10:31 1398次阅读
    基于RK3576开发板的<b class='flag-5'>SPI</b>使用说明

    看完这篇,SPI其实也很简单嘛(可下载)

    首先我们来简单介绍一下SPISPI是串行外设接口(SerialPeripheralInterface)简单来讲就是它一种高速的,全双工,同步的通信总线被各种总线搞的晕头转向的人来说就
    发表于 03-26 14:29 2次下载

    对于一款新的BSP如何添加SPI驱动

    介绍SPI总线由开发,是一种,由四个IO口组成:CS、SCLK、MISO、MOSI;通常用于CPU和外设之间进行通信,常见的SPI总线设备有:TFTLCD、QSPIFLASH、时钟模块
    的头像 发表于 02-26 19:00 892次阅读
    对于一款新的BSP如何添加<b class='flag-5'>SPI</b>驱动

    SPI通信总线概述和Verilog实现

    SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线
    的头像 发表于 02-07 14:28 2003次阅读
    <b class='flag-5'>SPI</b>通信<b class='flag-5'>总线</b>概述和Verilog实现

    I2C总线SPI总线的比较

    在现代电子系统中,微控制器与各种外设之间的通信是必不可少的。I2C和SPI是两种流行的串行通信协议,它们各自具有独特的特点和应用场景。 I2C总线 I2C是一种多主机、多从机的同步通信协议,广泛应用
    的头像 发表于 01-17 15:08 1766次阅读

    LMP91200评估板上的两组spi可以挂在同一spi总线上吗?

    评估板上的两组spi可以挂在同一spi总线上吗?ADC部分没有mosi,怎么搞?我把两个挂在了同一spi上,进行片选,adc只接了miso,在采集ADC数据时,
    发表于 12-31 06:20