Daftar Isi:

Pilih SD Interface untuk ESP32: 12 Langkah (dengan Gambar)
Pilih SD Interface untuk ESP32: 12 Langkah (dengan Gambar)

Video: Pilih SD Interface untuk ESP32: 12 Langkah (dengan Gambar)

Video: Pilih SD Interface untuk ESP32: 12 Langkah (dengan Gambar)
Video: MEMULAI ESP32 TUTORIAL MENAMBAHKAN BOARD ESP32 KE IDE ARDUINO, INTAL DRIVER, DAN MEMPROGRAM ESP32 2024, November
Anonim
Pilih Antarmuka SD untuk ESP32
Pilih Antarmuka SD untuk ESP32

Instruksi ini menunjukkan sesuatu tentang memilih antarmuka SD untuk proyek ESP32 Anda.

Langkah 1: Antarmuka SD

Di perpustakaan SD Arduino asli, Antarmuka SD menggunakan mode transfer bus SD SPI.

SD sebenarnya memiliki lebih banyak mode transfer:

  • Mode bus SPI: ESP32 memiliki lebih dari 1 bus SPI, dapat disesuaikan saat inisialisasi
  • Mode bus SD 1-bit / 4-bit: ESP32 mendedikasikan perpustakaan lain yang disebut SD_MMC untuk mengimplementasikan API mode bus SD
  • Mode SD UHS-II: ESP32 tidak didukung

Referensi:

www.arduino.cc/en/reference/SD

en.wikipedia.org/wiki/SD_card

docs.espressif.com/projects/esp-idf/en/lat…

Langkah 2: Pemetaan Pin ESP32 GPIO

Berikut adalah pemetaan pin ESP32 GPIO default:

pin kartu SD Pin microSD Nama 4-bit SD bus 1-bit SD bus Bus SPI (pin HSPI / VSPInative)
1 2 D3 13 - SS (15/5)
2 3 CMD 15 15 MOSI (13 / 23)
3 - VSS GND GND GND
4 4 VDD 3.3V 3.3V 3.3V
5 5 CLK 14 14 SK (14 / 18)
6 6 VSS GND GND GND
7 7 D0 2 2 MISO (12 / 19)
8 8 D1 4 - -
9 1 D2 12 - -

Pemetaan pin GPIO dari bus SD 1-bit/4-bit tidak dapat diubah.

Panggilan sederhana SD_MMC begin() ke mode bus SD 4-bit awal:

SD_MMC.mulai();

Mode bus SD 1-bit dapat dipilih pada metode SD_MMC begin(), mis.

SD_MMC.begin("/cdcard", benar);

Bus SPI (HSPI atau VSPI) dapat dipilih saat membuat instance SPIClass, mis.

SPIClass spi = SPIClass(HSPI);

Seperti yang Anda lihat, pin berbagi pin bus SD 1-bit/4-bit dengan HSPI tetapi pemetaan pin kartu SD tidak sama. Jadi jika perangkat keras terhubung sesuai dengan peta pin bus SD, tidak dapat langsung menggunakan pin asli HSPI. Pin GPIO dapat diganti pada metode SPIClass begin(), mis.

SPIClass spi = SPIClass(HSPI);

spi.begin(14 /* SCK */, 2 /* MISO */, 15 /* MOSI */, 13 /* SS */);

Dan juga perpustakaan SD dapat mengganti pin SS, bus SPI, dan frekuensi bus pada metode SD begin(), mis.

SD.begin(13 /* SS */, spi, 80000000);

Langkah 3: Persyaratan SD Pull-up

Jika Anda ingin menggunakan mode bus SD 4-bit, silakan ikuti Persyaratan Pull-up SD ESP32, terutama:

  • Konflik Pull-up di GPIO13
  • Konflik Antara Bootstrap dan SDIO pada DAT2

Referensi:

docs.espressif.com/projects/esp-idf/en/lat…

Langkah 4: Berbagai Perangkat Keras

Berbagai Perangkat Keras
Berbagai Perangkat Keras

ESP32 memiliki banyak dev kit dan dev board, beberapa di antaranya memiliki slot kartu MicroSD bawaan.

Berikut adalah beberapa contoh di tangan saya:

  • T-Watch TTGO, terhubung ke GPIO pin 2, 13, 14 dan 15 sesuai dengan mode bus SD 1-bit, sehingga dapat menggunakan mode bus SD 1-bit dan mode bus SPI
  • Seri M5Stack, terhubung ke GPIO pin 4, 18, 19 dan 23 sesuai dengan pin asli VSPI, sehingga dapat menggunakan pengaturan perpustakaan SD default [SD.begin(4)]
  • ODROID-GO, terhubung ke GPIO pin 18, 19, 22 dan 23 sesuai dengan pin asli VSPI, sehingga dapat menggunakan pengaturan perpustakaan SD default [SD.begin(22)]
  • ESP32-CAM, terhubung ke pin GPIO 2, 4, 12, 13, 14 dan 15 sesuai dengan mode bus SD 4-bit, sehingga dapat menggunakan semua mode bus SD 4-bit / 1-bit dan mode bus SPI
  • Papan dev TTGO T8, terhubung ke pin GPIO 2, 13, 14 dan 15 sesuai dengan mode bus SD 1-bit, sehingga dapat menggunakan mode bus SD 1-bit dan mode bus SPI

www.lilygo.cn/prod_view.aspx?Id=1123

docs.m5stack.com/

wiki.odroid.com/odroid_go/odroid_go

wiki.ai-thinker.com/esp32-cam

github.com/LilyGO/TTGO-T8-ESP32

Langkah 5: Papan Breakout Slot Kartu SD

Papan Breakout Slot Kartu SD
Papan Breakout Slot Kartu SD
Papan Breakout Slot Kartu SD
Papan Breakout Slot Kartu SD

Papan pengembang dengan slot kartu MicroSD bawaan mungkin tidak menghubungkan semua pin dan sebagian besar tidak dapat menggunakan mode bus SD 4-bit. Papan breakout slot kartu SD individual memberikan fleksibilitas yang lebih baik.

Pada saat yang sama, banyak papan breakout LCD juga membuka slot kartu SD ukuran penuh. Namun, kebanyakan dari mereka hanya mendobrak pin mode SPI. Tidak cukup untuk digunakan sebagai mode bus SD 4-bit, tetapi Anda masih dapat menggunakannya sebagai mode bus SD 1-bit dengan pemetaan koneksi ini:

LCD -> ESP32

SD_CS -> nihil SD_MOSI -> 15 SD_MISO -> 2 SD_SCK -> 14

Langkah 6: Lepaskan GPIO 2 Saat Program

Lepaskan GPIO 2 Sementara Program
Lepaskan GPIO 2 Sementara Program

Koneksi mode bus SD 4-bit membuat ESP32 gagal masuk ke mode program. Harap ingat lepaskan GPIO 2 dari papan breakout slot kartu SD DAT0 sebelum mengunggah program baru.

Langkah 7: Tolok Ukur

Tolok ukur
Tolok ukur
Tolok ukur
Tolok ukur

Saya telah menulis program Arduino sederhana untuk benchmark:

github.com/moononournation/ESP32_SD_Benchm…

Berikut adalah perangkat keras untuk benchmark:

ESP32

NodeMCU ESP32-32S V1.1 (WROOM-32)

Slot Kartu SD

Papan breakout slot kartu MicroSD

Kartu SD

Saya memiliki MicroSD SanDisk 8 GB dan MicroSD 128 MB lama di tangan.

Langkah 8: Tolok Ukur Mode 4-bit SD_MMC

SanDisk 8 GB MicroSD

20:27:46.000 -> Tes tulis /test_1k.bin

20:27:59.399 -> Tulis file yang digunakan: 13404 md, 312.914368 KB/s 20:27:59.399 -> Uji tulis /test_2k.bin 20:28:17.248 -> Tulis file yang digunakan: 17834 md, 235.185822 KB/s 20:28:17.248 -> Uji tulis /test_4k.bin 20:28:21.122 -> Tulis file yang digunakan: 3873 md, 1082.959961 KB/s 20:28:21.122 -> Uji tulis /test_8k.bin 20:28:23.147 -> Tulis file yang digunakan: 2024 md, 2072.284668 KB/s 20:28:23.147 -> Uji tulis /test_16k.bin 20:28:27.237 -> Tulis file yang digunakan: 4097 md, 1023.750061 KB/s 20:28:27.237 -> Tes tulis /test_32k.bin 20:28:30.088 -> Tulis file yang digunakan: 2842 ms, 1475.828247 KB/s 20:28:30.088 -> Uji tulis /test_64k.bin 20:28:31.882 -> Tulis file yang digunakan: 1811 ms, 2316.015381 KB/s 20:28:31.882 -> Uji baca /test_1k.bin 20:28:35,422 -> Baca file yang digunakan: 3520 md, 1191.563599 KB/d 20:28:35,422 -> Uji baca /test_2k.bin 20: 28:38.813 -> Baca file yang digunakan: 3389 ms, 1237.622925 KB/s 20:28:38.813 -> Uji baca /test_4k.bin 20:28:42.273 -> Baca file yang digunakan: 3474 ms, 1207.341431 KB/s 20:28:42.273 -> Uji baca /test_8k.bin 20:28:45.752 - > Baca file yang digunakan: 3487 ms, 1202.840210 KB/s 20:28:45.752 -> Uji baca /test_16k.bin 20:28:48.988 -> Baca file yang digunakan: 3213 ms, 1305.416748 KB/s 20:28:48.988 -> Uji baca /test_32k.bin 20:28:52.077 -> Baca file yang digunakan: 3093 ms, 1356.063354 KB/s 20:28:52.077 -> Uji baca /test_64k.bin 20:28:55.141 -> Baca file yang digunakan: 3080 ms, 1361.786987 KB/dtk

MicroSD 128 MB Lama

20:30:43.309 -> E (274) sdmmc_sd: sdmmc_check_scr: send_scr dikembalikan 0x109

20:30:43.309 -> Pemasangan Kartu Gagal

Langkah 9: Tolok Ukur Mode 1-bit SD_MMC

SanDisk 8 GB MicroSD

20:31:45.194 -> Tes tulis /test_1k.bin

20:31:59.506 -> Tulis file yang digunakan: 14325 md, 292.796082 KB/dtk 20:31:59.506 -> Uji tulis /test_2k.bin 20:32:17.686 -> Tulis file yang digunakan: 18163 md, 230.925735 KB/dtk 20:32:17.686 -> Uji tulis /test_4k.bin 20:32:21.291 -> Tulis file yang digunakan: 3611 md, 1161.535278 KB/s 20:32:21.291 -> Uji tulis /test_8k.bin 20:32:23.939 -> Tulis file yang digunakan: 2652 md, 1581.562622 KB/s 20:32:23.939 -> Uji tulis /test_16k.bin 20:32:28.397 -> Tulis file yang digunakan: 4448 md, 942.96450 KB/d 20:32:28.397 -> Uji tulis /test_32k.bin 20:32:31.835 -> Tulis file yang digunakan: 3429 ms, 1223.185791 KB/s 20:32:31.835 -> Uji tulis /test_64k.bin 20:32:33,882 -> Tulis file yang digunakan: 2058 ms, 2038.048584 KB/s 20:32:33,882 -> Uji baca /test_1k.bin 20:32:38.031 -> Baca file yang digunakan: 4146 md, 1011.650757 KB/d 20:32:38,031 -> Uji baca /test_2k.bin 20: 32:42,062 -> Baca file yang digunakan: 4019 md, 1043.618774 KB/dtk 20:32:42,062 -> Uji baca /test_4k.bin 20:32:46.170 -> Baca file yang digunakan: 4106 md, 1021.506104 KB/dtk 20:32:46.170 -> Uji baca /test_8k.bin 20:32:50.288 -> Baca file yang digunakan: 4121 ms, 1017.787903 KB/s 20:32:50.288 -> Uji baca /test_16k.bin 20:32:54.112 -> Baca file yang digunakan: 3840 ms, 1092.266724 KB/s 20:32:54.112 -> Uji baca /test_32k.bin 20:32:57.840 -> Baca file yang digunakan: 3739 ms, 1121.771606 KB/s 20:32:57.840 -> Uji baca /test_64k.bin 20:33:01.568 -> Baca file yang digunakan: 3711 ms, 1130.235474 KB/dtk

MicroSD 128 MB Lama

20:33:27.366 -> Uji tulis /test_1k.bin

20:33:42.386 -> Tulis file yang digunakan: 15020 ms, 279.247925 KB/s 20:33:42.386 -> Uji tulis /test_2k.bin 20:33:57.927 -> Tulis file yang digunakan: 15515 ms, 270.338654 KB/s 20:33:57.927 -> Uji tulis /test_4k.bin 20:34:13.108 -> Tulis file yang digunakan: 15195 md, 276.031860 KB/d 20:34:13.108 -> Uji tulis /test_8k.bin 20:34:28.162 -> Tulis file yang digunakan: 15048 md, 278.728333 KB/s 20:34:28.162 -> Uji tulis /test_16k.bin 20:34:43.287 -> Tulis file yang digunakan: 15142 md, 276.998016 KB/s 20:34:43.287 -> Uji tulis /test_32k.bin 20:34:58.278 -> Tulis file yang digunakan: 14964 ms, 280.292969 KB/s 20:34:58.278 -> Uji tulis /test_64k.bin 20:35:13.370 -> Tulis file yang digunakan: 15101 ms, 277.750092 KB/s 20:35:13.370 -> Uji baca /test_1k.bin 20:35:17,563 -> Baca file yang digunakan: 4197 md, 999.357666 KB/d 20:35:17,563 -> Uji baca /test_2k.bin 20: 35:21.746 -> Baca file yang digunakan: 4191 ms, 1000.788330 KB/s 20:35:21.746 -> Uji baca /test_4k.bin 20:35:25.942 -> Baca file yang digunakan: 4181 ms, 1003.182007 KB/s 20:35:25.942 -> Uji baca /test_8k.bin 20:35:30.101 -> Baca file yang digunakan: 4176 md, 1004.383118 KB/s 20:35:30.101 -> Uji baca /test_16k.bin 20:35:34.279 -> Baca file yang digunakan: 4174 md, 1004.864380 KB/d 20:35:34.279 -> Uji baca /test_32k.bin 20:35:38,462 -> Baca file yang digunakan: 4173 ms, 1005.105225 KB/s 20:35:38,462 -> Uji baca /test_64k.bin 20:35:42.612 -> Baca file yang digunakan: 4173 ms, 1005.105225 KB/dtk

Langkah 10: Mode SD SPI di Tolok Ukur Bus HSPI

SanDisk 8 GB MicroSD

08:41:19.703 -> Tes tulis /test_1k.bin

08:41:53.458 -> Tulis file yang digunakan: 33743 ms, 124.301453 KB/s 08:41:53.458 -> Uji tulis /test_2k.bin 08:42:10.000 -> Tulis file yang digunakan: 16540 ms, 253.585495 KB/s 08:42:10.000 -> Uji tulis /test_4k.bin 08:42:17.269 -> Tulis file yang digunakan: 7298 md, 574.719666 KB/s 08:42:17.308 -> Uji tulis /test_8k.bin 08:42:22.640 -> File tulis yang digunakan: 5345 ms, 784.715454 KB/s 08:42:22.640 -> Uji tulis /test_16k.bin 08:42:32.285 -> Tulis file yang digunakan: 9662 ms, 434.103088 KB/s 08:42:32.285 -> Uji tulis /test_32k.bin 08:42:36.659 -> Tulis file yang digunakan: 4355 ms, 963.100830 KB/s 08:42:36.659 -> Uji tulis /test_64k.bin 08:42:39,594 -> Tulis file yang digunakan: 2949 ms, 1422.280151 KB/s 08:42:39,594 -> Uji baca /test_1k.bin 08:42:44.774 -> Baca file yang digunakan: 5192 md, 807.839783 KB/dtk 08:42:44.774 -> Uji baca /test_2k.bin 08: 42:49.969 -> Baca file yang digunakan: 5189 md, 808.306824 KB/dtk 08:42:49.969 -> Uji baca /test_4k.bin 08:42:55.123 -> Baca file yang digunakan: 5161 md, 812.692139 KB/dtk 08:42:55.158 -> Uji baca /test_8k.bin 08:43:00.300 -> Baca file yang digunakan: 5176 md, 810.336914 KB/s 08:43:00.334 -> Uji baca /test_16k.bin 08:43:05.277 -> Baca file yang digunakan: 4948 md, 847.676636 KB/s 08:43:05.277 -> Uji baca /test_32k.bin 08:43:10.028 -> Baca file yang digunakan: 4773 md, 878.756348 KB/s 08:43:10.028 -> Uji baca /test_64k.bin 08:43:14.760 -> Baca file yang digunakan: 4731 md, 886.557617 KB/dtk

MicroSD 128 MB Lama

08:43:47.777 -> Tes tulis /test_1k.bin

08:44:04,148 -> Tulis file yang digunakan: 16390 md, 255,906281 KB/dtk 08:44:04,183 -> Uji tulis /test_2k.bin 08:44:20,648 -> Tulis file yang digunakan: 16494 md, 254.292709 KB/dtk 08:44:20,648 -> Uji tulis /test_4k.bin 08:44:36.674 -> Tulis file yang digunakan: 16001 md, 262.127625 KB/s 08:44:36.674 -> Uji tulis /test_8k.bin 08:44:52.849 -> File tulis yang digunakan: 16175 md, 259.307831 KB/s 08:44:52.849 -> Tes tulis /test_16k.bin 08:45:09.225 -> Tulis file yang digunakan: 16397 md, 255.797043 KB/s 08:45:09.225 -> Tes tulis /test_32k.bin 08:45:25.363 -> Tulis file yang digunakan: 16143 ms, 259.821838 KB/s 08:45:25.397 -> Uji tulis /test_64k.bin 08:45:41.632 -> Tulis file yang digunakan: 16263 ms, 257.904694 KB/s 08:45:41.632 -> Uji baca /test_1k.bin 08:45:46.488 -> Baca file yang digunakan: 4856 ms, 863.736389 KB/s 08:45:46.488 -> Uji baca /test_2k.bin 08: 45:51.332 -> Baca file yang digunakan: 4840 ms, 866.591736 KB/s 08:45:51.332 -> Uji baca /test_4k.bin 08:45:56.163 -> Baca file yang digunakan: 4834 ms, 867.667358 KB/s 08:45:56.163 -> Uji baca /test_8k.bin 08:46:00.998 -> R file ead yang digunakan: 4827 ms, 868.925598 KB/s 08:46:00.998 -> Uji baca /test_16k.bin 08:46:05.808 -> Baca file yang digunakan: 4825 ms, 869.285828 KB/s 08:46:05.843 -> Uji baca /test_32k.bin 08:46:10.637 -> Baca file yang digunakan: 4824 ms, 869.466003 KB/s 08:46:10.637 -> Uji baca /test_64k.bin 08:46:15.478 -> Baca file yang digunakan: 4825 ms, 869.285828 KB/dtk

Langkah 11: Mode SD SPI di Tolok Ukur Bus VSPI

SanDisk 8 GB MicroSD

08:54:17.412 -> Tes tulis /test_1k.bin

08:54:48.398 -> Tulis file yang digunakan: 30994 ms, 135.326324 KB/s 08:54:48.398 -> Uji tulis /test_2k.bin 08:55:06.079 -> Tulis file yang digunakan: 17677 ms, 237.274658 KB/s 08:55:06.079 -> Uji tulis /test_4k.bin 08:55:13.357 -> Tulis file yang digunakan: 7274 md, 576.615906 KB/s 08:55:13.357 -> Uji tulis /test_8k.bin 08:55:18,691 -> File tulis yang digunakan: 5323 md, 787.958679 KB/s 08:55:18,691 -> Tes tulis /test_16k.bin 08:55:28.336 -> Tulis file yang digunakan: 9669 md, 433.788818 KB/s 08:55:28.336 -> Tes tulis /test_32k.bin 08:55:32.646 -> Tulis file yang digunakan: 4309 ms, 973.382202 KB/s 08:55:32.646 -> Uji tulis /test_64k.bin 08:55:35.551 -> Tulis file yang digunakan: 2915 ms, 1438.869263 KB/s 08:55:35.584 -> Uji baca /test_1k.bin 08:55:40.745 -> Baca file yang digunakan: 5183 md, 809.242554 KB/s 08:55:40.745 -> Uji baca /test_2k.bin 08: 55:45.916 -> Baca file yang digunakan: 5182 ms, 809.398682 KB/s 08:55:45.949 -> Uji baca /test_4k.bin 08:55:51.091 -> Baca file yang digunakan: 5162 ms, 812.534668 KB/s 08:55:51.091 -> Uji baca /test_8k.bin 08:55:56.257 -> Baca file yang digunakan: 5177 md, 810.180420 KB/s 08:55:56.293 -> Uji baca /test_16k.bin 08:56:01.244 -> Baca file yang digunakan: 4956 md, 846.308289 KB/s 08:56:01.244 -> Uji baca /test_32k.bin 08:56:06.006 -> Baca file yang digunakan: 4764 ms, 880.416443 KB/s 08:56:06.006 -> Uji baca /test_64k.bin 08:56:10.716 -> Baca file yang digunakan: 4728 ms, 887.120117 KB/dtk

MicroSD 128 MB Lama

08:51:01.939 -> Tes tulis /test_1k.bin

08:51:18.358 -> Tulis file yang digunakan: 16422 ms, 255.407623 KB/s 08:51:18.358 -> Uji tulis /test_2k.bin 08:51:34.529 -> Tulis file yang digunakan: 16173 ms, 259.339874 KB/s 08:51:34.529 -> Uji tulis /test_4k.bin 08:51:50.911 -> Tulis file yang digunakan: 16372 ms, 256.187653 KB/dtk 08:51:50.911 -> Uji tulis /test_8k.bin 08:52:07.056 -> File tulis yang digunakan: 16137 md, 259.918457 KB/dtk 08:52:07,056 -> Tes tulis /test_16k.bin 08:52:23,383 -> Tulis file yang digunakan: 16351 md, 256,516663 KB/dtk 08:52:23,383 -> Tes tulis /test_32k.bin 08:52:39.533 -> Tulis file yang digunakan: 16128 ms, 260.063507 KB/s 08:52:39.533 -> Uji tulis /test_64k.bin 08:52:55.764 -> Tulis file yang digunakan: 16250 ms, 258.111023 KB/s 08:52:55.764 -> Uji baca /test_1k.bin 08:53:00.645 -> Baca file yang digunakan: 4855 md, 863.914307 KB/dtk 08:53:00.645 -> Uji baca /test_2k.bin 08: 53:05.459 -> Baca file yang digunakan: 4839 ms, 866.770813 KB/s 08:53:05.459 -> Uji baca /test_4k.bin 08:53:10.306 -> Baca file yang digunakan: 4833 ms, 867.846863 KB/s 08:53:10.306 -> Uji baca /test_8k.bin 08:53:15.127 -> R file ead yang digunakan: 4827 ms, 868.925598 KB/s 08:53:15.127 -> Uji baca /test_16k.bin 08:53:19.963 -> Baca file yang digunakan: 4826 ms, 869.105652 KB/s 08:53:19.963 -> Uji baca /test_32k.bin 08:53:24.758 -> Baca file yang digunakan: 4824 ms, 869.466003 KB/s 08:53:24,792 -> Uji baca /test_64k.bin 08:53:29,592 -> Baca file yang digunakan: 4824 ms, 869.466003 KB/dtk

Langkah 12: Bulatkan

Mode bus SD 4-bit memiliki kinerja terbaik, mode bus SD 1-bit sekitar 20% lebih lambat dan mode SPI sekitar 50% lebih lambat. Salah satu alasan utama adalah lapisan protokol SD_MMC tidak menerapkan penguncian apa pun tetapi SPI melakukannya. Dan juga mode bus SD 4-bit memiliki jalur data ganda sehingga secara teoritis menggandakan kecepatan. Tetapi MicroSD lama saya tidak dapat mendukung mode bus SD 4-bit.

Saya akan merekomendasikan mode bus SD 1-bit dalam banyak kasus, karena:

  • Penampilan yang bagus
  • kompatibilitas kartu SD yang lebih baik
  • persyaratan SD Pull-up yang lebih longgar
  • hanya 3 pin GPIO yang dibutuhkan
  • konfigurasi kode yang lebih rendah
  • banyak dev kit, dev board, dan breakout board dapat menggunakan mode ini

Direkomendasikan: