Съдържание:

Изберете SD интерфейс за ESP32: 12 стъпки (със снимки)
Изберете SD интерфейс за ESP32: 12 стъпки (със снимки)

Видео: Изберете SD интерфейс за ESP32: 12 стъпки (със снимки)

Видео: Изберете SD интерфейс за ESP32: 12 стъпки (със снимки)
Видео: How to setup and use ESP32 Cam with Micro USB WiFi Camera 2024, Декември
Anonim
Изберете SD интерфейс за ESP32
Изберете SD интерфейс за ESP32

Тези инструкции показват нещо относно избора на SD интерфейс за вашия проект ESP32.

Стъпка 1: SD интерфейс

В оригиналната SD библиотека на Arduino, SD интерфейсът използва режим на трансфер на шина SD SPI.

SD всъщност имат повече режим на трансфер:

  • Режим на SPI шина: ESP32 има повече от 1 SPI шина, тя може да персонализира по време на инициализация
  • Режим на 1-битова / 4-битова SD шина: ESP32 отделя друга библиотека, наречена SD_MMC, за внедряване на API за режим на SD шина
  • SD UHS-II режим: ESP32 не се поддържа

Реф.:

www.arduino.cc/en/reference/SD

en.wikipedia.org/wiki/SD_card

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

Стъпка 2: Съпоставяне на щифтове на ESP32 GPIO

Ето стандартното картографиране на ESP32 GPIO щифтове:

ПИН за SD карта MicroSD щифт Име 4-битова SD шина 1-битова SD шина SPI шина (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 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 - -

Съпоставянето на пиновете GPIO на 1-битова / 4-битова SD шина не може да бъде променено.

Просто повикване SD_MMC begin () към първоначалния режим на 4-битова SD шина:

SD_MMC.begin ();

Режимът на 1-битова SD шина може да бъде избран по метода SD_MMC begin (), напр.

SD_MMC.begin ("/cdcard", вярно);

SPI шината (HSPI или VSPI) може да бъде избрана, докато се създава екземпляр на SPIClass, напр.

SPIClass spi = SPIClass (HSPI);

Както можете да видите 1-битови / 4-битови щифтове за споделяне на SD шина с HSPI, но картографирането на щифтовете на SD картата не е същото. Така че, ако хардуерът е свързан според картата на шината на SD шината, той не може директно да използва HSPI родните щифтове. Пиновете GPIO могат да бъдат отменени по метода SPIClass begin (), напр.

SPIClass spi = SPIClass (HSPI);

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

Също така SD библиотеката може да замени SS пина, SPI шината и честотата на шината при SD start () метод, напр.

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

Стъпка 3: Изисквания за изтегляне на SD

Ако искате да използвате 4-битов режим на SD шина, моля, слепете, следвайте изискванията за издърпване на ESP32 SD, особено:

  • Изтеглящи се конфликти на GPIO13
  • Конфликти между Bootstrap и SDIO на DAT2

Реф.:

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

Стъпка 4: Различен хардуер

Различен хардуер
Различен хардуер

ESP32 имат много комплекти за разработчици и дъска за разработка, някои от тях имат вграден слот за MicroSD карта.

Ето няколко примера в ръката ми:

  • TTGO T-Watch, той е свързан към GPIO пинове 2, 13, 14 и 15 според 1-битов режим на SD шина, така че може да използва 1-битов режим на SD шина и режим SPI шина
  • M5Stack Series, той е свързан към GPIO пинове 4, 18, 19 и 23 според родните пинове на VSPI, така че може да използва настройките по подразбиране на SD библиотеката [SD.begin (4)]
  • ODROID-GO, той е свързан към GPIO пинове 18, 19, 22 и 23 според родните пинове на VSPI, така че може да използва настройките на SD библиотеката по подразбиране [SD.begin (22)]
  • ESP32-CAM, той е свързан към GPIO пинове 2, 4, 12, 13, 14 и 15 според 4-битов режим на SD шина, така че може да използва всички 4-битов / 1-битов режим на SD шина и режим SPI шина
  • TTGO T8 dev board, той е свързан към GPIO пинове 2, 13, 14 и 15 според 1-битов режим на SD шина, така че може да използва 1-битов режим на SD шина и режим 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

Стъпка 5: Табла за пробиване на слот за SD карта

Пробивна платка за слот за SD карта
Пробивна платка за слот за SD карта
Пробивна платка за слот за SD карта
Пробивна платка за слот за SD карта

Разработената платка с вграден слот за MicroSD карта може да не е свързала всички пинове и повечето не могат да използват 4-битов режим на SD шина. Отделна платка за пробиване на слот за SD карта осигурява по -добра гъвкавост.

В същото време много пробивни LCD платки също пробиват слот за SD карта в пълен размер. Повечето от тях обаче разбиват само щифтовете за SPI режим. Не е достатъчно да се използва като 4-битов режим на SD шина, но все пак можете да го използвате като 1-битов режим на SD шина чрез това картографиране на връзката:

LCD -> ESP32

SD_CS -> нула SD_MOSI -> 15 SD_MISO -> 2 SD_SCK -> 14

Стъпка 6: Отделете GPIO 2 по време на програмата

Отделете GPIO 2 докато програмата
Отделете GPIO 2 докато програмата

4-битовата връзка в режим SD шина прави ESP32 неуспешен да влезе в програмен режим. Моля, не забравяйте да отделите GPIO 2 от платката за пробиване на слота за SD карта DAT0, преди да качите нова програма.

Стъпка 7: Бенчмарк

Бенчмарк
Бенчмарк
Бенчмарк
Бенчмарк

Написах проста програма Arduino за бенчмарка:

github.com/moononournation/ESP32_SD_Benchm…

Ето хардуера за бенчмарка:

ESP32

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

Слот за SD карта

Пробивна платка за слот за MicroSD карта

SD карта

Имам в ръка SanDisk 8 GB MicroSD и стар 128 MB MicroSD.

Стъпка 8: Сравнителен показател за 4-битов режим на SD_MMC

SanDisk 8 GB MicroSD

20: 27: 46.000 -> Тестово записване /test_1k.bin

20: 27: 59.399 -> Използвани файлове за запис: 13404 ms, 312.914368 KB/s 20: 27: 59.399 -> Test write /test_2k.bin 20: 28: 17.248 -> Използвани файлове за запис: 17834 ms, 235.185822 KB/s 20: 28: 17.248 -> Тестово записване /test_4k.bin 20: 28: 21.122 -> Използван файл за запис: 3873 ms, 1082.959961 KB /s 20: 28: 21.122 -> Test write /test_8k.bin 20: 28: 23.147 -> Използвани файлове за запис: 2024 ms, 2072.284668 KB/s 20: 28: 23.147 -> Test write /test_16k.bin 20: 28: 27.237 -> Използвани файлове за запис: 4097 ms, 1023.750061 KB/s 20: 28: 27.237 -> Test write /test_32k.bin 20: 28: 30.088 -> Използвайте записан файл: 2842 ms, 1475.828247 KB /s 20: 28: 30.088 -> Test write /test_64k.bin 20: 28: 31.882 -> Използвайте записания файл: 1811 ms, 2316.015381 KB /s 20: 28: 31.882 -> Test read /test_1k.bin 20: 28: 35.422 -> Използвани файлове за четене: 3520 ms, 1191.563599 KB /s 20: 28: 35.422 -> Test read /test_2k.bin 20: 28: 38.813 -> Използвани файлове за четене: 3389 ms, 1237.622925 KB/s 20: 28: 38.813 -> Test read/test_4k.bin 20: 28: 42.273 -> Използвани файлове за четене: 3474 ms, 1207.341431 KB/s 20:28: 42.273 -> Тестово четене /test_8k.bin 20: 28: 45.752 - > Използвани файлове за четене: 3487 ms, 1202.840210 KB/s 20: 28: 45.752 -> Test read/test_16k.bin 20: 28: 48.988 -> Използвани файлове за четене: 3213 ms, 1305.416748 KB/s 20: 28: 48.988 -> Тестово четене /test_32k.bin 20: 28: 52.077 -> Използвани файлове за четене: 3093 ms, 1356.063354 KB /s 20: 28: 52.077 -> Test read /test_64k.bin 20: 28: 55.141 -> Използвани файлове за четене: 3080 ms, 1361.786987 KB/s

Стар 128 MB MicroSD

20: 30: 43.309 -> E (274) sdmmc_sd: sdmmc_check_scr: send_scr върнато 0x109

20: 30: 43.309 -> Неуспешно монтиране на карта

Стъпка 9: SD_MMC 1-битов режим бенчмарк

SanDisk 8 GB MicroSD

20: 31: 45.194 -> Тестов запис /test_1k.bin

20: 31: 59.506 -> Използвани файлове за запис: 14325 ms, 292.796082 KB/s 20: 31: 59.506 -> Test write /test_2k.bin 20: 32: 17.686 -> Използвани файлове за запис: 18163 ms, 230.925735 KB/s 20: 32: 17.686 -> Test write /test_4k.bin 20: 32: 21.291 -> Използван файл за запис: 3611 ms, 1161.535278 KB /s 20: 32: 21.291 -> Test write /test_8k.bin 20: 32: 23.939 -> Използвани файлове за запис: 2652 ms, 1581.562622 KB/s 20: 32: 23.939 -> Test write /test_16k.bin 20: 32: 28.397 -> Използвани файлове за запис: 4448 ms, 942.964050 KB/s 20: 32: 28.397 -> Test write /test_32k.bin 20: 32: 31.835 -> Използвайте записан файл: 3429 ms, 1223.185791 KB /s 20: 32: 31.835 -> Test write /test_64k.bin 20: 32: 33.882 -> Използвайте записания файл: 2058 ms, 2038.048584 KB /s 20: 32: 33.882 -> Тестово четене /test_1k.bin 20: 32: 38.031 -> Използвано четене на файл: 4146 ms, 1011.650757 KB /s 20: 32: 38.031 -> Test read /test_2k.bin 20: 32: 42.062 -> Използвани файлове за четене: 4019 ms, 1043.618774 KB/s 20: 32: 42.062 -> Test read/test_4k.bin 20: 32: 46.170 -> Използвани файлове за четене: 4106 ms, 1021.506104 KB/s 20:32: 46.170 -> Тестово четене /test_8k.bin 20: 32: 50.288 -> Използвани файлове за четене: 4121 ms, 1017.787903 KB/s 20: 32: 50.288 -> Test read /test_16k.bin 20: 32: 54.112 -> Използвани файлове за четене: 3840 ms, 1092.266724 KB/s 20: 32: 54.112 -> Test прочетете /test_32k.bin 20: 32: 57.840 -> Използвайте четения файл: 3739 ms, 1121.771606 KB /s 20: 32: 57.840 -> Test read /test_64k.bin 20: 33: 01.568 -> Прочетете използвания файл: 3711 ms, 1130.235474 KB/s

Стар 128 MB MicroSD

20: 33: 27.366 -> Тестов запис /test_1k.bin

20: 33: 42.386 -> Използвани файлове за запис: 15020 ms, 279.247925 KB/s 20: 33: 42.386 -> Test write /test_2k.bin 20: 33: 57.927 -> Използвани файлове за запис: 15515 ms, 270.338654 KB/s 20: 33: 57.927 -> Test write /test_4k.bin 20: 34: 13.108 -> Използван файл за запис: 15195 ms, 276.031860 KB /s 20: 34: 13.108 -> Test write /test_8k.bin 20: 34: 28.162 -> Използвани файлове за запис: 15048 ms, 278.728333 KB/s 20: 34: 28.162 -> Test write /test_16k.bin 20: 34: 43.287 -> Използвани файлове за запис: 15142 ms, 276.998016 KB/s 20: 34: 43.287 -> Test write /test_32k.bin 20: 34: 58.278 -> Използвайте записания файл: 14964 ms, 280.292969 KB /s 20: 34: 58.278 -> Test write /test_64k.bin 20: 35: 13.370 -> Използвайте записания файл: 15101 ms, 277.750092 KB /s 20: 35: 13.370 -> Тестово четене /test_1k.bin 20: 35: 17.563 -> Използван файл за четене: 4197 ms, 999.357666 KB /s 20: 35: 17.563 -> Test read /test_2k.bin 20: 35: 21.746 -> Използвани файлове за четене: 4191 ms, 1000.788330 KB/s 20: 35: 21.746 -> Test read /test_4k.bin 20: 35: 25.942 -> Използвани файлове за четене: 4181 ms, 1003.182007 KB/s 20:35: 25.942 -> Тестово четене /test_8k.bin 20: 35: 30.101 -> Използвани прочетени файлове: 4176 ms, 1004.383118 KB/s 20: 35: 30.101 -> Test read /test_16k.bin 20: 35: 34.279 -> Използвани файлове за четене: 4174 ms, 1004.864380 KB/s 20: 35: 34.279 -> Test прочетете /test_32k.bin 20: 35: 38.462 -> Прочетете използвания файл: 4173 ms, 1005.105225 KB /s 20: 35: 38.462 -> Test read /test_64k.bin 20: 35: 42.612 -> Прочетете използвания файл: 4173 ms, 1005.105225 KB/s

Стъпка 10: SD SPI режим в HSPI Bus Benchmark

SanDisk 8 GB MicroSD

08: 41: 19.703 -> Тестов запис /test_1k.bin

08: 41: 53.458 -> Използвани файлове за запис: 33743 ms, 124.301453 KB/s 08: 41: 53.458 -> Test write /test_2k.bin 08: 42: 10.000 -> Използвани файлове за запис: 16540 ms, 253.585495 KB/s 08: 42: 10.000 -> Test write /test_4k.bin 08: 42: 17.269 -> Използван файл за запис: 7298 ms, 574.719666 KB /s 08: 42: 17.308 -> Test write /test_8k.bin 08: 42: 22.640 -> Използвани файлове за запис: 5345 ms, 784.715454 KB/s 08: 42: 22.640 -> Test write /test_16k.bin 08: 42: 32.285 -> Използвани файлове за запис: 9662 ms, 434.103088 KB/s 08: 42: 32.285 -> Test write /test_32k.bin 08: 42: 36.659 -> Запис на използван файл: 4355 ms, 963.100830 KB /s 08: 42: 36.659 -> Test write /test_64k.bin 08: 42: 39.594 -> Използван файл за запис: 2949 ms, 1422.280151 KB /s 08: 42: 39.594 -> Test read /test_1k.bin 08: 42: 44.774 -> Използвани файлове за четене: 5192 ms, 807.839783 KB /s 08: 42: 44.774 -> Test read /test_2k.bin 08: 42: 49.969 -> Използвани файлове за четене: 5189 ms, 808.306824 KB/s 08: 42: 49.969 -> Test read/test_4k.bin 08: 42: 55.123 -> Използвани файлове за четене: 5161 ms, 812.692139 KB/s 08:42: 55.158 -> Тестово четене /test_8k.bin 08: 43: 00.300 -> Прочети използван файл: 5176 ms, 810.336914 KB/s 08: 43: 00.334 -> Test read/test_16k.bin 08: 43: 05.277 -> Използваният файл за четене: 4948 ms, 847.676636 KB/s 08: 43: 05.277 -> Test read /test_32k.bin 08: 43: 10.028 -> Използвани файлове за четене: 4773 ms, 878.756348 KB /s 08: 43: 10.028 -> Test read /test_64k.bin 08: 43: 14.760 -> Използвани файлове за четене: 4731 ms, 886.557617 KB/s

Стар 128 MB MicroSD

08: 43: 47.777 -> Тестов запис /test_1k.bin

08: 44: 04.148 -> Използвани файлове за запис: 16390 ms, 255.906281 KB/s 08: 44: 04.183 -> Test write /test_2k.bin 08: 44: 20.648 -> Използвани файлове за запис: 16494 ms, 254.292709 KB/s 08: 44: 20.648 -> Test write /test_4k.bin 08: 44: 36.674 -> Използван файл за запис: 16001 ms, 262.127625 KB /s 08: 44: 36.674 -> Test write /test_8k.bin 08: 44: 52.849 -> Използвани файлове за запис: 16175 ms, 259.307831 KB/s 08: 44: 52.849 -> Test write /test_16k.bin 08: 45: 09.225 -> Използвани файлове за запис: 16397 ms, 255.797043 KB/s 08: 45: 09.225 -> Test write /test_32k.bin 08: 45: 25.363 -> Използвайте записания файл: 16143 ms, 259.821838 KB /s 08: 45: 25.397 -> Test write /test_64k.bin 08: 45: 41.632 -> Използвайте записания файл: 16263 ms, 257.904694 KB /s 08: 45: 41.632 -> Test read /test_1k.bin 08: 45: 46.488 -> Използвани файлове за четене: 4856 ms, 863.736389 KB /s 08: 45: 46.488 -> Test read /test_2k.bin 08: 45: 51.332 -> Използвани файлове за четене: 4840 ms, 866.591736 KB/s 08: 45: 51.332 -> Test read/test_4k.bin 08: 45: 56.163 -> Използвани файлове за четене: 4834 ms, 867.667358 KB/s 08:45: 56.163 -> Тестово четене /test_8k.bin 08: 46: 00.998 -> R ead файл, използван: 4827 ms, 868.925598 KB/s 08: 46: 00.998 -> Test read/test_16k.bin 08: 46: 05.808 -> Read file used: 4825 ms, 869.285828 KB/s 08: 46: 05.843 -> Test прочетете /test_32k.bin 08: 46: 10.637 -> Използвайте четения файл: 4824 ms, 869.466003 KB /s 08: 46: 10.637 -> Test read /test_64k.bin 08: 46: 15.478 -> Използвайте четения файл: 4825 ms, 869.285828 KB/s

Стъпка 11: SD SPI режим при VSPI Bus Benchmark

SanDisk 8 GB MicroSD

08: 54: 17.412 -> Тестов запис /test_1k.bin

08: 54: 48.398 -> Използвани файлове за запис: 30994 ms, 135.326324 KB/s 08: 54: 48.398 -> Test write /test_2k.bin 08: 55: 06.079 -> Използвани файлове за запис: 17677 ms, 237.274658 KB/s 08: 55: 06.079 -> Test write /test_4k.bin 08: 55: 13.357 -> Използван файл за запис: 7274 ms, 576.615906 KB /s 08: 55: 13.357 -> Test write /test_8k.bin 08: 55: 18.691 -> Използвани файлове за запис: 5323 ms, 787.958679 KB/s 08: 55: 18.691 -> Test write /test_16k.bin 08: 55: 28.336 -> Използвани файлове за запис: 9669 ms, 433.788818 KB/s 08: 55: 28.336 -> Test write /test_32k.bin 08: 55: 32.646 -> Използвайте записания файл: 4309 ms, 973.382202 KB /s 08: 55: 32.646 -> Test write /test_64k.bin 08: 55: 35.551 -> Използвайте записания файл: 2915 ms, 1438.869263 KB /s 08: 55: 35.584 -> Тестово четене /test_1k.bin 08: 55: 40.745 -> Използван файл за четене: 5183 ms, 809.242554 KB /s 08: 55: 40.745 -> Test read /test_2k.bin 08: 55: 45.916 -> Използвани файлове за четене: 5182 ms, 809.398682 KB/s 08: 55: 45.949 -> Test read/test_4k.bin 08: 55: 51.091 -> Използвани файлове за четене: 5162 ms, 812.534668 KB/s 08:55: 51.091 -> Тестово четене /test_8k.bin 08: 55: 56.257 -> Прочети използван файл: 5177 ms, 810.180420 KB/s 08: 55: 56.293 -> Тестово четене /test_16k.bin 08: 56: 01.244 -> Използвано четене на файл: 4956 ms, 846.308289 KB/s 08: 56: 01.244 -> Test read /test_32k.bin 08: 56: 06.006 -> Използвани файлове за четене: 4764 ms, 880.416443 KB /s 08: 56: 06.006 -> Test read /test_64k.bin 08: 56: 10.716 -> Използвани файлове за четене: 4728 ms, 887.120117 KB/s

Стар 128 MB MicroSD

08: 51: 01.939 -> Тестово записване /test_1k.bin

08: 51: 18.358 -> Използвани файлове за запис: 16422 ms, 255.407623 KB/s 08: 51: 18.358 -> Test write /test_2k.bin 08: 51: 34.529 -> Използвани файлове за запис: 16173 ms, 259.339874 KB/s 08: 51: 34.529 -> Test write /test_4k.bin 08: 51: 50.911 -> Използван файл за запис: 16372 ms, 256.187653 KB /s 08: 51: 50.911 -> Test write /test_8k.bin 08: 52: 07.056 -> Използвани файлове за запис: 16137 ms, 259.918457 KB/s 08: 52: 07.056 -> Test write /test_16k.bin 08: 52: 23.383 -> Използвани файлове за запис: 16351 ms, 256.516663 KB/s 08: 52: 23.383 -> Test write /test_32k.bin 08: 52: 39.533 -> Запис на използван файл: 16128 ms, 260.063507 KB /s 08: 52: 39.533 -> Test write /test_64k.bin 08: 52: 55.764 -> Използван файл за запис: 16250 ms, 258.111023 KB /s 08: 52: 55.764 -> Test read /test_1k.bin 08: 53: 00.645 -> Използваният файл за четене: 4855 ms, 863.914307 KB /s 08: 53: 00.645 -> Test read /test_2k.bin 08: 53: 05.459 -> Използвани файлове за четене: 4839 ms, 866.770813 KB/s 08: 53: 05.459 -> Test read/test_4k.bin 08: 53: 10.306 -> Използвани файлове за четене: 4833 ms, 867.846863 KB/s 08:53: 10.306 -> Тестово четене /test_8k.bin 08: 53: 15.127 -> R ead файл, използван: 4827 ms, 868.925598 KB/s 08: 53: 15.127 -> Тестово четене /test_16k.bin 08: 53: 19.963 -> Използвано четене на файл: 4826 ms, 869.105652 KB/s 08: 53: 19.963 -> Test прочетете /test_32k.bin 08: 53: 24.758 -> Използвайте четения файл: 4824 ms, 869.466003 KB /s 08: 53: 24.792 -> Test read /test_64k.bin 08: 53: 29.592 -> Прочетете използвания файл: 4824 ms, 869.466003 KB/s

Стъпка 12: Закръглете

Режимът 4-битова SD шина има най-добра производителност, 1-битовият SD шина е с около 20% по-бавен, а SPI режимът е с около 50% по-бавен. Една от основните причини е, че слоят протокол SD_MMC не прилага никакъв вид заключване, но SPI го прави. Също така 4-битовият режим на SD шина има двойни линии за данни, така че теоретично удвоява скоростта. Но старият ми MicroSD не може да поддържа режим на 4-битова SD шина.

В повечето случаи ще препоръчам 1-битов режим на SD шина, защото:

  • добро представяне
  • по -добра съвместимост с SD карта
  • по-хлабави SD изисквания за издърпване
  • необходими са само 3 GPIO пина
  • по -малка конфигурация на код
  • много комплекти за разработчици, дъска за разработчици и пробивна дъска могат да използват този режим

Препоръчано: