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

一、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 的波形是:

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值