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

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

3天内不再提示

SPI通信笔记:基础+动图+时序图+总结,一文吃透!

工程师看海 来源:硬件笔记本 作者:硬件笔记本 2025-07-29 14:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

原文授权自公众号:硬件笔记本

大家好,今天咱们来详细聊聊SPI接口,文章内容有点多,建议先收藏起来再慢慢看。

SPI现在已经成为MCU和外围设备之间最常用的通信方式了。它是一种同步、全双工、主从式的通信接口工作原理其实很直接:主机产生时钟信号,从机跟着这个时钟同步收发数据。允许双向传输,可以在同一时钟周期内进行主从设备的数据交换。

wKgZPGiIaBWAX4OmAAMyAiNf-bY767.png

这种设计让SPI既简单又高效,特别适合需要快速传输数据的场合。不过要注意的是,SPI没有标准的通信协议,不同厂家的设备可能会有差异,所以用的时候一定要仔细看芯片手册。

011

典型应用场景

SPI接口的核心优势在于它的简单性灵活性,典型应用场景包括:

1、传感器数据采集(如温度传感器、IMU),例如:TMP124芯片,它是由TI推出的工业级数字温度传感器,主打高精度+SPI接口组合,适合对测温有严苛要求的场景。

wKgZPGiIaBWAXDqtAABb1J-lRew552.png

2、存储器读写(Flash、EEPROM),比如小容量的AT25040,常用来存储配置参数和校准数据。

wKgZPGiIaBWABBpAAABBjKl3iKk304.png

3、数字信号转换(ADC/DAC)。比如通用ADC芯片MCP4921,它是Microchip推出的低成本12位数字模拟转换器(DAC),主打简单易用+SPI接口组合,适合需要数字控制模拟输出的场景。

wKgZPGiIaBWAGCh2AAAd-stUY08410.png

4、显示驱动(OLEDTFT屏幕),例如咱们常用的0.96寸OLED屏,一般有I2C和SPI两种接口,虽然SPI多占用两个IO口,但速度比I2C快很多。

wKgZPGiIaBWAZHdZAAWcvFPilKg179.png

021

SPI的连接方式和工作速度

连接方式

SPI接口可以是3线式或4线式,这里主要介绍常用的4线SPI接口,4线SPI器件有四个信号:

片选(CS):片选信号,低电平有效

时钟(SPI CLK, SCLK):时钟信号由主机产生

MOSI:主机输出,从机输入

MISO主机输入,从机输出

wKgZPGiIaBWAG1UtAABUjYREXu8824.png

主机和从机之间的SPI连接 这里要注意一下,主机和从机的MOSI和MISO的接线,这个跟串口TX,RX不一样,很多人容易搞错,主机的MISO接从机的MISO,主机的MOSI接从机的MOSI,直连不交叉。 那怎么判断哪个是主机呢?咱们产生时钟信号的器件称为主机。主机和从机之间传输的数据与主机产生的时钟同步。另外SPI接口只能有一个主机,但可以有一个或多个从机。关注公众号:硬件笔记本 来自主机的片选信号用于选择从机。这通常是一个低电平有效信号,拉高时从机与SPI总线断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。

工作速度

SPI速度的典型范围:1 MHz至100 MHz(4 Mbps至400 Mbps),具体速率取决于器件等级:

消费级IC:1-10 MHz(4-40 Mbps) 工业级器件:10-25 MHz(40-100 Mbps) 但咱们在实际应用中,会受限于外设支持(如Flash芯片可达80 MHz,传感器通常8 MHz)

这里再插一句,对比I2C来说,I2C速度就低太多了:标准模式100Kbps,高速模式5Mbps(理论值),但是I2C会少占用两个IO口,所以I2C速度胜在省引脚,SPI赢在速度快。

031

数据传输

SPI的数据传输,整个过程是这样的:

首先,作为主控的设备要产生时钟信号(SCLK),这个信号就像通信的节拍器。同时,主机要通过拉低片选信号(CS)来选中要通信的从设备,这个CS信号通常是低电平有效,所以主机要给它一个逻辑0。

SPI最厉害的地方在于它是全双工的,这意味着主机可以通过MOSI线往外发送数据的同时,从设备也能通过MISO线往主机发送数据,两边是同时进行的。具体来说,主机把数据一位一位地放到MOSI线上移出去,同时又在MISO线上一位一位地收数据。

所有这些数据的发送和接收都是严格跟着时钟信号的边沿走的,你可以选择在时钟的上升沿或者下降沿来采样数据。至于每次通信要传多少位数据,这个得看具体器件的规格书,不同芯片的要求可能不一样。

咱们来看两张动图

