944 字
5 分钟
使用ESP32-CAM的1位模式操作SD卡

ESP32-CAM是由AI-Thinker开发的一款基于ESP32芯片的摄像头模块,广泛用于物联网(IoT)项目中,尤其适合于嵌入式开发和边缘计算应用。该模块配备了一个集成的micro SD卡插槽,便于存储数据,并可通过SDMMC(Secure Digital MultiMedia Card)主机驱动与外部SD卡进行通信。

在ESP32-CAM的设计中,SD卡通过ESP32的SDMMC主机接口与系统进行连接。默认情况下,ESP32的SDMMC接口使用4位数据传输模式,但如果开发者需要节省GPIO资源或仅使用单条数据线与SD卡通信,ESP32还支持将SD卡切换到1位模式(1-Wire模式)。本文将探讨如何在ESP32-CAM中使用1位模式连接SD卡,并通过相关代码示例进行详细说明。

ESP32-CAM的SD卡引脚映射#

ESP32-CAM通过SDMMC主机接口与SD卡进行通信。默认情况下,它使用4个数据引脚和1个命令引脚。具体的引脚映射如下所示:

信号GPIO备注
HS2_CMDGPIO15曝露在外
HS2_CLKGPIO14曝露在外
HS2_DATA0GPIO02曝露在外
HS2_DATA1GPIO04曝露且连接到板载LED
HS2_DATA2GPIO12曝露在外
HS2_DATA3GPIO13曝露在外

如上所示,ESP32-CAM使用GPIO02、GPIO04、GPIO12、GPIO13与SD卡进行数据读写。如果您希望在1位模式下运行SD卡,只需要在初始化SD卡时,将参数mode1bit设置为true。此时,ESP32-CAM仅使用GPIO02进行数据传输,从而释放出GPIO04、GPIO12和GPIO13,供其他输入或输出用途。

如何启用SD卡的1位模式#

要在ESP32-CAM上启用SD卡的1位模式,可以使用如下代码:

#include "SD_MMC.h"
#include "SPI.h"

#define BUILTIN_LED 4

void setup() {
    Serial.begin(115200);

    // 初始化SD卡,启用1位模式
    if (!SD_MMC.begin("/sdcard", true)) {
        Serial.println("Failed to mount SD card");
        return;
    }

    // 配置GPIO04(内置LED)为输出,并关闭LED
    pinMode(BUILTIN_LED, OUTPUT);
    digitalWrite(BUILTIN_LED, LOW);

    // 检查SD卡是否已连接
    uint8_t cardType = SD_MMC.cardType();
    if (cardType == CARD_NONE) {
        Serial.println("No SD card attached");
        return;
    }

    // 其他初始化代码
}

void loop() {
    // 主循环代码
    Serial.println("loop end, 10sec delay");
    delay(10000);
}

在上述代码中,我们通过SD_MMC.begin("/sdcard", true)启用了1位模式。这里的第二个参数true表明我们希望将SD卡工作在1位模式。这样,ESP32-CAM将仅使用GPIO02进行数据传输。

释放GPIO资源与自定义配置#

启用1位模式后,ESP32-CAM释放了GPIO04、GPIO12和GPIO13,使得这些引脚可以作为普通的GPIO输入或输出进行使用。可以在初始化SD卡之后,使用pinMode()digitalWrite()函数对这些引脚进行自定义配置。例如,如果您希望使用GPIO12作为输出引脚并将其设为低电平,可以使用如下代码:

pinMode(12, OUTPUT);
digitalWrite(12, LOW);

避免LED干扰#

需要特别注意的是,ESP32-CAM的GPIO04还连接着板载的SMD LED(闪光灯),该LED可能会在初始化SD卡时意外点亮。为防止LED在初始化过程中亮起,您可以将GPIO04配置为低电平。如下所示的代码会在SD卡初始化时关闭LED:

pinMode(BUILTIN_LED, OUTPUT);
digitalWrite(BUILTIN_LED, LOW);

总结#

使用ESP32-CAM的SD卡在1位模式下操作,不仅简化了硬件连接,还有效释放了多个GPIO引脚,可以为其他外设提供更多的接口资源。这对于在资源有限的嵌入式系统中尤其重要。通过简单的代码配置,开发者可以在确保SD卡正常工作的同时,灵活地利用更多的GPIO引脚来满足其他功能需求。

无论您是构建一个数据采集系统,还是需要高效存储处理图像或视频流,ESP32-CAM提供了一种灵活且高效的解决方案。

使用ESP32-CAM的1位模式操作SD卡
https://hw.rscclub.website/posts/esp32cam1wire/
作者
杨月昌
发布于
2017-06-18
许可协议
CC BY-NC-SA 4.0