ESP32 SDIO 使用教程

本文详述了如何使用ESP32-WROOM-32D进行SDIO通信,包括硬件准备、连接方法、EFUSE数据修改和测试步骤。内容涵盖SDIO AT通信与esp-hosted通信的实现,适合需要与ESP32 SDIO slave通信的项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP32 SDIO 使用教程

本文旨在说明如何使用标准的 ESP32-WROOM-32D 开发板进行 SDIO 的通信。

本文档适用于所有需要与 ESP32 SDIO slave 通信的方案和应用,目前主要应用为 ESP-AT 使用 SDIO 进行通信,以及 esp-hosted 的 SDIO 通信。

另外 MCU 侧使用 SPI ,而 ESP32 使用 SDIO slave ,即采用 SDIO SPI 模式通信的场景也适用于本文档,如 ESP32-AT 的 SDSPI 方案

本文主要参考乐鑫官方文档中的 SD Pull-up Requirements 章节,如果使用的不是 ESP32-WROOM-32D 开发板, 可根据章节中的说明进行修改。

硬件准备

  1. 20K 欧姆电阻 6 根
  2. ESP32-WROOM-32D 开发板
  3. 杜邦线若干
  4. 面包板

在这里插入图片描述

连接方法

将 IO13,IO14, IO15, IO2, IO4, IO12 这 6 个管脚使用 20K 欧姆电阻进行上拉,可以将 20K 欧姆一端接到 3V3,另一端接到对应的管脚,如下图所示:

在这里插入图片描述

改写 EFUSE 数据

SDIO 管脚 IO12 本身还是一个 boot strapping 管脚,这个管脚上电时的电平状态与 SDIO 传输相冲突, 为了解决这种冲突,一般推荐在 efuse 中将供给 flash 的电压固定为 3.3V,这样 GPIO12 将不会再作为 strapping 管脚。

改写 EFUSE 数据的方法是使 ESP32 进入下载模式(IO0 接地),然后在 IDF 目录下执行如下命令

$ ./components/esptool_py/esptool/espefuse.py -p <serial_port> set_flash_voltage 3.3V
其中: <serial_port> 在 ubuntu 中为 /dev/ttyUSBX, 在 Windows 上为 COMX

打开串口后会出现如下 log,需要手动输入BURN才会真正执行擦除 efuse 电压的操作

espefuse.py v2.8
Connecting....

Enable internal flash voltage regulator (VDD_SDIO) to 3.3V.
The following efuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG, XPD_SDIO_TIEH.
This is an irreversible operation.
Type 'BURN' (all capitals) to continue.
BURN
VDD_SDIO setting complete.

注意: 目前乐鑫绝大多数都是 3.3V flash,但仍有少量产品使用的是 1.8V flash, 改写 efuse 电压数据可能导致 1.8V 的 flash 损坏,因此,使用之前,请详细阅读使用产品的手册说明。

测试

目前 ESP32 SDIO slave 使用场景主要是 AT 项目和 esp-hosted 项目,以下测试基于这两种方案。

SDIO AT 通信

slave 侧

ESP-AT 的下载和编译方法可以参考这里

需要注意的是,默认的 ESP-AT 使用 UART 进行通信,想要 SDIO 进行通信,需要做如下修改:

  1. 先将默认使用 UART 的 AT 根据 esp-at 中的说明编译成功
  2. 在配置项中更改使用 SDIO 进行通信。

./build.py menuconfig -

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值