前言:在嵌入式系统中,外设通信是非常重要的一部分。STM32C8T6 作为一款应用广泛的单片机,支持多种串行通信协议,其中 SPI(Serial Peripheral Interface)串行外设接口 以其速度快、结构简单的特点,被广泛应用于 Flash 存储器、OLED 屏幕、AD/DA 转换器、传感器等外设的通信中。

目录

一、什么是 SPI 通信?

二、SPI 的硬件连接方式

三、SPI 的时序基础

1. 起始与终止条件

2. SPI 的 4 种工作模式

四、SPI 的数据交换机制

1. 发送指令

2. 指定地址写数据

3. 指定地址读数据

五、SPI 和其他通信协议对比

六、总结


一、什么是 SPI 通信?

SPI(Serial Peripheral Interface)是由 Motorola 公司提出的一种同步串行通信协议。它采用主从模式进行数据传输,支持全双工通信,通信速度通常比 I2C 更高,且协议本身更加简单。

SPI 的基本特征包括:

  • 同步通讯(由时钟线控制数据传输节奏)

  • 全双工(可以同时发送和接收数据)

  • 一主多从架构(一个主设备可以控制多个从设备)

  • 不需要设备地址(通过片选线决定通信对象)

SPI 协议通常由四根信号线构成:

信号线 名称 说明
SCK Serial Clock 时钟线,由主机输出
MOSI Master Output Slave Input 主机输出,从机输入
MISO Master Input Slave Output 从机输出,主机输入
SS/CS Slave Select 从机选择信号(低电平有效)

二、SPI 的硬件连接方式

在真实电路中,SPI 的连接方式遵循以下原则:

  • 所有从设备的 SCK、MOSI、MISO 是并联的

  • 主机通过不同的 SS 引脚 来选择不同的从设备

  • 主设备通过拉低某一条 SS 线来选中相应的从机

  • 从机只有在 SS 为低时才参与通信

也就是说,当多个 SPI 设备共用一条 SPI 总线时,片选信号是区分不同从机的关键点

在 STM32 的配置中,一般设置:

  • 输出引脚:推挽输出

  • 输入引脚:浮空输入或上拉输入

这些硬件连接方式决定了 SPI 能够在同一总线上连接多个设备而互不干扰。

三、SPI 的时序基础

1. 起始与终止条件

SPI 通信依赖 SS 信号控制开始与结束:

  • 起始条件: SS 由高电平 → 低电平

  • 终止条件: SS 由低电平 → 高电平

只有当 SS 处于低电平时,主从设备之间才能进行数据交换。

2. SPI 的 4 种工作模式

SPI 一共有 4 种工作模式,由 CPOL(时钟极性)和 CPHA(时钟相位)两位决定:

模式 CPOL CPHA 空闲状态 数据采样方式
模式0 0 0 SCK 低电平 第一个边沿采样
模式1 0 1 SCK 低电平 第二个边沿采样
模式2 1 0 SCK 高电平 第一个边沿采样
模式3 1 1 SCK 高电平 第二个边沿采样

它们的区别在于:

  • CPOL 决定空闲时钟电平

  • CPHA 决定在第几个边沿采样数据

不同的设备要选择不同的 SPI 模式,如果主从模式不匹配,将会导致通信失败。

四、SPI 的数据交换机制

SPI 的一个非常重要的特性是:全双工传输

这意味着:

  • 主机在发送数据的同时

  • 从机也在向主机发送数据

  • 每发送 1 个字节,就会接收 1 个字节

因此,在 SPI 中并不存在“只写或只读”的情况,读操作本质上也是在发送数据,只是发送的是无意义数据(例如 0xFF 或 0x00)。

1. 发送指令

主设备选中从设备后,通过 MOSI 发送指令,例如 0x06 这样的写使能指令,从机在 MISO 上返回状态数据。

2. 指定地址写数据

SPI 设备(比如 SPI Flash)在写数据时的流程一般为:

  1. 拉低 SS,选中从机

  2. 发送写指令(如 0x02)

  3. 发送 24 位地址(高位在前)

  4. 连续写入数据

  5. 拉高 SS,结束通信

这是一种非常典型的 SPI 写时序结构。

3. 指定地址读数据

读数据的过程与写数据非常类似:

  1. 拉低 SS,选中从机

  2. 发送读指令(如 0x03)

  3. 发送目标地址

  4. 接收从机返回的数据

  5. 拉高 SS,结束通信

这种方式常见于:Flash、EEPROM、传感器寄存器读取等应用。

五、SPI 和其他通信协议对比

协议 引脚数量 是否同步 通信方式 速度 使用复杂度
SPI 4根 同步 全双工 很快 简单
I2C 2根 同步 半双工 中等 较复杂
UART 2根 异步 全双工 较慢 最简单

虽然 SPI 占用 IO 较多,但它的速度和效率非常高,因此在对实时性要求比较高的场合非常常用,比如:

  • OLED 屏幕

  • 高速 ADC

  • 外部 Flash

  • 触控芯片

  • 显示驱动芯片

六、总结

SPI 是 STM32 中极其重要且常用的一种通信方式,掌握 SPI 的基本原理,是嵌入式开发中的必修课。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