Skip to content

SPI 通信协议:从零开始的逐步认知

你好!你已经了解了屏幕模块的基本知识,现在我们来深入理解 SPI 通信协议。我会按照四个问题的步骤,一步一步带你认识它。

整体的通信并控制屏幕显示的数据流向过程(单向)

ESP32-S3(你的代码)
    ↓ SPI总线(SCLK + MOSI)
ST7789V2(屏幕控制芯片)
    ↓ 内部GRAM(显存)
TFT液晶面板(你看到的画面)

从 ESP32-S3 到 TFT 面板


1. 为什么要用 SPI?(背景)

问题的起点:单片机怎么"说话"给屏幕听?

你的 ESP32-S3 是一个"大脑",ST7789V2 是屏幕的"控制芯片"。它们是两个独立的芯片,要让屏幕显示内容,大脑必须把指令和数据"传递"给屏幕控制芯片。

这就需要一种通信协议——就像两个人说话要用同一种语言一样。

为什么不用其他方式?

常见的通信方式有很多,比如:

接口类型数据线数量速度适合场景
SPI1根(或多根)数据线屏幕、Flash、传感器
I2C1根数据线中等传感器、小屏幕
I80(并行)8或16根数据线更快大屏幕
RGB更多数据线最快高分辨率大屏

[LCD接口对比]

你的 240×320 TFT 屏幕用的是 SPI 接口,原因很简单:

  • 引脚少:只需要 4~5 根线(SCLK、MOSI、CS、DC,加上可选的 MISO),节省 IO 资源。
  • 速度够用:对于 240×320 这种分辨率的小屏幕,SPI 的速度完全够用。
  • 硬件支持好:ESP32-S3 内置了 SPI 控制器(GP-SPI2、GP-SPI3),硬件直接支持,不需要软件模拟。

[ESP32-S3 SPI控制器]

为什么选择 SPI


2. SPI 的技术原理是什么?

SPI 的全称

SPI = Serial Peripheral Interface(串行外设接口),是一种同步串行通信协议

核心概念:主机与从机

  • 主机(Master):发起通信的一方,就是你的 ESP32-S3。
  • 从机(Slave):被动响应的一方,就是你的 ST7789V2 屏幕控制芯片。

四根核心信号线

SPI 通信靠这几根线完成:

引脚名你的接线作用
SCLK(时钟)GPIO 12ESP32-S3 发出节拍,每个节拍传一位数据
MOSI(主出从入)GPIO 11ESP32-S3 → 屏幕,发送数据
CS(片选)GPIO 10拉低 = 选中屏幕,开始通信
DC(数据/命令)GPIO 14高电平=数据,低电平=命令
RST(复位)GPIO 13硬件复位屏幕
BL(背光)GPIO 9控制背光亮灭

[SPI接口引脚说明]

通信过程(用大白话解释)

想象你在餐厅点菜:

  1. CS 拉低 → 你举手叫服务员(选中屏幕,告诉它"我要跟你说话了")
  2. DC 拉低 → 你说"我要点菜"(告诉屏幕接下来是命令,比如"设置显示区域")
  3. SCLK 产生时钟 → 服务员开始计时,每个节拍你说一个字
  4. MOSI 传数据 → 你一位一位地说出命令内容
  5. DC 拉高 → 你说"菜的具体内容是..."(告诉屏幕接下来是数据,比如颜色值)
  6. CS 拉高 → 你说完了,服务员离开(结束本次通信)

这就是 SPI 的 4-line 模式(4线模式),也是你的屏幕使用的模式。

[4-line模式说明]

关键理解:DC 引脚是 SPI LCD 特有的!它区分"命令"和"数据"。没有它,屏幕不知道你发的是控制指令还是像素颜色。

SPI 四根核心信号线

SPI 四根核心信号线2


3. 用了之后会有什么结果?

当你完成以上步骤后:

  1. BL(GPIO9)拉高 → 背光亮起,屏幕发光(但还没有内容)
  2. RST 复位 → ST7789V2 芯片重置到初始状态
  3. SPI 发送初始化命令 → 告诉屏幕:分辨率是 240×320,颜色格式是 RGB565,方向是竖屏...
  4. 发送像素数据 → 通过 MOSI 线,把每个像素的颜色值(16位 RGB565)一位一位传给屏幕
  5. 屏幕显示内容 → ST7789V2 把收到的颜色数据写入内部 GRAM(显存),屏幕就显示出对应颜色

SPI 驱动结果


总结:一句话理解 SPI

SPI 就是 ESP32-S3 用一根时钟线打节拍、一根数据线逐位传数据、一根CS线选中屏幕、一根DC线区分命令和数据,从而控制 ST7789V2 显示内容的通信方式。

它的优点是引脚少、速度快、硬件支持好,非常适合你这种 240×320 的小屏幕应用场景。[SPI LCD驱动流程]

觉醒,然后燎原。 © 2026 门主引擎