ESP32 SPI 接口的应用

article/2025/8/22 15:07:41

总体介绍

1. ESP32 共有 4 个 SPI 控制器 SPI0、SPI1、SPI2、SPI3,用于连接支持 SPI 协议的设备。
  • SPI0 控制器作为 cache 访问外部存储单元接口使用;
  • SPI1 作为主机使用;
  • SPI2 和 SPI3 控制器既可作为主机使用又可作为从机使用。作主机使用时,每个 SPI 控制器可以使用多个片选信号 (CS0 ~ CS2) 来连接多个 SPI 从机设备。
  • SPI1 ~ SPI3 控制器共享两个 DMA 通道。
2. 作为通用 SPI 支持以下特性:
  • 4 种模式的 SPI 传输格式,模式取决于 SPI 时钟的极性 (CPOL) 和相位 (CPHA);
  • 最高支持到 80 MHz(实际可支持频率还受限于所用 pad、PCB 走线、外接器件规格等);
  • 最高支持 64 byte 的 FIFO ;
  • 所有 SPI 接口都可以连接外部 flash/SRAM 和 LCD。每一个 SPI 控制器都可连接到 DMA 通道。
3. 编程指南说明:
  • SPI Features - SPI Master - SPI Bus Lock
  • SD SPI Host Driver
  • SPI Master Driver
  • SPI Slave Driver

应用分类

1 SPI Flash/PSRAM

1.1 内置 SPI Flash/PSRAM

  • SPI0:被 Flash 占用,内置 Flash 端口与芯片管脚对应关系如下,一般是 GPIO6 ~ GPIO11 ,且这几个管脚不可用于其他功能。但不同型号的模组默认的 Flash 接口可能不同,可使用 esptool 工具通过 espefuse.py summary 命令来查询默认的配置。
SPI_PAD_CONFIG_CLK (BLOCK0): Override SD_CLK pad (GPIO6/SPICLK)  = 0 R/W (0b00000)
SPI_PAD_CONFIG_Q (BLOCK0): Override SD_DATA_0 pad (GPIO7/SPIQ)  = 0 R/W (0b00000)
SPI_PAD_CONFIG_D (BLOCK0): Override SD_DATA_1 pad (GPIO8/SPID)  = 0 R/W (0b00000)
SPI_PAD_CONFIG_HD (BLOCK0): Override SD_DATA_2 pad (GPIO9/SPIHD)  = 0 R/W (0b00000)
SPI_PAD_CONFIG_CS0 (BLOCK0): Override SD_CMD pad (GPIO11/SPICS0)  = 0 R/W (0b00000)
  • ESP32 系列的模组,目前默认最大支持 16MB 的 Flash 。

  • ESP32 系列的模组,除 ESP32-WROVER 模组为 1.8V Flash 以外,其他型号的模组均为 3.3V Flash。

  • 带有内置 Flash 的芯片型号需要注意上电时的 MTDI(GPIO12) 电平。例如 ESP32-U4WDH 的内置 Flash 的工作电压是 3.3V,上电时需要将 MTDI(GPIO12) 拉低。请参见《ESP32 技术规格书》关于”Strapping 管脚“ 的说明。

  • 目前 ESP 适配过的 Flash 型号可参见 “Flash 特性支持情况”

  • SPI1:FLASH 和 PSRAM 共用一组 SPI,通过不同的 CS 线实现控制。GPIO16 ~ GPIO17 一般是用于 Flash 和 PSRAM 的共用接口,且这 2 个管脚不可用于其他功能。PSRAM 的接口除了 CS(任意 GPIO)不能与 Flash 共用外,CLK 接口(建议参考模组使用的时钟脚),其他都可以与 Flash 的接口共用;目前最大支持使用外接 8MB PSRAM。

  • 当使用 VDD_SDIO 的 1.8 V 模式给 Flash/PSRAM 等外设供电时,需要在 VDD_SDIO 上接个对地 2 kΩ 的
    电阻,参考《ESP32-WROVER 技术规格书》 中原理图。

  • SPI Flash/PSRAM 硬件原理图可参见《ESP32 硬件设计指南》
    在这里插入图片描述

  • SPI Flash 编程指南参见 "SPI Flash API"

  • "SPI Flash 加密" 和 "ESP32-Secure Boot 安全方案"


【软件应用例程】

  • 对自带的 Flash 设置特定的分区,作为操作 SPIFFS 文件系统的分区。可参见例程:esp-idf/examples/storage/spiffs
  • 对自带的 Flash 设置特定的分区,构建 SPIFFS 图像生成示例:esp-idf/examples/storage/spiffsgen
  • 对自带的 Flash 设置特定的分区存储音频文件并播放存在 Flash 中的 MP3 文件示例:esp-adf/examples/player/pipeline_flash_tone
  • 对自带的 Flash 设置特定的分区构建 SPIFFS 文件系统来存储 MP3 文件,并播放存在 SPIFFS 文件系统中的 MP3 文件示例:esp-adf/examples/player/pipeline_spiffs_mp3

【Flash & PSRAM 常见应用问题】

  • Flash 常见应用问题
  • PSRAM 常见应用问题

1.2 外接 SPI Flash 存储外部数据

  • 可使用通用 SPI ,支持任意 GPIO 管脚进行映射。使用任意 GPIO 进行映射时,需要注意对时序产生的影响,可参考 “Timing Considerations” 说明。
  • 目前只支持外接 SPI NOR Flash 芯片,以 W25Q32 型号的 SPI NOR Flash 芯片为例,可参见例程 esp-idf/examples/storage/ext_flash_fatfs

1.3 外接 SPI PSRAM 存储外部数据

  • 硬件上支持使用 SPI2 或 SPI3 接口外接 PSRAM 芯片,但是 SPI2 和 SPI3 不支持 Cache ,且目前软件上无 SPI2、SPI3 的 PSRAM 的驱动,所以目前使用 SPI2\SPI3 外接 PSRAM 是可不用的。

2 SD SPI(可使用 SPI 接口或 SDIO 接口)

  • SD SPI Host Driver 说明
  • SDSPI 例程参见:esp-idf/examples/storage/sd_card/sdspi,包含硬件接线及上拉要求;支持 SD(SDSC、SDHC、SDXC)卡。

3 SPI 外接 LCD

ESP32 目前支持 SPI 串行接口、6800、8080 并口的 LCD。

3.1 ESP32 适配的 LCD 参数

1. SPI 接口

  • 最大分辨率:480*320
  • 最大帧率:80MHz 的频率大概是 12 帧

2. 8080/6800 接口协议

  • 最大分辨率:854*480

3.2 SPI LCD 硬件设计参考

  • 官方提供了 ESP32-LCDKit 开发板,开发板预留屏幕接口类型:SPI 串行接口、8 位和16 位并行接口,可用于测试。对应原理图请参见 “esp-dev-kits/docs/zh_CN/esp32/esp32-lcdkit/hw/schematics/SCH_ESP32-LCDKit_V1.1_20190218.pdf”
  • ESP-WROVER-KIT 开发板贴装一款 3.2 寸的 SPI(标准四线串行外设接口)LCD 显示器,分辨率为 320*240。请见 ESP-WROVER-KIT V4.1 原理图。

3.3 SPI LCD 软件应用

  • ESP32 的 SPI LCD 的 HMI 示例程序参考 esp-iot-solution/tree/master/examples/hmi
  • 适配的 LCD 的驱动库可参见 esp-iot-solution/components/display/screen/controller_driver; 默认使用的是 ILI9341 LCD 。
  • ESP32 的 8080 并口的例程可参见 esp-iot-solution/examples/screen 例程。对于 8080 协议的 LCD 接口,我们使用的是 I2S 接口软件方式实现,但此方式只支持 “写”,不支持 “读”。
  • ESP32 SPI 驱动墨水屏的例程可参考 esp-idf/examples/peripherals/spi_master/lcd 例程

3.4 SPI LCD 方案介绍

  • “乐鑫 ESP-LCD 多媒体智能控制方案” 视频介绍
  • 乐鑫 ESP-LCD 多媒体智能控制方案优势

4 SPI 通信

4.1 SPI Master

  • ESP32 SPI1 ~ SPI3 可以作为 SPI 主机与其他从机通信。ESP32 SPI 作主机使用时,每个 SPI 控制器可以使用多个片选信号 (CS0 ~ CS2) 来连接多个 SPI 从机设备。每个 ESP32 SPI 主机默认最多可以接 3 个从机。在非 DMA 模式下,一次最多可以接收/发送 64 byte 的数据,收发数据长度以字节为单位。
  • 详细说明建议阅读《ESP32 技术参考手册》 的 “7 SPI 控制器” 章节和 “SPI Master Driver” 编程指南。
  • 参考例程:esp-idf/examples/peripherals/spi_master

4.2 SPI Slave

  • SPI2 和 SPI3 可以作为从机。SPI2,有时也称为 HSPI ;SPI3,有时也称为 VSPI 。
  • 详细说明建议阅读《ESP32 技术参考手册》 的 “7 SPI 控制器” 章节和 “SPI Slave Driver” 编程指南。
  • 参考例程:esp-idf/examples/peripherals/spi_slave

4.3 SPI 传输 AT 指令

  • ESP32-C3 、ESP32 都支持 SPI 传输 AT 指令,但由于 ESP32 的硬件条件的限制,我们更推荐使用 ESP32 的 SDIO SPI 方式传输 AT 指令,吞吐率参见 “Readme” 说明。

硬件条件的限制是指:

  • SPI Slave 支持的 SPI Clock 为10MHz, 最理想的情况下大约 1MB/s , 但是实际要损失很多。
  • SPI Slave 需要在挂载好 Buffer 之后才允许 Master 收发数据。
  • 请参见 ”SCLK Frequency Requirements“ 说明。
  • ESP32 SPI 传输 AT 参见:esp-at/examples/at_spi_master/spi
  • 同时请阅读 SPI AT Guide

5 ESP-Hosted 无线网卡方案

  • ESP-Hosted 无线网卡 (Wireless network interface controller, WNIC) 方案,可参见 “乐鑫 ESP-WNIC 无线网卡方案” 介绍。
  • ESP32 SPI 接口支持如下特性:
    在这里插入图片描述

SPI 使用注意事项

  • ESP32 的 SPI 在专用 IO_MUX SPI 引脚上的速度可达 80 MHz ,在 GPIO matrix 引脚上的速度可达 40 MHz ,但在 GPIO matrix 上的全双工传输只支持高达 26 MHz 的速度。请阅读 “SPI Master Driver” 编程指南。

SPI 常见应用问题

可查阅 ”ESP-FAQ 外设“ 章节。


http://chatgpt.dhexx.cn/article/0RROPkrC.shtml

相关文章

SPI接口简介-Piyu Dhaker

SPI接口简介 作者: Piyu Dhaker 串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以…

弄懂SPI接口

SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,是一种高速的,全双工,同步的通信总线,在很多器件中被广泛应用。 SPI相关缩写 SS: Slave Select&…

SPI接口

SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。 1. 接口 SPI接口经常被称为4线串行总线,SPI协议是主从模式:从机不主动发起访问&…

SPI接口简介

串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以及它们如何帮助减少系统电路板设计中的数字GP…

SPI接口详解

一、SPI接口简介 SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用…

【科普贴】SPI接口详解

一、SPI接口简介 SPI接口是一种同步串行总线(Serial Peripheral Interface)多用于Flash存储器(如NOR Flash&Nand Flash),ADC、LCD控制器等外围器件的通讯接口。大大增强了处理器的外设扩展能力。 SPI接口缩写 SSE…

第四章 - 程序计数器

文章目录 1.PC 寄存器介绍2.PC 寄存器的作用3.代码示例4.两个常见面试题5.CPU时间片 官网文档 1.PC 寄存器介绍 JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。…

运行时数据区 - 程序计数器

① 介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 PC寄存器用来存储指向下一条指令的地址(即将要执行的指令代码),由执行…

操作系统-程序计数器

查考资料:https://blog.csdn.net/xxb2008/article/details/42145649 程序计数器是用于存放下一条指令所在单元的地址的地方。 冯 诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”! 处理器要执行的程序(指…

04-程序计数器(PC计数器)

程序计数器 介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器&…

三、程序计数器(PC寄存器)

文章目录 1.PC Register 介绍介绍作用 2.举例说明3.两个常见问题使用PC寄存器存储字节码指令的地址有什么用?PC寄存器为什么会被设定为线程私有的? 1.PC Register 介绍 介绍 JVM中的程序计时器(Program Counter Register)中&…

汇编语言、寄存器分类及程序计数器

目录 一、计算机语言 汇编语言 寄存器分类 二、程序计数器 一、计算机语言 计算机是由二进制构成的,它只能听懂二进制也就是机器语言,但是普通人是无法看懂机器语言的,这个时候就需要一种电脑既能识别,人又能理解的语言&…

Java --- JVM程序计数器(PC寄存器)

目录 一、程序计数器(PC寄存器) 二、主要功能作用 三、PC Register 四、PC寄存器面试题 五、CPU时间片 一、程序计数器(PC寄存器) JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。C…

计数器

文章目录 【 1. 同步计数器 】① 同步二进制计数器同步二进制加法计数器74161 十六进制四位二进制加法计数器74163 同步二进制减法计数器同步二进制加/减计数器单时钟方式 74191双时钟方式 74193 ② 同步十进制计数器同步十进制加法计数器7416074162 同步十进制减法计数器同步十…

4 程序计数器

1、输入日期,转化为毫秒数: 用calendar方法(calendar.getTime) 代码: public static void main(String[] args) {Calendar calendar Calendar.getInstance();calendar.set(2017, 6, 27, 15, 9, 0);System.out.print…

程序计数器(PC)

1.PC中存放下一次访存的地址。 2.PC自增的确是PC取出指令的长度。 3.PC每次自增都是固定的字长。 ———————————————————————————— 1.程序计数器的工作原理 大概解释一下程序计数器吧,用一个最简单的例子。 首先第一点:PC中存…

4、程序计数器PC

介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许…

程序计数器介绍

JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻…

计算机组成原理 程序计数器实验

程序计数器实验 实验环境 计算机组成原理实验环境 实验目的 连接程序计数器、地址寄存器、存储器与指令寄存器,理解程序计数器的作用。掌握使用微命令通过程序计数器从存储器中读取指令和数据的方法。 实验要求 做好实验预习,实验之前填写好表 7-4…

2、程序计数器

1、定义: 程序计数器是一块较小的内存空间,它可以看作是:保存当前线程所正在执行的字节码指令的地址(行号)。由于Java虚拟机在多线程模式下是通过线程轮流切换并分配CPU时间片的方式来实现的,因此当某一线程的时间片用完&#xff…