一文搞懂SPI通信协议

这篇具有很好参考价值的文章主要介绍了一文搞懂SPI通信协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、简介

2、通信原理

3、通信特性

3.1、设备选择

3.2、设备时钟

3.2.1、时钟速率

3.2.2、时钟极性

3.2.3、时钟相位

3.3、四种模式

4、多从机模式

5、SPI优缺点


1、简介

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。

SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。

SPI通信原理很简单,需要至少4根线,单向传输时3根线,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)和CS/SS(片选):

  • MISO( Master Input Slave Output):主设备数据输入,从设备数据输出;
  • MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入;
  • SCLK(Serial Clock):时钟信号,由主设备产生;
  • CS/SS(Chip Select/Slave Select):从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。
一文搞懂SPI通信协议

一主设备一从设备模式

一文搞懂SPI通信协议

一主设备多从设备模式

2、通信原理

SPI主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输。

一文搞懂SPI通信协议

SPI数据通信的流程可以分为以下几步:

1、主设备发起信号,将CS/SS拉低,启动通信。

2、主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),因为SPI有四种模式,后面会讲到),它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。

3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(缓存长度不一定,看单片机配置),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。

4、从机(Slave)也将自己的串行移位寄存器(缓存长度不一定,看单片机配置)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

例如,下图示例中简单模拟SPI通信流程,主机拉低NSS片选信号,启动通信,并且产生时钟信号,上升沿触发边沿信号,主机在MOSI线路一位一位发送数据0X53,在MISO线路一位一位接收数据0X46,如下图所示:

一文搞懂SPI通信协议

这里有一点需要着重说明一下:SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。 

3、通信特性

3.1、设备选择

SPI是单主设备(Single Master)通信协议,只有一支主设备能发起通信,当SPI主设备想读/写从设备时,它首先拉低从设备对应的SS线(SS是低电平有效)。接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。如下图所示:

一文搞懂SPI通信协议

3.2、设备时钟

SPI时钟特点主要包括:时钟速率、时钟极性和时钟相位三方面。

3.2.1、时钟速率

SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。

3.2.2、时钟极性

根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。

CKP可以配置为1或0。这意味着你可以根据需要将时钟的默认状态(IDLE)设置为高或低。极性反转可以通过简单的逻辑逆变器实现。你必须参考设备的数据手册才能正确设置CKP和CKE。

  • CKP = 0:时钟空闲IDLE为低电平 0;
  • CKP = 1:时钟空闲IDLE为高电平1。

3.2.3、时钟相位

根据硬件制造商的不同,时钟相位通常写为CKE或CPHA。顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

  • CKE = 0:在时钟信号SCK的第一个跳变沿采样;
  • CKE = 1:在时钟信号SCK的第二个跳变沿采样。

3.3、四种模式

根据SPI的时钟极性和时钟相位特性可以设置4种不同的SPI通信操作模式,它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低),详情如下所示:

  • Mode0:CKP=0,CKE =0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。
  • Mode1:CKP=0,CKE=1:当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
  • Mode2:CKP=1,CKE=0:当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
  • Mode3:CKP=1,CKE=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
一文搞懂SPI通信协议

黑线为采样数据的时刻,蓝线为SCK时钟信号

举个例子,下图是SPI Mode0读/写时序,可以看出SCK空闲状态为低电平,主机数据在第一个跳变沿被从机采样,数据输出同理。

一文搞懂SPI通信协议

下图是SPI Mode3读/写时序,SCK空闲状态为高电平,主机数据在第二个跳变沿被从机采样,数据输出同理。

一文搞懂SPI通信协议

4、多从机模式

有两种方法可以将多个从设备连接到主设备:多片选和菊花链。

通常,每个从机都需要一条单独的SS线。如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他SS信号线的状态为高电平;如果同时将两个SS信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条MISO线上传输数据,最终导致接收数据乱码。

一文搞懂SPI通信协议

菊花链的最大缺点是信号串行传输,一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了。另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况。

一文搞懂SPI通信协议

5、SPI优缺点

  • 优点
  1. 无起始位和停止位,因此数据位可以连续传输而不会被中断;
  2. 没有像I2C这样复杂的从设备寻址系统;
  3. 数据传输速率比I2C更高(几乎快两倍);
  4. 分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
  5. 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
  6. 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
  • 缺点
  1. 使用四根信号线(I2C和UART使用两根信号线);
  2. 无法确认是否已成功接收数据(I2C拥有此功能);
  3. 没有任何形式的错误检查,如UART中的奇偶校验位;
  4. 只允许一个主设备;
  5. 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
  6. 没有定义硬件级别的错误检查协议;
  7. 与RS-232和CAN总线相比,只能支持非常短的距离;

摩托罗拉SPI协议手册:SPI摩托罗拉协议手册-嵌入式文档类资源-CSDN下载

 文章来源地址https://www.toymoban.com/news/detail-409657.html

到了这里,关于一文搞懂SPI通信协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SPI通信协议&SPI通信外设

    目录 SPI 介绍 硬件电路 移位示意图  软件SPI SPI时序基本单元  SPI时序​编辑 W25Q64  硬件电路 W25Q64框图 Flash操作注意事项 指令集  硬件SPI SPI框图  主模式全双工连续传输 非连续传输  推挽输出 ,高低电平都有很强的驱动能力,使得上升沿和下降沿都很迅速。   当ss为高电

    2024年02月10日
    浏览(51)
  • 一文搞懂idea中的根目录和路径(以Mybatis为例)

    项目根目录是你在文件系统中为整个项目选择的顶层目录。 它通常包含了项目的所有内容,包括源代码、构建配置文件、文档、测试文件等。 在版本控制系统中(如 Git),项目根目录通常是仓库的根目录。 在 IntelliJ IDEA 或其他 JetBrains IDE 中,内容根目录指的是一个模块(

    2024年03月21日
    浏览(42)
  • 一文搞懂I2S通信总线

    目录 1、物理特性 2、常见的I2S数据格式 2.1、I2S Philips标准 2.2、左对齐(MSB)标准 2.3、右对齐(LSB)标准 之前我们讲过I2C通信总线,本篇博文将讲一讲I2C的变种:I2S总线。 I2C和I2S都是由Philips公司(2006年迁移到NXP)发布的串行总线,I2S是在I2C之后发布,I2S专为传输音频数据而

    2024年01月16日
    浏览(41)
  • 通信协议(二)——SPI协议

    1.1 概念 SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于EEPROM、Flash、RTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以

    2023年04月08日
    浏览(38)
  • SPI通信协议及基于Arduino的SPI通信例程

    一、SPI通信协议介绍 SPI通信协议(Serial Peripheral Interface)是一种同步串行通信协议,由Motorola公司在1980年代初开发。SPI协议常用于单片机、嵌入式系统和外围设备之间的通信。 SPI协议使用四根线进行通信:时钟线(SCLK)、数据输入线(MOSI)、数据输出线(MISO)和从机选择

    2024年02月07日
    浏览(42)
  • 一文搞懂CAN和CAN FD总线协议

    1、CAN是什么 控制器 局域网总线(CAN,Controller Area Netw or k)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输 信号 ,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的 通信 ,以此取代昂贵而笨重的配电线束。 该协议的健壮性使

    2024年02月10日
    浏览(44)
  • SPI通信协议

    本文重点介绍的是SPI通信协议,内容是来自野火视频教程,本人只是做一些简单的记录和总结。 `

    2024年02月06日
    浏览(41)
  • SDIO(安全数字输入输出)/协议 三、一文搞懂SDIO

      目录 一、SDIO:安全数字输入输出  目录 定义 功能 二、SDIO协议 介绍 信号 协议 一般协议 写协议 读协议 命令 命令格式 命令应答 数据 三、一文搞懂SDIO 四、SDIO简介  五、SD卡引脚定义和图连接  六、SDIO协议简介 七、MMC、SD、TF、SDIO、SDMMC简介  SDIO_百度百科 SDIO(Secure

    2024年02月11日
    浏览(37)
  • 一文搞懂ByteBuffer使用与原理

    已知 NIO 中有三大组件: Channel , Buffer 和 Selector 。那么 Buffer 的作用就是提供一个缓冲区,用于用户程序和 Channel 之间进行数据读写,也就是用户程序中可以使用 Buffer 向 Channel 写入数据,也可以使用 Buffer 从 Channel 读取数据。 ByteBuffer 是 Buffer 子类,是字节缓冲区,特点如下

    2024年02月04日
    浏览(44)
  • 【【STM32-SPI通信协议】】

    STM32-SPI通信协议 •SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 •四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) •同步,全双工 •支持总线挂载多设备(一主多从) 既然是同步的,我们就会发

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包