天天看點

基于arduino的ESP32 學習筆記(五)SD卡使用前言使用過程

前言

本文的目的是為了給将要制作的ESP32手環做技術儲備

記錄使用ESP32的SPI接口操作SD卡,暫時不涉及檔案讀寫,主要驗證硬體可行性

硬體準備

  • ESP-WROOM-32E開發闆
  • micro SD卡
  • micro SD卡插槽子產品

軟體準備

  • VSCODE+PlatformIO

使用過程

改MISO引腳

通過ESP32資料手冊,結合雉晖君的github:GPIO12作為啟動電壓選擇引腳,預設設定為下拉,而作為HSPI的MISO,與SD卡插槽連接配接的時候,被SD卡插槽上拉電阻拉高,會導緻啟動失敗,是以首先要将MISO改為其他引腳

基于arduino的ESP32 學習筆記(五)SD卡使用前言使用過程
基于arduino的ESP32 學習筆記(五)SD卡使用前言使用過程

硬體接線

按照上面截圖的方式接線,要注意ESP32的MISO應該接SD卡插槽子產品的MISO,這個還是聽令我費解的,不像序列槽子產品那樣RXTX要對調

程式編寫

寫了一段讀取SD卡資訊的代碼,測試SD卡是否驅動成功

#include <Arduino.h>
#include <FS.h>
#include <SPI.h>
#include <SD.h>

void setup()
{
    // put your setup code here, to run once:
    Serial.begin(115200);
    SPIClass *sd_spi = new SPIClass(HSPI);
    if (!SD.begin(15, *sd_spi)) // SD-Card SS pin is 15
    {
        Serial.println("Card Mount Failed");
        return;
    }

    uint8_t cardType = SD.cardType();
    if (cardType == CARD_NONE)
    {
        Serial.println("No SD card attached");
        return;
    }

    Serial.print("SD Card Type: ");
    if (cardType == CARD_MMC)
    {
        Serial.println("MMC");
    }
    else if (cardType == CARD_SD)
    {
        Serial.println("SDSC");
    }
    else if (cardType == CARD_SDHC)
    {
        Serial.println("SDHC");
    }
    else
    {
        Serial.println("UNKNOWN");
    }

    uint64_t cardSize = SD.cardSize() / (1024 * 1024);
    Serial.printf("SD Card Size: %lluMB\n", cardSize);
}

void loop()
{
    // put your main code here, to run repeatedly:
}
           

實驗現象

成功列印出SD卡資訊,說明硬體引腳沒問題

基于arduino的ESP32 學習筆記(五)SD卡使用前言使用過程

繼續閱讀