IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

ESP32-S3-DevKitC N16R8 CAM: Bài 08 – MicroSD pinout, test đọc/ghi ổn định

Áp dụng cho ESP32-S3-DevKitC N16R8 CAM có khe microSD on-board
Mục tiêu: dùng thẻ ổn định, không crash, không xung đột camera, chạy lâu


Mục tiêu bài học

Sau bài này, bạn sẽ:

  • Hiểu microSD trên board CAM hoạt động như thế nào
  • Phân biệt SD (SPI)SD_MMC (4-bit)
  • Biết nên dùng mode nào cho ESP32-S3 CAM
  • Format thẻ đúng chuẩn (tránh mount fail)
  • Test đọc / ghi / tạo file ổn định
  • Tránh các lỗi phổ biến:
    SD mount failed, reset ngẫu nhiên, lỗi xung đột GPIO

Tổng quan: microSD trên ESP32-S3-DevKitC CAM

MicroSD dùng để làm gì?

  • Lưu ảnh chụp từ camera
  • Lưu log, dữ liệu cảm biến
  • Dùng cho các dự án:
    • Camera nhật ký
    • Camera an ninh
    • Xiaozhi AI (ghi file tạm, cache)

microSD không phải bộ nhớ chính

  • ❌ Không thay Flash / PSRAM
  • ✅ Chỉ dùng để lưu dữ liệu

1. MicroSD pinout trên ESP32-S3-DevKitC N16R8 CAM

Trên board CAM, microSD đã được nối sẵn vào ESP32-S3.

Các chân microSD thường dùng

Tín hiệuGPIO
SD_CMDGPIO38
SD_CLKGPIO39
SD_DATA0GPIO40
SD_DATA1GPIO41
SD_DATA2GPIO42
SD_DATA3GPIO43

⚠️ Các GPIO này dùng chung bus SD_MMC
Không nên dùng cho ngoại vi khác


2. SD (SPI) vs SD_MMC (4-bit)

2.1. SD (SPI mode)

Đặc điểm

  • Dùng giao tiếp SPI
  • Ít chân hơn
  • Chậm hơn

Ưu điểm

  • Dễ debug
  • Ít lỗi với board custom

Nhược điểm

  • ❌ Trên board CAM: không tối ưu
  • ❌ Dễ xung đột SPI với TFT / module khác

2.2. SD_MMC (4-bit mode) – KHUYẾN NGHỊ ✅

Đặc điểm

  • Giao tiếp song song 4-bit
  • Tốc độ cao
  • Được Espressif tối ưu cho camera

Ưu điểm

  • ✅ Ổn định
  • ✅ Tốc độ tốt
  • ✅ Ít xung đột camera

? Với ESP32-S3-DevKitC CAM: LUÔN ưu tiên SD_MMC

3. Chuẩn format thẻ microSD (rất quan trọng)

Dung lượng khuyến nghị

  • 4GB – 32GB (SDHC)
  • ❌ Tránh thẻ > 64GB cho người mới

Chuẩn format

  • FAT32
  • Allocation size: 32KB
  • ❌ Không dùng exFAT

Kiểm tra thẻ

  • Thẻ fake → lỗi mount ngẫu nhiên
  • Ưu tiên thẻ chính hãng (Sandisk, Kingston…)

4. Thư viện cần dùng (Arduino IDE)

#include "FS.h"
#include "SD_MMC.h"

❌ Không dùng thư viện SD.h (SPI) trong bài này


5. Code

Code 1 — Mount microSD bằng SD_MMC (chuẩn)

void sdSetup() {
  if (!SD_MMC.begin()) {
    Serial.println("SD_MMC mount failed");
    return;
  }

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

  Serial.println("SD card mounted");
}

Code 2 — Kiểm tra thông tin thẻ

void sdInfo() {
  uint64_t cardSize = SD_MMC.cardSize() / (1024 * 1024);
  Serial.printf("SD Card Size: %llu MB\n", cardSize);
}

Code 3 — Tạo & ghi file test

void sdWriteTest() {
  File file = SD_MMC.open("/test.txt", FILE_WRITE);
  if (!file) {
    Serial.println("Failed to open file for writing");
    return;
  }

  file.println("IoTLabs");
  file.println("Nghien cuu - Sang tao - Thu nghiem");
  file.println("Website: https://iotlabs.vn");

  file.close();
  Serial.println("Write OK");
}

Code 4 — Đọc file test

void sdReadTest() {
  File file = SD_MMC.open("/test.txt");
  if (!file) {
    Serial.println("Failed to open file for reading");
    return;
  }

  while (file.available()) {
    Serial.write(file.read());
  }
  file.close();
}

Code 5 — Test đọc/ghi trong setup()

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

  sdSetup();
  sdInfo();
  sdWriteTest();
  sdReadTest();
}

void loop() {
}

⚠️ 6. Các lỗi microSD RẤT hay gặp & cách tránh

❌ Lỗi 1: SD_MMC mount failed

Nguyên nhân

  • Thẻ format sai
  • Thẻ kém chất lượng
  • Nguồn yếu

Cách fix

  • Format lại FAT32
  • Đổi thẻ khác
  • Cấp nguồn ổn định

❌ Lỗi 2: Reset ngẫu nhiên khi ghi file

Nguyên nhân

  • Sụt áp
  • Ghi file quá nhanh

Cách fix

  • Delay hợp lý
  • Không ghi liên tục trong loop
  • Dùng nguồn ngoài tốt

❌ Lỗi 3: Xung đột GPIO

Nguyên nhân

  • Dùng GPIO SD cho SPI / I2C

Cách fix

  • ❌ Không dùng GPIO 38–43 cho ngoại vi khác

7. Best practices khi dùng microSD với camera

  • Luôn mount SD trước khi init camera
  • Kiểm tra SD_MMC.begin() thành công
  • Tạo thư mục rõ ràng:/img/ /log/
  • Chuẩn bị logic xoay vòng file (Bài 11)
  • microSD là nền tảng bắt buộc cho camera nhật ký, camera an ninh, nếu microSD không ổn định → dự án sẽ fail sớm.