前言
本文的目的是為了給将要制作的ESP32手環做技術儲備
記錄使用ESP32的SPI接口操作SD卡,暫時不涉及檔案讀寫,主要驗證硬體可行性
硬體準備
- ESP-WROOM-32E開發闆
- micro SD卡
- micro SD卡插槽子產品
軟體準備
- VSCODE+PlatformIO
使用過程
改MISO引腳
通過ESP32資料手冊,結合雉晖君的github:GPIO12作為啟動電壓選擇引腳,預設設定為下拉,而作為HSPI的MISO,與SD卡插槽連接配接的時候,被SD卡插槽上拉電阻拉高,會導緻啟動失敗,是以首先要将MISO改為其他引腳
硬體接線
按照上面截圖的方式接線,要注意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卡資訊,說明硬體引腳沒問題