wKgZPGiIaBaAK6YJAAElvIE8UBY687.gif

wKgZPGiIaBaAIGnfAANvDuistc0786.gif

这个过程中要注意三点:

1、是时钟必须由主机产生;

2、CS信号要提前拉低选中从机;

3、数据的收发是同步进行的,不是先发后收或者先收后发。这种设计让SPI既简单又高效,特别适合需要快速传输数据的场合。

原文授权自公众号:硬件笔记本

041

工作模式

SPI有4种工作模式,主要通过CPOL和CPHA两个参数来配置:

wKgZPGiIaBaAAF3GAADX6H8UT1A604.png

如下是SPI模式0的时序图。

传输的开始和结束用绿色虚线表示;采样边沿用橙色虚线表示;移位边沿用蓝色虚线表示。当然,这些图形仅供参考。要成功进行SPI通信,必须参阅器件的数据手册并确保满足器件的时序规格。

wKgZPGiIaBaAOVUpAAEroTRsMNM137.png

如下是SPI模式1的时序图。此时:

时钟极性为0,表示时钟信号的空闲状态为低电平;

时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

wKgZPGiIaBaAbP1FAAD9nT2P9dk815.png

如下是SPI模式2的时序图。此时:

时钟极性为1,表示时钟信号的空闲状态为高电平。

时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

wKgZPGiIaBaANYRQAAF6rC14DrA437.png

如下是SPI模式3的时序图。此时:

时钟极性为1,表示时钟信号的空闲状态为高电平。

时钟相位为0,表示数据在上升沿采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。

wKgZPGiIaBaAICnxAAGqzx2A8-s880.png

051

多从机配置

咱们的多个从机可与单个SPI主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。

常规SPI模式:

wKgZPGiIaBaAZ3xbAADBjpjXj1Y866.png

在咱们SPI常规连接模式下,咱们主机必须为每个从设备单独配备一个片选信号线(CS)。当主机将某个从机的CS信号拉低时,这个从机就被选中,此时MOSI和MISO线上的时钟和数据信号就可以和这个特定的从机进行通信。关注公众号:硬件笔记本

这里有个重要限制:同一时间只能有一个从机的CS信号被拉低,如果同时拉低多个CS信号,会导致多个从机同时在MISO线上返回数据,造成数据冲突,主机就无法分辨这些数据到底来自哪个从机。

随着系统连接的从机数量增多,主机需要提供的片选线数量也会相应增加。比如连接8个从机就需要8根独立的CS线,这会快速占用主机的IO口资源,从而限制了系统能够支持的从机数量。为了解决这个问题,可以采用一些扩展技术,比如使用多路复用器(MUX)来产生片选信号。不过这种方案会增加一些硬件复杂度,需要额外添加多路复用器芯片。

菊花链模式:

wKgZPGiIaBeAYcLLAACk0cxnIFk342.png

在SPI菊花链连接方式下,所有从设备共享同一个片选信号(CS),从一个从机传播到下一个从机。具体工作过程是:主机发出时钟信号(SCLK)后,数据首先传输到第一个从机,第一个从机将数据提供给第二个从机,这样依次传递下去。所有从机都使用同一个时钟信号进行同步。

这种连接方式的特点是数据传输需要更多的时钟周期。如下图,比如在一个8位数据宽度的系统中,如果要让第三个从机收到数据,就需要24个时钟脉冲(3个从机×8位),而在常规SPI模式下只需要8个时钟脉冲。这是因为数据需要依次通过每个从机,每个从机都会对数据进行处理和转发。

wKgZPGiIaBeAcBTlAAFbK052Pfo446.png

菊花链配置:数据传播

需要注意的是,不是所有SPI设备都支持菊花链模式。在使用这种连接方式前,必须仔细查看所用芯片的技术手册,确认其是否支持菊花链功能。有些芯片可能只支持常规的独立片选模式。此外,菊花链模式虽然节省了片选信号线,但会降低通信效率,因此要根据实际应用需求权衡选择。

061

总结

SPI接口虽然简单,但在实际应用中需要注意很多细节:

1、接线要正确(直连不交叉);

2、模式要匹配(看器件手册);

3、多从机时要合理选择连接方式。

记住这些要点,就能用好SPI接口啦!如果遇到问题,最靠谱的办法就是查阅器件的数据手册。

原文授权自公众号:硬件笔记本 特此鸣谢!

扫码关注,看更多技术文章

wKgZPGiIaBeAaXdeAAB8M7_Wfjg826.jpg

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

    关注

    17

    文章

    1866

    浏览量

    99857
  • 通信接口
    +关注

    关注

    3

    文章

    260

    浏览量

    31796
  • SPI接口
    +关注

    关注

    0

    文章

    278

    浏览量

    36398
  • SPI通信
    +关注

    关注

    0

    文章

    38

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AD7193如何通过spi时序来进行模拟spi通信编程?

    本人准备应用AD7193,现在直无法实现AD7193 的spi通信,请问如何通过spi时序
    发表于 12-21 07:36

    如何看时序,如何用时序

    如何看时序,如何用时序?求些详细的资料。
    发表于 01-21 12:29

    什么是SPISPI通信过程​是怎样的

    目录SPI主线协议——ESP32学习笔记零、前言、什么是SPI?二、通信过程​三、极性和相位四、总结
    发表于 02-17 06:52

    求分享下FlexIO时序吗?

    引脚:FlexIO_D6 来自主控端的 SPI 固定为模式 3(即 CPOL = 1 和 CPHA = 1)。所以 uC FlexIO 将支持模式 3。 可以分享下 FlexIO 时序
    发表于 05-04 08:17

    AD9945与STM32之间通过SPI通信通信时序怎么写?

    我最近做个CCD的项目,需要用到AD9945,因为他的频率高,但是AD9945怎么与STM32F103外部引脚连接,他输出的12位并行数据接到哪里?还有AD9945与STM32之间通过SPI通信
    发表于 12-05 08:28

    plc时序怎么画_plc时序编程方法

    时序是描述设备工作过程的时间次序,也是用于直观分析设备工作过程的种图形。如电子技术中的触发器、定时器、计数器等均用时序
    发表于 10-23 09:39 10.1w次阅读
    plc<b class='flag-5'>时序</b><b class='flag-5'>图</b>怎么画_plc<b class='flag-5'>时序</b><b class='flag-5'>图</b>编程方法

    时序和类的关系

    时序是在软件系统设计中直接和程序代码相关联的,准确地说,程序代码是由类直接产生,而时序
    发表于 10-29 11:21 7251次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>图</b>和类<b class='flag-5'>图</b>的关系

    什么是时序_时序怎么看_教你如何看懂时序

    时序在有些教材上,又被翻译为顺序,两者在表述上虽然有些差别,但是大体都是准确的,可能称之为时序
    发表于 12-11 19:31 17.2w次阅读
    什么是<b class='flag-5'>时序</b><b class='flag-5'>图</b>_<b class='flag-5'>时序</b><b class='flag-5'>图</b>怎么看_教你如何看懂<b class='flag-5'>时序</b><b class='flag-5'>图</b>

    SPI通信笔记

    SPI通信概述SPI,Serial Peripheral Interface,串行外设接口。1、总线构成:时钟线SCK(主机用于控制通信
    发表于 12-09 17:21 6次下载
    <b class='flag-5'>SPI</b><b class='flag-5'>通信笔记</b>

    SPI主线协议——ESP32学习笔记

    目录SPI主线协议——ESP32学习笔记零、前言、什么是SPI?二、通信过程​三、极性和相位四、总结
    发表于 12-22 19:23 18次下载
    <b class='flag-5'>SPI</b>主线协议——ESP32学习<b class='flag-5'>笔记</b>

    SPI总线协议及SPI时序详解

    的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 SPI个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序
    发表于 02-11 15:41 31次下载
    <b class='flag-5'>SPI</b>总线协议及<b class='flag-5'>SPI</b><b class='flag-5'>时序</b><b class='flag-5'>图</b>详解

    关于红外通信原理时序介绍

    关于红外通信原理时序介绍,帮助单片机写代码程序
    发表于 06-26 09:25 0次下载

    UML时序详解

    本篇介绍了UML时序的基础知识,并通过visio绘制个物联网设备WIFI配网的UML时序实例,来介绍UML
    的头像 发表于 05-16 09:09 3660次阅读
    UML<b class='flag-5'>时序</b><b class='flag-5'>图</b>详解

    SPI子系统之SPI时序

    ,硬件设计必须注意信号质量风险,软件开发人员也要会看波形。 这里的参数,spi 驱动不需要设置,但是半导体厂商提供的 spi 控制器驱动中,可以修改这些参数
    的头像 发表于 07-27 10:51 6209次阅读
    <b class='flag-5'>SPI</b>子系统之<b class='flag-5'>SPI</b><b class='flag-5'>时序</b><b class='flag-5'>图</b>

    10张:秒懂各种常用通信协议原理

    这绝对是个宝藏级别的,这些显示电子系统中信号波形的,有助于帮助我们理解传输的机理。Chrent1、
    的头像 发表于 11-07 08:06 1723次阅读
    10张<b class='flag-5'>动</b><b class='flag-5'>图</b>:秒懂各种常用<b class='flag-5'>通信</b>协议原理