Indholdsfortegnelse:

Vælg SD -interface til ESP32: 12 trin (med billeder)
Vælg SD -interface til ESP32: 12 trin (med billeder)

Video: Vælg SD -interface til ESP32: 12 trin (med billeder)

Video: Vælg SD -interface til ESP32: 12 trin (med billeder)
Video: ESP32 Tutorial 12 - WS2812 RGB Srip 4 Project with SunFounder's ESP32 IoT Learnig kit 2024, November
Anonim
Vælg SD -interface til ESP32
Vælg SD -interface til ESP32

Denne instruks viser noget om valg af en SD -grænseflade til dit ESP32 -projekt.

Trin 1: SD -grænseflade

I det originale Arduino SD -bibliotek bruger SD Interface SD SPI -busoverførselstilstand.

SD har faktisk mere overførselstilstand:

  • SPI -bustilstand: ESP32 har mere end 1 SPI -bus, den kan tilpasses, mens den initialiseres
  • 1-bit / 4-bit SD-bustilstand: ESP32 dedikerer et andet bibliotek kaldet SD_MMC til at implementere SD-bus-tilstands-API
  • SD UHS-II-tilstand: ESP32 understøttes ikke

Ref.:

www.arduino.cc/en/reference/SD

da.wikipedia.org/wiki/SD_card

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

Trin 2: Kortlægning af ESP32 GPIO Pins

Her er standard ESP32 GPIO pins -kortlægning:

SD -kort pin MicroSD pin Navn 4-bit SD-bus 1-bit SD-bus SPI bus (HSPI / VSPInative pins)
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-pins-kortlægningen af 1-bit / 4-bit SD-bus kan ikke ændres.

Enkelt opkald SD_MMC begynder () til den oprindelige 4-bit SD-bustilstand:

SD_MMC.begynd ();

1-bit SD-bus-tilstand kan vælges ved SD_MMC begin () -metoden, f.eks.

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

SPI -bussen (HSPI eller VSPI) kan vælges, mens du opretter SPIClass -forekomsten, f.eks.

SPIClass spi = SPIClass (HSPI);

Som du kan se 1-bit / 4-bit SD bus pin pin dele pins med HSPI, men SD kort pins kortlægning er ikke det samme. Så hvis hardwaren er tilsluttet i henhold til SD -bus pin -kort, kan den ikke direkte bruge HSPI native pins. GPIO -benene kan tilsidesættes ved SPIClass begin () -metoden, f.eks.

SPIClass spi = SPIClass (HSPI);

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

Og også SD -bibliotek kan tilsidesætte SS -pin, SPI -bus og busfrekvens ved SD begin () -metode, f.eks.

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

Trin 3: SD pull-up krav

Hvis du vil bruge 4-bit SD-bus-tilstand, skal du følge ESP32 SD Pull-up-kravene, især:

  • Pull-up-konflikter på GPIO13
  • Konflikter mellem Bootstrap og SDIO på DAT2

Ref.:

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

Trin 4: Forskellig hardware

Forskellige hardware
Forskellige hardware

ESP32 har masser af dev kit og dev board, nogle af dem har indbygget MicroSD kort slot.

Her er nogle eksempler i min hånd:

  • TTGO T-Watch, det tilsluttet GPIO-ben 2, 13, 14 og 15 i henhold til 1-bit SD-bus-tilstand, så det kan bruge 1-bit SD-bus-tilstand og SPI-bus-tilstand
  • M5Stack Series, den blev forbundet til GPIO -ben 4, 18, 19 og 23 i henhold til VSPI native pins, så den kan bruge standardindstillinger for SD -bibliotek [SD.begin (4)]
  • ODROID-GO, den tilsluttede GPIO-benene 18, 19, 22 og 23 ifølge VSPI native pins, så den kan bruge standardindstillinger for SD-bibliotek [SD.begin (22)]
  • ESP32-CAM, den er forbundet til GPIO-ben 2, 4, 12, 13, 14 og 15 i henhold til 4-bit SD-bus-tilstand, så den kan bruge alle 4-bit / 1-bit SD-bustilstand og SPI-bustilstand
  • TTGO T8 dev board, det tilsluttet GPIO ben 2, 13, 14 og 15 i henhold til 1-bit SD bus mode, så det kan bruge 1-bit SD bus mode og SPI bus mode

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

Trin 5: SD Card Slot Breakout Board

SD Card Slot Breakout Board
SD Card Slot Breakout Board
SD Card Slot Breakout Board
SD Card Slot Breakout Board

Dev-kort med indbygget MicroSD-kortslot forbinder muligvis ikke alle ben, og de fleste kan ikke bruge 4-bit SD-bustilstand. Et individuelt SD -kort slot breakout board giver bedre fleksibilitet.

På samme tid bryder mange LCD breakout board også en SD -kortplads i fuld størrelse. De fleste af dem bryder dog kun SPI -tilstandsstifterne ud. Det er ikke nok at bruge som 4-bit SD-bus-tilstand, men du kan stadig bruge det som 1-bit SD-bus-tilstand ved denne forbindelseskortlægning:

LCD -> ESP32

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

Trin 6: Frakobl GPIO 2 While Program

Frakobl GPIO 2 mens programmet
Frakobl GPIO 2 mens programmet

4-bit SD-bustilstandsforbindelsen gør, at ESP32 ikke kunne gå i programtilstand. Husk at fjerne GPIO 2 fra SDAT -kortudbrudskortet DAT0, før du uploader et nyt program.

Trin 7: Benchmark

Benchmark
Benchmark
Benchmark
Benchmark

Jeg har skrevet et simpelt Arduino -program til benchmarket:

github.com/moononournation/ESP32_SD_Benchm…

Her er hardware til benchmark:

ESP32

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

SD -kortplads

Et MicroSD -kort slot breakout board

SD kort

Jeg har en SanDisk 8 GB MicroSD og en gammel 128 MB MicroSD i hånden.

Trin 8: SD_MMC 4-bit tilstandsbenchmark

SanDisk 8 GB MicroSD

20: 27: 46.000 -> Testskrivning /test_1k.bin

20: 27: 59.399 -> Skriv fil brugt: 13404 ms, 312.914368 KB/s 20: 27: 59.399 -> Testskrivning/test_2k.bin 20: 28: 17.248 -> Skriv fil brugt: 17834 ms, 235.185822 KB/s 20: 28: 17.248 -> Testskrivning /test_4k.bin 20: 28: 21.122 -> Skriv fil brugt: 3873 ms, 1082.959961 KB /s 20: 28: 21.122 -> Testskrivning /test_8k.bin 20: 28: 23.147 -> Brugt skrivefil: 2024 ms, 2072.284668 KB/s 20: 28: 23.147 -> Test skrive /test_16k.bin 20: 28: 27.237 -> Skriv fil brugt: 4097 ms, 1023.750061 KB/s 20: 28: 27.237 -> Test skrive /test_32k.bin 20: 28: 30.088 -> Skriv fil brugt: 2842 ms, 1475.828247 KB /s 20: 28: 30.088 -> Testskrivning /test_64k.bin 20: 28: 31.882 -> Skriv fil brugt: 1811 ms, 2316.015381 KB /s 20: 28: 31.882 -> Test læst /test_1k.bin 20: 28: 35.422 -> Læs fil brugt: 3520 ms, 1191.563599 KB /s 20: 28: 35.422 -> Test læst /test_2k.bin 20: 28: 38.813 -> Læs fil brugt: 3389 ms, 1237.622925 KB/s 20: 28: 38.813 -> Test læst/test_4k.bin 20: 28: 42.273 -> Læs fil brugt: 3474 ms, 1207.341431 KB/s 20:28: 42.273 -> Test læst /test_8k.bin 20: 28: 45.752 - > Læst fil brugt: 3487 ms, 1202.840210 KB/s 20: 28: 45.752 -> Test læst/test_16k.bin 20: 28: 48.988 -> Læs fil brugt: 3213 ms, 1305.416748 KB/s 20: 28: 48.988 -> Test læst /test_32k.bin 20: 28: 52.077 -> Læst fil brugt: 3093 ms, 1356.063354 KB /s 20: 28: 52.077 -> Test læst /test_64k.bin 20: 28: 55.141 -> Læst fil brugt: 3080 ms, 1361.786987 KB/s

Gammelt 128 MB MicroSD

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

20:30: 43.309 -> Kortmontering mislykkedes

Trin 9: SD_MMC 1-bit tilstandsbenchmark

SanDisk 8 GB MicroSD

20: 31: 45.194 -> Testskrivning /test_1k.bin

20: 31: 59.506 -> Brugt skrivefil: 14325 ms, 292.796082 KB/s 20: 31: 59.506 -> Testskrivning/test_2k.bin 20: 32: 17.686 -> Skriv fil brugt: 18163 ms, 230.925735 KB/s 20: 32: 17.686 -> Testskrivning /test_4k.bin 20: 32: 21.291 -> Skriv fil brugt: 3611 ms, 1161.535278 KB /s 20: 32: 21.291 -> Testskrivning /test_8k.bin 20: 32: 23.939 -> Brugt skrivefil: 2652 ms, 1581.562622 KB/s 20: 32: 23.939 -> Testskrivning/test_16k.bin 20: 32: 28.397 -> Skriv fil brugt: 4448 ms, 942.964050 KB/s 20: 32: 28.397 -> Test skrive /test_32k.bin 20: 32: 31.835 -> Skriv fil brugt: 3429 ms, 1223.185791 KB /s 20: 32: 31.835 -> Testskrivning /test_64k.bin 20: 32: 33.882 -> Skriv fil brugt: 2058 ms, 2038.048584 KB /s 20: 32: 33.882 -> Test læst /test_1k.bin 20: 32: 38.031 -> Læs fil brugt: 4146 ms, 1011.650757 KB /s 20: 32: 38.031 -> Test læst /test_2k.bin 20: 32: 42.062 -> Læst fil brugt: 4019 ms, 1043.618774 KB/s 20: 32: 42.062 -> Test læst/test_4k.bin 20: 32: 46.170 -> Læs fil brugt: 4106 ms, 1021.506104 KB/s 20:32: 46.170 -> Test læst /test_8k.bin 20: 32: 50.288 -> Brugt læst fil: 4121 ms, 1017.787903 KB/s 20: 32: 50.288 -> Test læst /test_16k.bin 20: 32: 54.112 -> Læs fil brugt: 3840 ms, 1092.266724 KB/s 20: 32: 54.112 -> Test læs /test_32k.bin 20: 32: 57.840 -> Læs fil brugt: 3739 ms, 1121.771606 KB /s 20: 32: 57.840 -> Test læst /test_64k.bin 20: 33: 01.568 -> Læs fil brugt: 3711 ms, 1130.235474 KB/s

Gammelt 128 MB MicroSD

20: 33: 27.366 -> Testskrivning /test_1k.bin

20: 33: 42.386 -> Skriv fil brugt: 15020 ms, 279.247925 KB/s 20: 33: 42.386 -> Testskrivning/test_2k.bin 20: 33: 57.927 -> Skriv fil brugt: 15515 ms, 270.338654 KB/s 20: 33: 57.927 -> Testskrivning /test_4k.bin 20: 34: 13.108 -> Skriv fil brugt: 15195 ms, 276.031860 KB /s 20: 34: 13.108 -> Testskrivning /test_8k.bin 20: 34: 28.162 -> Brugt skrivefil: 15048 ms, 278.728333 KB/s 20: 34: 28.162 -> Testskrivning/test_16k.bin 20: 34: 43.287 -> Skriv fil brugt: 15142 ms, 276.998016 KB/s 20: 34: 43.287 -> Test skrive /test_32k.bin 20: 34: 58.278 -> Skriv fil brugt: 14964 ms, 280.292969 KB /s 20: 34: 58.278 -> Testskrivning /test_64k.bin 20: 35: 13.370 -> Skriv fil brugt: 15101 ms, 277.750092 KB /s 20: 35: 13.370 -> Test læst /test_1k.bin 20: 35: 17.563 -> Læs fil brugt: 4197 ms, 999.357666 KB /s 20: 35: 17.563 -> Test læst /test_2k.bin 20: 35: 21.746 -> Læst fil brugt: 4191 ms, 1000.788330 KB/s 20: 35: 21.746 -> Test læst/test_4k.bin 20: 35: 25.942 -> Læs fil brugt: 4181 ms, 1003.182007 KB/s 20:35: 25.942 -> Test læst /test_8k.bin 20: 35: 30.101 -> Brugt læst fil: 4176 ms, 1004.383118 KB/s 20: 35: 30.101 -> Test læst/test_16k.bin 20: 35: 34.279 -> Læs fil brugt: 4174 ms, 1004.864380 KB/s 20: 35: 34.279 -> Test læs /test_32k.bin 20: 35: 38.462 -> Læs fil brugt: 4173 ms, 1005.105225 KB /s 20: 35: 38.462 -> Test læst /test_64k.bin 20: 35: 42.612 -> Læs fil brugt: 4173 ms, 1005.105225 KB/s

Trin 10: SD SPI -tilstand ved HSPI -busbenchmark

SanDisk 8 GB MicroSD

08: 41: 19.703 -> Testskrivning /test_1k.bin

08: 41: 53.458 -> Skriv fil brugt: 33743 ms, 124.301453 KB/s 08: 41: 53.458 -> Testskrivning/test_2k.bin 08: 42: 10.000 -> Skriv fil brugt: 16540 ms, 253.585495 KB/s 08: 42: 10.000 -> Testskrivning /test_4k.bin 08: 42: 17.269 -> Skriv fil brugt: 7298 ms, 574.719666 KB /s 08: 42: 17.308 -> Testskrivning /test_8k.bin 08: 42: 22.640 -> Brugt skrivefil: 5345 ms, 784.715454 KB/s 08: 42: 22.640 -> Test skriv/test_16k.bin 08: 42: 32.285 -> Skriv fil brugt: 9662 ms, 434.103088 KB/s 08: 42: 32.285 -> Test skrive /test_32k.bin 08: 42: 36.659 -> Skriv fil brugt: 4355 ms, 963.100830 KB /s 08: 42: 36.659 -> Testskrivning /test_64k.bin 08: 42: 39.594 -> Skriv fil brugt: 2949 ms, 1422.280151 KB /s 08: 42: 39.594 -> Test læst /test_1k.bin 08: 42: 44.774 -> Læs fil brugt: 5192 ms, 807.839783 KB /s 08: 42: 44.774 -> Test læst /test_2k.bin 08: 42: 49.969 -> Læs fil brugt: 5189 ms, 808.306824 KB/s 08: 42: 49.969 -> Test læst/test_4k.bin 08: 42: 55.123 -> Læs fil brugt: 5161 ms, 812.692139 KB/s 08:42: 55.158 -> Test læst /test_8k.bin 08: 43: 00.300 -> Læs brugt fil: 5176 ms, 810.336914 KB/s 08: 43: 00.334 -> Test læst/test_16k.bin 08: 43: 05.277 -> Læs fil brugt: 4948 ms, 847.676636 KB/s 08: 43: 05.277 -> Test læst /test_32k.bin 08: 43: 10.028 -> Læst fil brugt: 4773 ms, 878.756348 KB /s 08: 43: 10.028 -> Test læst /test_64k.bin 08: 43: 14.760 -> Læs fil brugt: 4731 ms, 886.557617 KB/s

Gammelt 128 MB MicroSD

08: 43: 47.777 -> Testskrivning /test_1k.bin

08: 44: 04.148 -> Brugt skrivefil: 16390 ms, 255.906281 KB/s 08: 44: 04.183 -> Testskrivning/test_2k.bin 08: 44: 20.648 -> Skriv fil brugt: 16494 ms, 254.292709 KB/s 08: 44: 20.648 -> Testskrivning /test_4k.bin 08: 44: 36.674 -> Skriv fil brugt: 16001 ms, 262.127625 KB /s 08: 44: 36.674 -> Testskrivning /test_8k.bin 08: 44: 52.849 -> Brugt skrivefil: 16175 ms, 259.307831 KB/s 08: 44: 52.849 -> Testskrivning/test_16k.bin 08: 45: 09.225 -> Skriv fil brugt: 16397 ms, 255.797043 KB/s 08: 45: 09.225 -> Test skrive /test_32k.bin 08: 45: 25.363 -> Skriv fil brugt: 16143 ms, 259.821838 KB /s 08: 45: 25.397 -> Testskrivning /test_64k.bin 08: 45: 41.632 -> Skriv fil brugt: 16263 ms, 257.904694 KB /s 08: 45: 41.632 -> Test læst /test_1k.bin 08: 45: 46.488 -> Læs fil brugt: 4856 ms, 863.736389 KB /s 08: 45: 46.488 -> Test læst /test_2k.bin 08: 45: 51.332 -> Læs fil brugt: 4840 ms, 866.591736 KB/s 08: 45: 51.332 -> Test læst/test_4k.bin 08: 45: 56.163 -> Læs fil brugt: 4834 ms, 867.667358 KB/s 08:45: 56.163 -> Test læst /test_8k.bin 08: 46: 00.998 -> R ead fil brugt: 4827 ms, 868.925598 KB/s 08: 46: 00.998 -> Test læst/test_16k.bin 08: 46: 05.808 -> Læs fil brugt: 4825 ms, 869.285828 KB/s 08: 46: 05.843 -> Test læs /test_32k.bin 08: 46: 10.637 -> Læst fil brugt: 4824 ms, 869.466003 KB /s 08: 46: 10.637 -> Test læst /test_64k.bin 08: 46: 15.478 -> Læst fil brugt: 4825 ms, 869.285828 KB/s

Trin 11: SD SPI -tilstand ved VSPI -busbenchmark

SanDisk 8 GB MicroSD

08: 54: 17.412 -> Testskrivning /test_1k.bin

08: 54: 48.398 -> Skriv fil brugt: 30994 ms, 135.326324 KB/s 08: 54: 48.398 -> Testskrivning/test_2k.bin 08: 55: 06.079 -> Skriv fil brugt: 17677 ms, 237.274658 KB/s 08: 55: 06.079 -> Testskrivning /test_4k.bin 08: 55: 13.357 -> Skriv fil brugt: 7274 ms, 576.615906 KB /s 08: 55: 13.357 -> Testskrivning /test_8k.bin 08: 55: 18.691 -> Brugt skrivefil: 5323 ms, 787.958679 KB/s 08: 55: 18.691 -> Testskrivning/test_16k.bin 08: 55: 28.336 -> Skriv fil brugt: 9669 ms, 433.788818 KB/s 08: 55: 28.336 -> Test skrive /test_32k.bin 08: 55: 32.646 -> Skriv fil brugt: 4309 ms, 973.382202 KB /s 08: 55: 32.646 -> Testskrivning /test_64k.bin 08: 55: 35.551 -> Skriv fil brugt: 2915 ms, 1438.869263 KB /s 08: 55: 35.584 -> Test læst /test_1k.bin 08: 55: 40.745 -> Læs fil brugt: 5183 ms, 809.242554 KB /s 08: 55: 40.745 -> Test læst /test_2k.bin 08: 55: 45.916 -> Læst fil brugt: 5182 ms, 809.398682 KB/s 08: 55: 45.949 -> Test læst/test_4k.bin 08: 55: 51.091 -> Læs fil brugt: 5162 ms, 812.534668 KB/s 08:55: 51.091 -> Test læst /test_8k.bin 08: 55: 56.257 -> Læs brugt fil: 5177 ms, 810.180420 KB/s 08: 55: 56.293 -> Test læst/test_16k.bin 08: 56: 01.244 -> Læs fil brugt: 4956 ms, 846.308289 KB/s 08: 56: 01.244 -> Test læst /test_32k.bin 08: 56: 06.006 -> Læst fil brugt: 4764 ms, 880.416443 KB /s 08: 56: 06.006 -> Test læst /test_64k.bin 08: 56: 10.716 -> Læs fil brugt: 4728 ms, 887.120117 KB/s

Gammelt 128 MB MicroSD

08: 51: 01.939 -> Testskrivning /test_1k.bin

08: 51: 18.358 -> Skriv fil brugt: 16422 ms, 255.407623 KB/s 08: 51: 18.358 -> Testskrivning/test_2k.bin 08: 51: 34.529 -> Skriv fil brugt: 16173 ms, 259.339874 KB/s 08: 51: 34.529 -> Testskrivning /test_4k.bin 08: 51: 50.911 -> Skriv fil brugt: 16372 ms, 256.187653 KB /s 08: 51: 50.911 -> Testskrivning /test_8k.bin 08: 52: 07.056 -> Brugt skrivefil: 16137 ms, 259.918457 KB/s 08: 52: 07.056 -> Testskrivning/test_16k.bin 08: 52: 23.383 -> Skriv fil brugt: 16351 ms, 256.516663 KB/s 08: 52: 23.383 -> Test skrive /test_32k.bin 08: 52: 39.533 -> Skriv fil brugt: 16128 ms, 260.063507 KB /s 08: 52: 39.533 -> Testskrivning /test_64k.bin 08: 52: 55.764 -> Skriv fil brugt: 16250 ms, 258.111023 KB /s 08: 52: 55.764 -> Test læst /test_1k.bin 08: 53: 00.645 -> Læs fil brugt: 4855 ms, 863.914307 KB /s 08: 53: 00.645 -> Test læst /test_2k.bin 08: 53: 05.459 -> Læs fil brugt: 4839 ms, 866.770813 KB/s 08: 53: 05.459 -> Test læst/test_4k.bin 08: 53: 10.306 -> Læs fil brugt: 4833 ms, 867.846863 KB/s 08:53: 10.306 -> Test læst /test_8k.bin 08: 53: 15.127 -> R ead fil brugt: 4827 ms, 868.925598 KB/s 08: 53: 15.127 -> Test læst /test_16k.bin 08: 53: 19.963 -> Læs fil brugt: 4826 ms, 869.105652 KB/s 08: 53: 19.963 -> Test læs /test_32k.bin 08: 53: 24.758 -> Læs fil brugt: 4824 ms, 869.466003 KB /s 08: 53: 24.792 -> Test læst /test_64k.bin 08: 53: 29.592 -> Læs fil brugt: 4824 ms, 869.466003 KB/s

Trin 12: Rund op

4-bit SD-bus-tilstand har den bedste ydelse, 1-bit SD-bus-tilstand er omkring 20% langsommere og SPI-tilstand er omkring 50% langsommere. En af hovedårsagerne er, at SD_MMC -protokollaget ikke implementerer nogen form for låsning, men SPI gør. Og også 4-bit SD-bus-tilstand har dobbelte datalinjer, så teoretisk fordobler hastigheden. Men min gamle MicroSD kan ikke understøtte 4-bit SD-bus-tilstand.

Jeg vil i de fleste tilfælde anbefale 1-bit SD-bustilstand, fordi:

  • god præstation
  • bedre kompatibilitet med SD -kort
  • løsere SD Pull-up krav
  • kun 3 GPIO -ben kræves
  • mindre kodekonfiguration
  • mange dev kit, dev board og breakout board kan bruge denne tilstand

Anbefalede: