İçindekiler:

ESP32 için SD Arayüzünü Seçin: 12 Adım (Resimlerle)
ESP32 için SD Arayüzünü Seçin: 12 Adım (Resimlerle)

Video: ESP32 için SD Arayüzünü Seçin: 12 Adım (Resimlerle)

Video: ESP32 için SD Arayüzünü Seçin: 12 Adım (Resimlerle)
Video: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, Kasım
Anonim
ESP32 için SD Arayüzünü seçin
ESP32 için SD Arayüzünü seçin

Bu talimat, ESP32 projeniz için bir SD arayüzü seçme hakkında bir şeyler gösterir.

Adım 1: SD Arayüzü

Orijinal Arduino SD kütüphanesinde SD Arayüzü, SD SPI veri yolu transfer modunu kullanıyor.

SD aslında daha fazla aktarım moduna sahiptir:

  • SPI veri yolu modu: ESP32, 1'den fazla SPI veri yoluna sahiptir, başlatma sırasında özelleştirebilir
  • 1 bit / 4 bit SD veri yolu modu: ESP32, SD veri yolu modu API'sini uygulamak için SD_MMC adlı başka bir kitaplık tahsis eder
  • SD UHS-II modu: ESP32 desteklenmiyor

Referans:

www.arduino.cc/en/reference/SD

en.wikipedia.org/wiki/SD_card

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

2. Adım: ESP32 GPIO Pin Eşleme

İşte varsayılan ESP32 GPIO pin eşlemesi:

SD kart pimi MicroSD pimi İsim 4 bit SD veri yolu 1 bit SD veri yolu SPI veri yolu (HSPI / VSPInative pinleri)
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 SCK (14 / 18)
6 6 VSS GND GND GND
7 7 D0 2 2 MISO (12 / 19)
8 8 D1 4 - -
9 1 D2 12 - -

1-bit / 4-bit SD veri yolunun GPIO pin eşleştirmesi değiştirilemez.

İlk 4 bitlik SD veri yolu moduna basit çağrı SD_MMC start():

SD_MMC.begin();

1 bitlik SD veri yolu modu, SD_MMC start() yönteminde seçilebilir, ör.

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

SPI veri yolu (HSPI veya VSPI), SPIClass örneği oluşturulurken seçilebilir, örn.

SPIClass spi = SPIClass(HSPI);

Gördüğünüz gibi 1-bit / 4-bit SD bus pin paylaşım pinleri HSPI ile ancak SD kart pin eşleştirmesi aynı değil. Bu nedenle, donanım SD veri yolu pin haritasına göre bağlanırsa, HSPI yerel pinlerini doğrudan kullanamaz. GPIO pinleri, SPIClass start() yönteminde geçersiz kılınabilir, örn.

SPIClass spi = SPIClass(HSPI);

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

Ayrıca SD kütüphanesi, SD start() yönteminde SS pinini, SPI veri yolunu ve veri yolu frekansını geçersiz kılabilir, örn.

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

3. Adım: SD Çekme Gereksinimleri

4-bit SD veri yolu modunu kullanmak istiyorsanız, lütfen ESP32 SD Çekme Gereksinimlerini takip edin, özellikle:

  • GPIO13'te Pull-up Çakışmaları
  • DAT2'de Bootstrap ve SDIO Arasındaki Çakışmalar

Referans:

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

Adım 4: Çeşitli Donanım

Çeşitli Donanım
Çeşitli Donanım

ESP32'de tonlarca geliştirme kiti ve geliştirme kartı bulunur, bazılarında yerleşik MicroSD kart yuvası bulunur.

İşte elimde birkaç örnek:

  • TTGO T-Watch, 1 bit SD veri yolu moduna göre GPIO pin 2, 13, 14 ve 15'e bağlanır, böylece 1 bit SD veri yolu modu ve SPI veri yolu modunu kullanabilir
  • M5Stack Serisi, GPIO pinleri 4, 18, 19 ve 23'e VSPI native pinlerine göre bağlanır, böylece varsayılan SD kütüphane ayarlarını kullanabilir [SD.begin(4)]
  • ODROID-GO, VSPI yerel pinlerine göre GPIO pinleri 18, 19, 22 ve 23'e bağlanır, böylece varsayılan SD kütüphane ayarlarını kullanabilir [SD.begin(22)]
  • ESP32-CAM, 4 bit SD bus moduna göre GPIO pinleri 2, 4, 12, 13, 14 ve 15'e bağlanır, böylece tüm 4-bit / 1-bit SD bus modunu ve SPI bus modunu kullanabilir
  • TTGO T8 dev kartı, 1 bit SD veri yolu moduna göre GPIO pinleri 2, 13, 14 ve 15'e bağlanır, böylece 1 bit SD veri yolu modunu ve SPI veri yolu modunu kullanabilir

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

Adım 5: SD Kart Yuvası Koparma Kartı

SD Kart Yuvası Koparma Kartı
SD Kart Yuvası Koparma Kartı
SD Kart Yuvası Koparma Kartı
SD Kart Yuvası Koparma Kartı

Dahili MicroSD kart yuvasına sahip geliştirme kartı tüm pinleri bağlamayabilir ve çoğu 4 bit SD veri yolu modunu kullanamaz. Ayrı bir SD kart yuvası koparma kartı daha iyi esneklik sağlar.

Aynı zamanda, birçok LCD devre kartı, tam boyutlu bir SD kart yuvasını da koparır. Ancak, çoğu yalnızca SPI modu pinlerini kırar. 4 bit SD veri yolu modu olarak kullanmak yeterli değildir, ancak yine de bu bağlantı eşlemesi ile 1 bit SD veri yolu modu olarak kullanabilirsiniz:

LCD -> ESP32

SD_CS -> sıfır SD_MOSI -> 15 SD_MISO -> 2 SD_SCK -> 14

Adım 6: Program Sırasında GPIO 2'yi Ayırın

Program Sırasında GPIO 2'yi Ayırın
Program Sırasında GPIO 2'yi Ayırın

4 bitlik SD veri yolu modu bağlantısı, ESP32'nin program moduna girmemesine neden oldu. Lütfen yeni program yüklemeden önce GPIO 2'yi SD kart yuvası DAT0 ayırma kartından ayırmayı unutmayın.

7. Adım: Karşılaştırma

Kalite Testi
Kalite Testi
Kalite Testi
Kalite Testi

Ben kıyaslama için basit bir Arduino programı yazdım:

github.com/moononournation/ESP32_SD_Benchm…

İşte kıyaslama için donanım:

ESP32

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

SD kart yuvası

Bir MicroSD kart yuvası koparma kartı

Hafıza kartı

Elimde bir SanDisk 8 GB MicroSD ve eski bir 128 MB MicroSD var.

8. Adım: SD_MMC 4-bit Mod Kıyaslaması

SanDisk 8 GB MicroSD

20:27:46.000 -> Test yazma /test_1k.bin

20:27:59.399 -> Kullanılan dosya yaz: 13404 ms, 312.914368 KB/s 20:27:59.399 -> Test yazma /test_2k.bin 20:28:17.248 -> Kullanılan dosya yaz: 17834 ms, 235.185822 KB/s 20:28:17.248 -> Test yazma /test_4k.bin 20:28:21.122 -> Kullanılan dosya yazma: 3873 ms, 1082.959961 KB/s 20:28:21.122 -> Test yazma /test_8k.bin 20:28:23.147 -> Kullanılan dosya yazma: 2024 ms, 2072.284668 KB/s 20:28:23.147 -> Test yazma /test_16k.bin 20:28:27.237 -> Kullanılan dosya yazma: 4097 ms, 1023.750061 KB/s 20:28:27.237 -> Test /test_32k.bin 20:28:30.088 -> Kullanılan dosya yaz: 2842 ms, 1475.828247 KB/s 20:28:30.088 -> Test yazma /test_64k.bin 20:28:31.882 -> Kullanılan dosya yaz: 1811 ms, 2316.015381 KB/sn 20:28:31.882 -> Test okuması /test_1k.bin 20:28:35.422 -> Kullanılan dosya okuması: 3520 ms, 1191.563599 KB/sn 20:28:35.422 -> Test okuması /test_2k.bin 20: 28:38.813 -> Kullanılan dosyayı oku: 3389 ms, 1237.622925 KB/s 20:28:38.813 -> Test okuması /test_4k.bin 20:28:42.273 -> Kullanılan dosyayı oku: 3474 ms, 1207.341431 KB/s 20:28:42.273 -> Test okuması /test_8k.bin 20:28:45.752 - > Kullanılan dosyayı oku: 3487 ms, 1202.840210 KB/s 20:28:45.752 -> Test okuması /test_16k.bin 20:28:48.988 -> Kullanılan dosyayı oku: 3213 ms, 1305.416748 KB/s 20:28:48.988 -> Test okuma /test_32k.bin 20:28:52.077 -> Kullanılan dosya okuma: 3093 ms, 1356.063354 KB/s 20:28:52.077 -> Test okuma /test_64k.bin 20:28:55.141 -> Kullanılan okuma dosyası: 3080 ms, 1361.786987 KB/sn

Eski 128 MB MicroSD

20:30:43.309 -> E (274) sdmmc_sd: sdmmc_check_scr: send_scr 0x109 döndürdü

20:30:43.309 -> Kart Takma Başarısız

9. Adım: SD_MMC 1-bit Mod Kıyaslaması

SanDisk 8 GB MicroSD

20:31:45.194 -> Test yazma /test_1k.bin

20:31:59.506 -> Kullanılan dosya yazma: 14325 ms, 292.796082 KB/s 20:31:59.506 -> Test yazma /test_2k.bin 20:32:17.686 -> Kullanılan dosya yazma: 18163 ms, 230.925735 KB/s 20:32:17.686 -> Test yazma /test_4k.bin 20:32:21.291 -> Kullanılan dosya yazma: 3611 ms, 1161.535278 KB/s 20:32:21.291 -> Test yazma /test_8k.bin 20:32:23.939 -> Kullanılan dosya yazma: 2652 ms, 1581.562622 KB/s 20:32:23.939 -> Test yazma /test_16k.bin 20:32:28.397 -> Kullanılan dosya yazma: 4448 ms, 942.964050 KB/s 20:32:28.397 -> Test /test_32k.bin 20:32:31.835 -> Kullanılan dosya yaz: 3429 ms, 1223.185791 KB/s 20:32:31.835 -> Test yazma /test_64k.bin 20:32:33.882 -> Kullanılan dosya yaz: 2058 ms, 2038.048584 KB/sn 20:32:33.882 -> Test okuması /test_1k.bin 20:32:38.031 -> Kullanılan dosya okuması: 4146 ms, 1011.650757 KB/sn 20:32:38.031 -> Test okuması /test_2k.bin 20: 32:42.062 -> Kullanılan dosyayı oku: 4019 ms, 1043.618774 KB/s 20:32:42.062 -> Test okuması /test_4k.bin 20:32:46.170 -> Kullanılan dosyayı oku: 4106 ms, 1021.506104 KB/s 20:32:46.170 -> Test okuması /test_8k.bin 20:32:50.288 -> Kullanılan dosyayı oku: 4121 ms, 1017.787903 KB/s 20:32:50.288 -> Test okuması /test_16k.bin 20:32:54.112 -> Kullanılan dosyayı oku: 3840 ms, 1092.266724 KB/s 20:32:54.112 -> Test read /test_32k.bin 20:32:57.840 -> Kullanılan dosyayı oku: 3739 ms, 1121.771606 KB/s 20:32:57.840 -> Test read /test_64k.bin 20:33:01.568 -> Kullanılan dosyayı oku: 3711 ms, 1130.235474 KB/sn

Eski 128 MB MicroSD

20:33:27.366 -> Test yazma /test_1k.bin

20:33:42.386 -> Kullanılan dosya yazma: 15020 ms, 279.247925 KB/s 20:33:42.386 -> Test yazma /test_2k.bin 20:33:57.927 -> Kullanılan dosya yazma: 15515 ms, 270.338654 KB/s 20:33:57.927 -> Test yazma /test_4k.bin 20:34:13.108 -> Kullanılan dosya yazma: 15195 ms, 276.031860 KB/s 20:34:13.108 -> Test yazma /test_8k.bin 20:34:28.162 -> Kullanılan dosya yazma: 15048 ms, 278.728333 KB/s 20:34:28.162 -> Test yazma /test_16k.bin 20:34:43.287 -> Kullanılan dosya yazma: 15142 ms, 276.998016 KB/s 20:34:43.287 -> Test /test_32k.bin 20:34:58.278 -> Kullanılan dosya yaz: 14964 ms, 280.292969 KB/s 20:34:58.278 -> Test yazma /test_64k.bin 20:35:13.370 -> Kullanılan dosya yaz: 15101 ms, 277.750092 KB/s 20:35:13.370 -> Test okuması /test_1k.bin 20:35:17.563 -> Kullanılan dosya okuma: 4197 ms, 999.357666 KB/s 20:35:17.563 -> Test okuması /test_2k.bin 20: 35:21.746 -> Kullanılan dosyayı oku: 4191 ms, 1000.788330 KB/s 20:35:21.746 -> Test okuması /test_4k.bin 20:35:25.942 -> Kullanılan dosyayı oku: 4181 ms, 1003.182007 KB/s 20:35:25.942 -> Test okuması /test_8k.bin 20:35:30.101 -> Kullanılan dosya okuma: 4176 ms, 1004.383118 KB/s 20:35:30.101 -> Test okuma /test_16k.bin 20:35:34.279 -> Kullanılan dosya okuma: 4174 ms, 1004.864380 KB/s 20:35:34.279 -> Test read /test_32k.bin 20:35:38.462 -> Kullanılan dosyayı oku: 4173 ms, 1005.105225 KB/s 20:35:38.462 -> Test read /test_64k.bin 20:35:42.612 -> Kullanılan dosyayı oku: 4173 ms, 1005.105225 KB/sn

Adım 10: HSPI Bus Benchmark'ta SD SPI Modu

SanDisk 8 GB MicroSD

08:41:19.703 -> Test yazma /test_1k.bin

08:41:53.458 -> Kullanılan dosya yaz: 33743 ms, 124.301453 KB/s 08:41:53.458 -> Test yazma /test_2k.bin 08:42:10.000 -> Kullanılan dosya yaz: 16540 ms, 253.585495 KB/s 08:42:10.000 -> Test yazma /test_4k.bin 08:42:17.269 -> Kullanılan dosya yazma: 7298 ms, 574.719666 KB/s 08:42:17.308 -> Test yazma /test_8k.bin 08:42:22.640 -> Kullanılan dosya yazma: 5345 ms, 784.715454 KB/s 08:42:22.640 -> Test yazma /test_16k.bin 08:42:32.285 -> Kullanılan dosya yazma: 9662 ms, 434.103088 KB/s 08:42:32.285 -> Test /test_32k.bin 08:42:36.659 -> Kullanılan dosya yaz: 4355 ms, 963.100830 KB/s 08:42:36.659 -> Test yazma /test_64k.bin 08:42:39.594 -> Kullanılan dosya yaz: 2949 ms, 1422.280151 KB/sn 08:42:39.594 -> Test okuması /test_1k.bin 08:42:44.774 -> Kullanılan dosya okuması: 5192 ms, 807.839783 KB/sn 08:42:44.774 -> Test okuması /test_2k.bin 08: 42:49.969 -> Kullanılan dosyayı oku: 5189 ms, 808.306824 KB/s 08:42:49.969 -> Test okuması /test_4k.bin 08:42:55.123 -> Kullanılan dosyayı oku: 5161 ms, 812.692139 KB/s 08:42:55.158 -> Test okuması /test_8k.bin 08:43:00.300 -> Okuma kullanılan dosya: 5176 ms, 810.336914 KB/sn 08:43:00.334 -> Test okuması /test_16k.bin 08:43:05.277 -> Kullanılan dosyayı okuyun: 4948 ms, 847.676636 KB/sn 08:43:05.277 -> Test okuması /test_32k.bin 08:43:10.028 -> Kullanılan dosyayı oku: 4773 ms, 878.756348 KB/s 08:43:10.028 -> Test okuması /test_64k.bin 08:43:14.760 -> Kullanılan dosyayı oku: 4731 ms, 886.557617 KB/sn

Eski 128 MB MicroSD

08:43:47.777 -> Test yazma /test_1k.bin

08:44:04.148 -> Kullanılan dosya yazma: 16390 ms, 255.906281 KB/s 08:44:04.183 -> Test yazma /test_2k.bin 08:44:20.648 -> Kullanılan dosya yazma: 16494 ms, 254.292709 KB/s 08:44:20.648 -> Test yazma /test_4k.bin 08:44:36.674 -> Kullanılan dosya yazma: 16001 ms, 262.127625 KB/s 08:44:36.674 -> Test yazma /test_8k.bin 08:44:52.849 -> Kullanılan dosya yazma: 16175 ms, 259.307831 KB/s 08:44:52.849 -> Test yazma /test_16k.bin 08:45:09.225 -> Kullanılan dosya yazma: 16397 ms, 255.797043 KB/s 08:45:09.225 -> Test /test_32k.bin 08:45:25.363 -> Kullanılan dosya yaz: 16143 ms, 259.821838 KB/s 08:45:25.397 -> Test yazma /test_64k.bin 08:45:41.632 -> Kullanılan dosya yaz: 16263 ms, 257.904694 KB/s 08:45:41.632 -> Test okuması /test_1k.bin 08:45:46.488 -> Kullanılan dosya okuma: 4856 ms, 863.736389 KB/s 08:45:46.488 -> Test okuması /test_2k.bin 08: 45:51.332 -> Kullanılan dosya okuma: 4840 ms, 866.591736 KB/s 08:45:51.332 -> Test okuma /test_4k.bin 08:45:56.163 -> Kullanılan dosya okuma: 4834 ms, 867.667358 KB/s 08:45:56.163 -> Test okuması /test_8k.bin 08:46:00.998 -> R kullanılan ead dosyası: 4827 ms, 868.925598 KB/s 08:46:00.998 -> Test okuması /test_16k.bin 08:46:05.808 -> Kullanılan dosyayı oku: 4825 ms, 869.285828 KB/s 08:46:05.843 -> Test read /test_32k.bin 08:46:10.637 -> Kullanılan dosyayı oku: 4824 ms, 869.466003 KB/s 08:46:10.637 -> Test read /test_64k.bin 08:46:15.478 -> Kullanılan dosyayı oku: 4825 ms, 869.285828 KB/sn

Adım 11: VSPI Bus Benchmark'ta SD SPI Modu

SanDisk 8 GB MicroSD

08:54:17.412 -> Test yazma /test_1k.bin

08:54:48.398 -> Kullanılan dosya yaz: 30994 ms, 135.326324 KB/s 08:54:48.398 -> Test yazma /test_2k.bin 08:55:06.079 -> Kullanılan dosya yaz: 17677 ms, 237.274658 KB/s 08:55:06.079 -> Test yazma /test_4k.bin 08:55:13.357 -> Kullanılan dosya yazma: 7274 ms, 576.615906 KB/s 08:55:13.357 -> Test yazma /test_8k.bin 08:55:18.691 -> Kullanılan dosya yazma: 5323 ms, 787.958679 KB/s 08:55:18.691 -> Test yazma /test_16k.bin 08:55:28.336 -> Kullanılan dosya yazma: 9669 ms, 433.788818 KB/s 08:55:28.336 -> Test /test_32k.bin 08:55:32.646 -> Kullanılan dosya yaz: 4309 ms, 973.382202 KB/s 08:55:32.646 -> Test yazma /test_64k.bin 08:55:35.551 -> Kullanılan dosya yaz: 2915 ms, 1438.869263 KB/s 08:55:35.584 -> Test okuması /test_1k.bin 08:55:40.745 -> Kullanılan dosya okuma: 5183 ms, 809.242554 KB/s 08:55:40.745 -> Test okuması /test_2k.bin 08: 55:45.916 -> Kullanılan dosyayı oku: 5182 ms, 809.398682 KB/s 08:55:45.949 -> Test okuması /test_4k.bin 08:55:51.091 -> Kullanılan dosyayı oku: 5162 ms, 812.534668 KB/s 08:55:51.091 -> Test okuması /test_8k.bin 08:55:56.257 -> Okuma kullanılan dosya: 5177 ms, 810.180420 KB/sn 08:55:56.293 -> Test okuması /test_16k.bin 08:56:01.244 -> Kullanılan dosyayı oku: 4956 ms, 846.308289 KB/sn 08:56:01.244 -> Test okuması /test_32k.bin 08:56:06.006 -> Kullanılan dosyayı oku: 4764 ms, 880.416443 KB/s 08:56:06.006 -> Test okuması /test_64k.bin 08:56:10.716 -> Kullanılan dosyayı oku: 4728 ms, 887.120117 KB/sn

Eski 128 MB MicroSD

08:51:01,939 -> Test yazma /test_1k.bin

08:51:18.358 -> Kullanılan dosya yaz: 16422 ms, 255.407623 KB/s 08:51:18.358 -> Test yazma /test_2k.bin 08:51:34.529 -> Kullanılan dosya yaz: 16173 ms, 259.339874 KB/s 08:51:34.529 -> Test yazma /test_4k.bin 08:51:50.911 -> Kullanılan dosya yazma: 16372 ms, 256.187653 KB/s 08:51:50.911 -> Test yazma /test_8k.bin 08:52:07.056 -> Kullanılan dosya yazma: 16137 ms, 259.918457 KB/s 08:52:07.056 -> Test yazma /test_16k.bin 08:52:23.383 -> Kullanılan dosya yazma: 16351 ms, 256.516663 KB/s 08:52:23.383 -> Test /test_32k.bin 08:52:39.533 -> Kullanılan dosya yaz: 16128 ms, 260.063507 KB/s 08:52:39.533 -> Test yazma /test_64k.bin 08:52:55.764 -> Kullanılan dosya yaz: 16250 ms, 258.111023 KB/s 08:52:55.764 -> Test okuması /test_1k.bin 08:53:00.645 -> Kullanılan dosya okuma: 4855 ms, 863.914307 KB/s 08:53:00.645 -> Test okuması /test_2k.bin 08: 53:05.459 -> Kullanılan dosyayı oku: 4839 ms, 866.770813 KB/s 08:53:05.459 -> Test okuması /test_4k.bin 08:53:10.306 -> Kullanılan dosyayı oku: 4833 ms, 867.846863 KB/s 08:53:10.306 -> Test okuması /test_8k.bin 08:53:15.127 -> R kullanılan ead dosyası: 4827 ms, 868.925598 KB/s 08:53:15.127 -> Test okuması /test_16k.bin 08:53:19.963 -> Kullanılan dosyayı oku: 4826 ms, 869.105652 KB/s 08:53:19.963 -> Test read /test_32k.bin 08:53:24.758 -> Kullanılan dosyayı oku: 4824 ms, 869.466003 KB/s 08:53:24.792 -> Test read /test_64k.bin 08:53:29.592 -> Kullanılan dosyayı oku: 4824 ms, 869.466003 KB/sn

Adım 12: Yuvarla

4-bit SD veri yolu modu en iyi performansa sahiptir, 1-bit SD veri yolu modu yaklaşık %20 daha yavaştır ve SPI modu yaklaşık %50 daha yavaştır. Bunun ana nedenlerinden biri, SD_MMC protokol katmanının herhangi bir kilitleme gerçekleştirmemesi, ancak SPI'nin yapmasıdır. Ayrıca 4-bit SD veri yolu modu, teorik olarak hızı iki katına çıkaracak şekilde çift veri hattına sahiptir. Ancak eski MicroSD'm 4 bit SD veri yolu modunu destekleyemez.

Çoğu durumda 1 bit SD veri yolu modunu önereceğim, çünkü:

  • iyi performans
  • daha iyi SD kart uyumluluğu
  • daha gevşek SD Pull-up gereksinimleri
  • sadece 3 GPIO pini gerekli
  • daha az kod yapılandırması
  • birçok geliştirme kiti, geliştirme panosu ve koparma panosu bu modu kullanabilir

Önerilen: