SPI 通讯详解——以 OSI 模型分析 物理层、数据链路层和应用层

硬件SPI通信协议 (Serial Peripheral Interface,串行外设接口)是一种全双工同步串行通信接口,用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达25MHz以上。SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。 阅读详情
AI摘要

本文详细介绍了SPI通信协议,涵盖其简介、特性、物理层、数据链路层和应用层。重点讲解了SPI的全双工通信优势、四种工作模式及其配置方法,并结合93C46 EEPROM实例说明应用层的具体实现。

一、SPI 简介

1.1 SPI 简介

SPI 是一种主从式、全双工、同步串行通信协议,由 Motorola 在 1980 年代提出,常用于 MCU 与外设 (如 Flash、ADC、传感器、显示屏) 之间的高速通信。

Motorola 所定义的 SPI 标准为业界广泛引用,但不同半导体公司的实施细节可能有所不同,这些区别体现在寄存器设置、信号定义、数据格式等。业界没有统一的 SPI 标准,具体应用需要参考特定器件手册。

1.2 特性

1.2.1 优点

  • 支持全双工通信
  • Push-Pull 驱动性能相比 Open Drain 信号完整性更好,支持高速应用 (100MHz以上)
  • 协议支持字长不限于 8bits,可根据应用特点灵活选择消息字长
  • 相比 I2C 和 SMbus 节省上拉电阻
  • 相比 I2C 和 SMbus 不需要仲裁机制
  • 从设备使用主设备时钟,节约时钟要求
  • 从设备无需地址寻址

1.2.2 缺点

  • 相比 I2C 两根线,SPI 四根线更多
  • 没有寻址机制,只能靠设备片选 (chip select) 选择不同从设备
  • 没有数据流控制 (但主设备可以通过延缓时钟边缘降低传输速度)
  • 没有从设备接收数据 ACK,主设备对于发送成功与否不得而知
  • 典型应用只支持单主控
  • 没有定义数据校验机制
  • 没有统一的国际组织维护,变种多不利于不同厂商设备的互操作性 (interoperability)
  • 相比于 RS232、RS422、RS485 和 CAN,SPI 传输距离短
  • 不支持热插拔

二、的物理层

2.1 物理层定义

物理层是 OSI 模型的第一层 (最底层),它负责 在物理媒介上发送和接收原始比特流,也就是把 0 和 1 转换成实际可传输的信号。它完全和数据内容无关,只关注 信号如何在介质上传播。

物理层的主要定义有:

  • 电气特性:电压幅度、逻辑电平、信号极性 (高电平/低电平表示 0/1)
  • 传输速率:比特率 (bps) 或以太网的 (Mbps) 等
  • 物理拓扑:点对点 (串口) 、总线 (CAN)、星型 (以太网) 等
  • 传输模式 :单工、半双工、全双工

    2.2 连线定义

    SPI 只有 4 条基本线:

    名称方向 (主→从)作用
    SCLK输出时钟信号
    MOSI输出主设备发送数据
    MISO输入从设备返回数据
    SS/CS输出片选信号 (低有效)

    其连线方式如下:

    其中 SS/CS 是芯片的片选信号,置高或置低则代表选中这个从设备,在 SPI 总线中,同一时刻只能有一个从设备被选中。

    2.3 电气规范与原理图

    SPI 不使用差分电路,仅是高低电平判断逻辑,常见逻辑电平标准如下:

    逻辑标准逻辑 1 (高)逻辑 0 (低)典型工作电压说明
    TTL≥ 2.0V≤ 0.8V5V早期MCU常见
    CMOS 5V≥ 0.7×VCC≤ 0.3×VCC5V常见于老芯片
    CMOS 3.3V≥ 2.31V≤ 0.99V3.3V当前主流
    CMOS 1.8V≥ 1.26V≤ 0.54V1.8V低功耗设备

    2.3 通讯距离

    SPI 是板级通讯,一般不会进行过长的数据传输:

    SPI时钟频率推荐最大距离应用场景
    50 MHz< 10 cmMCU 与 Flash、ADC、DAC 同板通信
    20 MHz< 20 cm模块间、主板与子板
    10 MHz< 30 cm短排线连接、屏幕或传感器
    5 MHz< 50 cm稍长排线、屏蔽线连接
    1 MHz< 1 m工业布线、屏蔽双绞线
    400 kHz1–2 m降速通信、低噪声环境
    100 kHz3–5 m(极限)带隔离器或差分驱动器的 SPI

    2.4  通讯速率

    SPI 是 同步串行通信,每个时钟周期传输 1 位数据 (在全双工时主从各自同时传输一位)。
    因此:

    数据速率 (bps) = 时钟频率 (Hz) × 每时钟传输的位数

    也就是说,SPI 每时钟传输的位数就是 1,时钟频率等于 bps。假设主机 SPI 的时钟是 1MHz,那么总线也获得 1Mbps 的传输速度。

    但是由于 SPI 是帧结构通信,一帧包括,片选信号、地址/命令字节、数据字节和等待状态。实际数据率约为理论速率的 60%~95%。

    三、数据链路层

    物理层定义了 0 和 1 的信号形式。数据链路层则提供可靠的数据传输,进行帧的封装、错误检测、流量控制。

    • 帧封装:把目标数据封装成一帧 (Frame),加上帧头、帧尾,使接收方能识别帧的起止。
    • 物理寻址:每个链路设备都有一个地址,用于在同一总线中识别发送方和接收方。
    • 差错检测与纠正:CRC、奇偶校验等方式检测 (有时纠正) 比特错误。
    • 流量控制:控制发送速度,防止发送方过快导致接收方缓冲区溢出。
    • 重传控制:通过确认(ACK)机制与超时重传,提高传输可靠性。

     2.3 SPI 的四种模式

    一段 SPI 波形实际如下图:

    当选中这个设备后,SS 片选即拉高,之后 SCK 时钟线开始工作,在 SCK 每个上升沿时刻,如果 MOSI 为高电平,则为 1,为 低电平则为 0。

    以上的波形为 SPI 0 模式,其实 SPI 共有 0、1、2、3 四种模式。

    不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的 SPI 模式进行配置,通过 CPOL (时钟极性) 和CPHA (时钟相位) 来控制我们主设备的通信模式,具体如下:

    时钟极性 (CPOL) 定义了时钟空闲状态电平:

    • CPOL=0,表示当 SCLK=0 时处于空闲态,所以有效状态就是 SCLK 处于高电平时
    • CPOL=1,表示当 SCLK=1 时处于空闲态,所以有效状态就是 SCLK 处于低电平时

    时钟相位 (CPHA) 定义数据的采集时间:

    • CPHA=0,在时钟的第一个跳变沿 (上升沿或下降沿) 进行数据采样,在第2个边沿发送数据
    • CPHA=1,在时钟的第二个跳变沿 (上升沿或下降沿) 进行数据采样,在第1个边沿发送数据
    SPI 模式CPOLCPHA空闲时 SCK 时钟采样时刻 MIOS输出时刻 MOSI
    000低电平第1个边沿 (奇)第2个边沿 (偶)
    101低电平第2个边沿 (偶)第1个边沿 (奇)
    210高电平第1个边沿 (奇)第2个边沿 (偶)
    311高电平第2个边沿 (奇)第1个边沿 (奇)

    2.3.1 SPI 0 模式

    SPI 0 模式下,SPOL = 0,CPHA = 0

    可见 SCL 空闲状态是低电平,MOSI 在第一个边沿传输。

    2.3.1 SPI 1 模式

    SPI 0 模式下,SPOL = 0,CPHA = 1

    可见 SCL 空闲状态是低电平,MOSI 在第二个边沿传输。

    2.3.1 SPI 2 模式

    SPI 0 模式下,SPOL = 1,CPHA = 0

    可见 SCL 空闲状态是高电平,MOSI 在第一个边沿传输。

    2.3.1 SPI 3 模式

    SPI 0 模式下,SPOL = 1,CPHA = 1

    可见 SCL 空闲状态是高电平,MOSI 在第二个边沿传输。

    四、的应用层

    4.1 应用层定义

    OSI 模型中的应用层 (Application Layer) 是第七层,也是最靠近用户的一层。它直接为用户应用程序提供网络服务,是网络通信的最上层接口。

    应用层的主要作用是:

    • 为用户或软件提供网络访问接口
    • 定义应用程序之间如何通信
    • 规定数据格式、消息结构、命令集等

    4.2 SPI 驱动 93C46 EEPROM 格式

    93C46 是一款容量为 1 Kbit (1024 位) 的串行 EEPROM 应用层以驱动 93C46 EEPROM 举例:

    其一帧包括:起始位、操作码、地址和数据,如果我们使用七位地址、八位数据模式读写,则一帧的内容如下:

    指令起始位 (1位)操作码 (2位)地址 (7位)数据  (8位)
    写数据1017位8位
    读数据1107位8位

    如果我们要向 000 0001 地址写入 0000 1111,这样我们的 MOSI 的波形是:

    SPI 通信协议详解 SPI(串行外围设备接口) 通信协议是 Motorola 公司首先在其MC68HCXX 系列处理器上定义的。SPI 接口是一种高速的全双工同步的通信总线,已经广泛应用在众多 MCU、存储芯片、AD 转换器和 LCD 之间。由SPI连成的串行总线是一种三线同步总线,总线上可以连接多个可作为主机的 MCU,装有SPI接口的输出设备,输入设备如液晶驱动、A/D 转换等外设,也可以简单连接到单个 TTL 移位寄存器的芯片。总线上允许连接多个能作主机的设备,但在任一瞬间只允许有一个设备作为主机。 阅读详情

    相关推荐

    SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)

    SPI接口扫盲 为何要写这篇文档?百度上找出来的SPI接口中文描述都说的太过简略,没有一篇文档能够详尽的将SPI介绍清楚的。wikipedia英文版[注释1]中,SPI接口介绍的很好,但是毕竟是英文版,读起来终究不如母语舒服,所以我结合自己的工作经验,对其进行了汉化、整理。 个人SPI接口相关经验: 1. 参与过国产某芯片SPI接口样品验证、SPI接口服务DEMO开发(C语言)。 2. 使

    douqingl的博客 4万+

    SPI协议详解(Standard SPI、Dual SPI和Queued SPI)

    (1)通常我们说的SPI就是Standard SPI,有4根信号线,分别为CLK、CS、MOSI和MISO,也就是上面介绍的SPI协议;(2)Dual SPI:只是针对SPI Flash而言,不是针对所有SPI外设。对于SPI Flash,全双工并不常用,因此扩展了mosi和miso的用法,让它们工作在半双工,用以加倍数据传输。

    weixin_42031299的博客 4万+

    通讯协议:UART、RS232、RS484、USB、TTL、COM、SPI、I2C等

    UART、RS232、TTL、USB、COM、SPI、I2C

    hyzzoe的博客 1980

    SPI协议

    什么是SPI SPI主从模式 SPI信号线 SPI设备选择 SPI数据发送接收 SPI通信的四种模式 SPI的通信协议 SPI的三种模式 SPI原理图连接 STM32中SPI初始化配置 什么是SPI SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高速的,全双工,同步...

    u010783226的专栏 1884

    以太网,OSI与TCP/IP

    以太网 以太网(Ethernet)是一种计算机局域网技术,目前应用最普遍的局域网技术。 IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。 以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用集线器来进行网络连接和组织。如此一来...

    weixin_42490436的博客 2052

    对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释

    SPISPI(Serial Peripheral Interface:串行外设接口); SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可

    始则转俗成真,终乃回真向俗! 2392

    IIC 通讯详解——以 OSI 模型分析 物理层、数据链路层和应用层

    摘要:IIC(Inter-Integrated Circuit)是由Philips提出的串行通信总线标准,采用两根信号线(SCL时钟线和SDA数据线)实现主从设备间的短距离通信。其特点包括半双工通信、多主多从结构、7/10位地址寻址、支持多种速率(100kbit/s至5Mbit/s)以及硬件开销小等优点,但也存在速率较低、总线电容限制通信距离等缺点。物理层定义了电气特性和拓扑结构,数据链路层则负责数据封装、差错检测和流量控制。IIC广泛应用于嵌入式系统,适用于板内模块间通信和传感器连接等场景。

    nullccc的博客 1349

    信号完整性入门:为什么工程师总爱用dB来描述衰减?

    本文深入探讨了信号完整性分析中工程师偏爱使用dB(分贝)单位描述衰减的原因。dB通过对数转换,将大动态范围的乘除关系简化为加减运算,极大地方便了多级系统分析和链路预算计算。文章重点解释了-3dB点的核心意义,即功率衰减一半的临界状态,并阐述了其在评估信道带宽、插入损耗与回波损耗等关键参数中的实际应用,是高效工程思维和沟通的重要工具。

    weixin_29263201的博客 386

    UART 和 USART 通讯详解——以 OSI 模型分析 物理层、数据链路层和应用层

    摘要:UART(通用异步收发器)是一种点对点串行通信协议,通过起始位和波特率实现异步数据传输。其特点包括:仅需TX/RX两条线、无需时钟线、支持全双工通信,但存在波特率需严格匹配、不支持总线结构等局限。UART协议涵盖数据链路层(帧结构、校验)和物理层(电平标准),物理层可采用TTL、RS-232/485/422等不同电气规范,其中RS-485支持多节点组网。应用层需自定义协议实现寻址、校验等功能,典型方案包括帧头标识、Modbus CRC校验及主从式轮询机制。该技术广泛用于嵌入式系统,具有简单可靠的特点,

    nullccc的博客 936

    从亚稳态到稳定传输:深入解析CDC跨时钟域同步的核心技术与设计实践

    本文深入解析了CDC(跨时钟域同步)技术的核心问题与解决方案,重点探讨了亚稳态现象及其危害,详细介绍了同步器设计、MTBF计算方法以及单bit和多bit信号同步的实战技巧。通过Verilog代码示例和工程实践案例,帮助读者掌握从亚稳态到稳定传输的关键技术,提升数字电路设计的可靠性。

    weixin_32822843的博客 247

    MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)

       分析大脑解剖学差异最常用方法之一是基于体素的形态学方法(voxel-based morphometry, VBM)。 VBM的基本思想是测量大脑组织,尤其是灰质的局部浓度的差异。在大脑的每个体素处进行操作,然后在两个或多个实验组之间进行统计比较,从而在受调查的组之间建立特定大脑区域中脑组织浓度的统计学显着差异。 VBM分析基于(高分辨率)MRI脑部扫描,涉及大量处理步骤,主要是空间归一化,分割,平滑和统计分析,最终结果是统计图,显示了各组之间组织类型明显不同的区域[^1]。 参考 [^1] ..

    意疏的学习笔记 3万+

    OSI(Open System Interconnection)网络模型

    OSI(Open System Interconnection)网络模型 OSI模型是国际互连网标准化组织(International Standards Organizations ISO)所定义的,为了使网络的各个层次有标准。这个模型一般被称为“ISO OSI(...

    dichuangheng8094的博客 298

    保姆级教程!Python爬虫爬取知乎回答,保存为Markdown文件

    本教程实现了知乎公开回答的完整爬取与Markdown保存,核心流程为「请求页面→解析作者/时间/正文/图片→下载图片→保存MD文件」,步骤清晰,代码可直接复用关键特性:支持合并/单文件两种保存模式、自动下载图片并引用、中文乱码防护、非法文件名过滤,满足日常整理知乎回答的需求新手友好:无需复杂配置,仅需修改知乎问题URL即可运行,全程无坑,5分钟内可看到运行结果灵活扩展:支持进阶优化(登录、分页、格式完善),可根据个人需求调整功能。

    专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1232

    关于通讯协议的一些理解

    *传输层:**网络层的ip帮我们区分子网,数据链路层层的mac帮我们找到主机,电脑上可能同时开启qq,微信,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。这就像写信,发送者的地址(源地址)就是你家的地址,接收者地址(目标地址)就是对方的收信地址,你家的路由器就相当于邮局。用户使用的都是应用程序,均工作于应用层,互联网是开放的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式。

    weixin_46304704的博客 1404

    手把手教你学Simulink实例--基于Simulink的电动汽车无线充电效率优化仿真

    ​市场规模:2025年全球无线充电市场规模将达$27亿(MarketsandMarkets数据)​技术标准Qi v1.3(最高150W)WiTricity(200W动态功率)ISO 17163(道路车辆无线充电)​节能效果:每kWh充电减少120W损耗(按每天8小时)​成本分析线圈成本:35vs58(传统方案)效率提升带来的续航增加:15km/100km。

    xiaoheshang_123的博客 345

    Redhawk:什么是timing window?

    STA timing file中timing window的作用和计算方式

    m0_61544122的博客 1万+

    工业通讯接口与协议核心区别:从物理层到应用层的实战解析

    在工业自动化、物联网和嵌入式系统中,通讯接口与通讯协议是构建稳定数据交互的基础。通讯接口定义了物理层的连接规范,如RS-485、CAN、以太网等,负责信号的可靠传输,决定了通讯距离、速率和抗干扰能力。而通讯协议则位于逻辑层,如Modbus、Profinet、EtherCAT等,规定了数据的组织、解释和交互规则,确保设备间能够正确理解彼此的信息。理解两者的分野,对于搭建高可靠性的工业通讯系统至关重要。在实际应用中,接口承载协议,协议赋予接口意义,例如RS-485常与Modbus RTU协议结合,以太网则支持P

    weixin_31423955的博客 329

    python实现下载和离线安装包环境

    导出当前电脑python安装的所有包列表requirement.txt。

    m0_60352504的博客 1676

    网络通信-TCP/IP及OSI基础分析

    分析TCP/IP与OSI七层模型的既有层次关系及历史关系!分析网络通信的硬件资源...

    Dahe.qu 439

    万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

    YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

    专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

    数学建模模型总结

    这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

    物联网通讯之以太网通讯 + W5500芯片

    是韩国半导体公司WIZnet提供的一款高性价比的以太网芯片。其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用,安全稳定,是物联网设备的首选解决方案。W5500 集成了 TCP/IP 协议栈,10/100M 以太网数据链路层(MAC)及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。久经市场考验的WIZnet全硬件 TCP/IP 协议栈支持 TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE协议。

    qq_47902937的博客 955

    efm32 入门.pdf

    本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

    通讯协议(UART、RS232、RS485、IIC、SPI)

    能看懂CAN通讯协议和485通讯协议吗?有没有相关的工作经验RS485是一种通信接口的标准,是从RS232/422发展来的,CAN通信是另一种通讯总线和通讯协议,常用在汽车里。

    ilovemyhair的博客 402

    精雕软件(JDpaint) 5.5 绿色版

    精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

    OV9734 DATASHEET,完整规格书

    OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

    《嵌入式通讯协议栈实战》 1

    所有嵌入式设备都需要通讯。I2C 读传感器、SPI 写 Flash、UART 打日志、CAN 发控制指令、Modbus 读变频器数据——这 5 种协议构成了嵌入式工程师的"通讯基本功"。

    Lumos6fly的博客 212

    OSI七层网络模型

    概述: OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。 注意: 上面的teln...

    484

    从0开始Modbus RTU通信到编程实战(1)

    本文从通信模型出发,介绍了Modbus通信及其在串行链路上的实现。

    m0_63509102的博客 1720
    上一篇: 实现 RTOS 操作系统 【二】临界区保护、调度锁、优先级
    下一篇: IIC 通讯详解——以 OSI 模型分析 物理层、数据链路层和应用层
    崔佳宇_
    崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
    博客等级 码龄10年 1万+粉丝 173原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值