Table des matières:

Sélectionnez l'interface SD pour ESP32 : 12 étapes (avec photos)
Sélectionnez l'interface SD pour ESP32 : 12 étapes (avec photos)

Vidéo: Sélectionnez l'interface SD pour ESP32 : 12 étapes (avec photos)

Vidéo: Sélectionnez l'interface SD pour ESP32 : 12 étapes (avec photos)
Vidéo: ESP32 Tutorial 5 - LED Fade, control brightness of an LED -ESP32 IoT Learnig kit 2024, Novembre
Anonim
Sélectionnez l'interface SD pour ESP32
Sélectionnez l'interface SD pour ESP32

Ces instructables montrent quelque chose sur la sélection d'une interface SD pour votre projet ESP32.

Étape 1: Interface SD

Dans la bibliothèque Arduino SD d'origine, l'interface SD utilise le mode de transfert de bus SD SPI.

SD a en fait plus de mode de transfert:

  • Mode bus SPI: ESP32 a plus de 1 bus SPI, il peut être personnalisé lors de l'initialisation
  • Mode bus SD 1 bit/4 bits: ESP32 dédie une autre bibliothèque appelée SD_MMC pour implémenter l'API du mode bus SD
  • Mode SD UHS-II: ESP32 non pris en charge

Réf.:

www.arduino.cc/en/reference/SD

en.wikipedia.org/wiki/SD_card

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

Étape 2: Mappage des broches GPIO ESP32

Voici le mappage des broches GPIO ESP32 par défaut:

broche de la carte SD Broche MicroSD Nom Bus SD 4 bits Bus SD 1 bit Bus SPI (broches 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 J0 2 2 MISO (12 / 19)
8 8 D1 4 - -
9 1 D2 12 - -

Le mappage des broches GPIO du bus SD 1 bit/4 bits ne peut pas être modifié.

Appel simple SD_MMC begin() au mode de bus SD 4 bits initial:

SD_MMC.begin();

Le mode de bus SD 1 bit peut être sélectionné avec la méthode SD_MMC begin(), par ex.

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

Le bus SPI (HSPI ou VSPI) peut être sélectionné lors de la création de l'instance SPIClass, par ex.

SPIClasse spi = SPIClass(HSPI);

Comme vous pouvez le voir, les broches de partage des broches du bus SD 1 bit/4 bits avec HSPI, mais le mappage des broches de la carte SD ne sont pas les mêmes. Ainsi, si le matériel est connecté selon la carte des broches du bus SD, il ne peut pas utiliser directement les broches natives HSPI. Les broches GPIO peuvent être remplacées par la méthode SPIClass begin(), par ex.

SPIClasse spi = SPIClass(HSPI);

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

De plus, la bibliothèque SD peut remplacer la broche SS, le bus SPI et la fréquence du bus à la méthode SD begin(), par ex.

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

Étape 3: Exigences d'extraction SD

Si vous souhaitez utiliser le mode de bus SD 4 bits, veuillez respecter les exigences ESP32 SD Pull-up, en particulier:

  • Conflits de pull-up sur GPIO13
  • Conflits entre Bootstrap et SDIO sur DAT2

Réf.:

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

Étape 4: divers matériels

Divers matériel
Divers matériel

ESP32 a des tonnes de kits de développement et de cartes de développement, certains d'entre eux ont un emplacement pour carte MicroSD intégré.

Voici quelques exemples dans ma main:

  • TTGO T-Watch, il est connecté aux broches GPIO 2, 13, 14 et 15 selon le mode de bus SD 1 bit, il peut donc utiliser le mode bus SD 1 bit et le mode bus SPI
  • Série M5Stack, il est connecté aux broches GPIO 4, 18, 19 et 23 selon les broches natives VSPI, il peut donc utiliser les paramètres de bibliothèque SD par défaut [SD.begin(4)]
  • ODROID-GO, il est connecté aux broches GPIO 18, 19, 22 et 23 selon les broches natives VSPI, il peut donc utiliser les paramètres de bibliothèque SD par défaut [SD.begin(22)]
  • ESP32-CAM, il est connecté aux broches GPIO 2, 4, 12, 13, 14 et 15 selon le mode de bus SD 4 bits, il peut donc utiliser tous les modes de bus SD 4 bits/1 bits et SPI
  • Carte de développement TTGO T8, elle est connectée aux broches GPIO 2, 13, 14 et 15 selon le mode de bus SD 1 bit, elle peut donc utiliser le mode bus SD 1 bit et le 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

Étape 5: Carte de dérivation de la fente pour carte SD

Carte de dérivation pour carte SD
Carte de dérivation pour carte SD
Carte de dérivation pour carte SD
Carte de dérivation pour carte SD

La carte de développement avec emplacement pour carte MicroSD intégré peut ne pas connecter toutes les broches et la plupart ne peuvent pas utiliser le mode bus SD 4 bits. Une carte de dérivation individuelle pour carte SD offre une meilleure flexibilité.

Dans le même temps, de nombreuses cartes de dérivation LCD ouvrent également un emplacement pour carte SD pleine taille. Cependant, la plupart d'entre eux ne sortent que les broches du mode SPI. Il ne suffit pas de l'utiliser comme mode de bus SD 4 bits, mais vous pouvez toujours l'utiliser comme mode de bus SD 1 bit par ce mappage de connexion:

LCD -> ESP32

SD_CS -> néant SD_MOSI -> 15 SD_MISO -> 2 SD_SCK -> 14

Étape 6: Détachez GPIO 2 pendant le programme

Détacher GPIO 2 pendant le programme
Détacher GPIO 2 pendant le programme

La connexion en mode bus SD à 4 bits empêche l'ESP32 d'entrer en mode programme. N'oubliez pas de détacher le GPIO 2 de la carte de dérivation de la fente pour carte SD DAT0 avant de télécharger un nouveau programme.

Étape 7: Analyse comparative

Référence
Référence
Référence
Référence

J'ai écrit un programme Arduino simple pour le benchmark:

github.com/moononournation/ESP32_SD_Benchm…

Voici le matériel pour le benchmark:

ESP32

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

Emplacement pour carte SD

Une carte de dérivation de fente pour carte MicroSD

Carte SD

J'ai une MicroSD SanDisk 8 Go et une ancienne MicroSD 128 Mo en main.

Étape 8: Analyse comparative du mode 4 bits SD_MMC

MicroSD SanDisk 8 Go

20:27:46.000 -> Tester l'écriture /test_1k.bin

20:27:59.399 -> Fichier d'écriture utilisé: 13404 ms, 312.914368 KB/s 20:27:59.399 -> Test d'écriture /test_2k.bin 20:28:17.248 -> Fichier d'écriture utilisé: 17834 ms, 235.185822 KB/s 20:28:17.248 -> Test d'écriture /test_4k.bin 20:28:21.122 -> Fichier d'écriture utilisé: 3873 ms, 1082.959961 Ko/s 20:28:21.122 -> Test d'écriture /test_8k.bin 20:28:23.147 -> Fichier d'écriture utilisé: 2024 ms, 2072.284668 Ko/s 20:28:23.147 -> Test d'écriture /test_16k.bin 20:28:27.237 -> Fichier d'écriture utilisé: 4097 ms, 1023.750061 Ko/s 20:28:27.237 -> Test write /test_32k.bin 20:28:30.088 -> Fichier d'écriture utilisé: 2842 ms, 1475.828247 KB/s 20:28:30.088 -> Test d'écriture /test_64k.bin 20:28:31.882 -> Fichier d'écriture utilisé: 1811 ms, 2316.015381 KB/s 20:28:31.882 -> Test de lecture /test_1k.bin 20:28:35.422 -> Lecture du fichier utilisé: 3520 ms, 1191.563599 KB/s 20:28:35.422 -> Test de lecture /test_2k.bin 20: 28:38.813 -> Lecture du fichier utilisé: 3389 ms, 1237.622925 KB/s 20:28:38.813 -> Test read /test_4k.bin 20:28:42.273 -> Lecture du fichier utilisé: 3474 ms, 1207.341431 KB/s 20:28:42.273 -> Test de lecture /test_8k.bin 20:28:45.752 - > Lecture du fichier utilisé: 3487 ms, 1202.840210 KB/s 20:28:45.752 -> Test read /test_16k.bin 20:28:48.988 -> Lecture du fichier utilisé: 3213 ms, 1305.416748 KB/s 20:28:48.988 -> Test de lecture /test_32k.bin 20:28:52.077 -> Lecture du fichier utilisé: 3093 ms, 1356.063354 KB/s 20:28:52.077 -> Test de lecture /test_64k.bin 20:28:55.141 -> Lecture du fichier utilisé: 3080 ms, 1361.786987 Ko/s

Ancienne MicroSD 128 Mo

20:30:43.309 -> E (274) sdmmc_sd: sdmmc_check_scr: send_scr a renvoyé 0x109

20:30:43.309 -> Échec du montage de la carte

Étape 9: Benchmark du mode 1 bit SD_MMC

MicroSD SanDisk 8 Go

20:31:45.194 -> Tester l'écriture /test_1k.bin

20:31:59.506 -> Fichier d'écriture utilisé: 14325 ms, 292.796082 KB/s 20:31:59.506 -> Test d'écriture /test_2k.bin 20:32:17.686 -> Fichier d'écriture utilisé: 18163 ms, 230.925735 KB/s 20:32:17.686 -> Test d'écriture /test_4k.bin 20:32:21.291 -> Fichier d'écriture utilisé: 3611 ms, 1161.535278 Ko/s 20:32:21.291 -> Test d'écriture /test_8k.bin 20:32:23.939 -> Fichier d'écriture utilisé: 2652 ms, 1581.562622 KB/s 20:32:23.939 -> Test d'écriture /test_16k.bin 20:32:28.397 -> Fichier d'écriture utilisé: 4448 ms, 942.964050 KB/s 20:32:28.397 -> Test write /test_32k.bin 20:32:31.835 -> Fichier d'écriture utilisé: 3429 ms, 1223.185791 Ko/s 20:32:31.835 -> Test d'écriture /test_64k.bin 20:32:33.882 -> Fichier d'écriture utilisé: 2058 ms, 2038.048584 KB/s 20:32:33.882 -> Test de lecture /test_1k.bin 20:32:38.031 -> Lecture du fichier utilisé: 4146 ms, 1011.650757 KB/s 20:32:38.031 -> Test de lecture /test_2k.bin 20: 32:42.062 -> Lecture du fichier utilisé: 4019 ms, 1043.618774 KB/s 20:32:42.062 -> Test read /test_4k.bin 20:32:46.170 -> Lecture du fichier utilisé: 4106 ms, 1021.506104 KB/s 20:32:46.170 -> Test de lecture /test_8k.bin 20:32:50.288 -> Lire le fichier utilisé: 4121 ms, 1017.787903 KB/s 20:32:50.288 -> Test read /test_16k.bin 20:32:54.112 -> Lire le fichier utilisé: 3840 ms, 1092.266724 KB/s 20:32:54.112 -> Test read /test_32k.bin 20:32:57.840 -> Lecture du fichier utilisé: 3739 ms, 1121.771606 KB/s 20:32:57.840 -> Test read /test_64k.bin 20:33:01.568 -> Lecture du fichier utilisé: 3711 ms, 1130.235474 Ko/s

Ancienne MicroSD 128 Mo

20:33:27.366 -> Tester l'écriture /test_1k.bin

20:33:42.386 -> Fichier d'écriture utilisé: 15020 ms, 279.247925 KB/s 20:33:42.386 -> Test d'écriture /test_2k.bin 20:33:57.927 -> Fichier d'écriture utilisé: 15515 ms, 270.338654 KB/s 20:33:57.927 -> Test d'écriture /test_4k.bin 20:34:13.108 -> Fichier d'écriture utilisé: 15195 ms, 276.031860 Ko/s 20:34:13.108 -> Test d'écriture /test_8k.bin 20:34:28.162 -> Fichier d'écriture utilisé: 15048 ms, 278.728333 KB/s 20:34:28.162 -> Test d'écriture /test_16k.bin 20:34:43.287 -> Fichier d'écriture utilisé: 15142 ms, 276.998016 KB/s 20:34:43.287 -> Test write /test_32k.bin 20:34:58.278 -> Fichier d'écriture utilisé: 14964 ms, 280.292969 KB/s 20:34:58.278 -> Test d'écriture /test_64k.bin 20:35:13.370 -> Fichier d'écriture utilisé: 15101 ms, 277.750092 KB/s 20:35:13.370 -> Test de lecture /test_1k.bin 20:35:17.563 -> Lecture du fichier utilisé: 4197 ms, 999.357666 KB/s 20:35:17.563 -> Test de lecture /test_2k.bin 20: 35:21.746 -> Lecture du fichier utilisé: 4191 ms, 1000.788330 KB/s 20:35:21.746 -> Test read /test_4k.bin 20:35:25.942 -> Lecture du fichier utilisé: 4181 ms, 1003.182007 KB/s 20:35:25.942 -> Test de lecture /test_8k.bin 20:35:30.101 -> Lire le fichier utilisé: 4176 ms, 1004.383118 Ko/s 20:35:30.101 -> Test read /test_16k.bin 20:35:34.279 -> Lire le fichier utilisé: 4174 ms, 1004.864380 Ko/s 20:35:34.279 -> Test read /test_32k.bin 20:35:38.462 -> Lire le fichier utilisé: 4173 ms, 1005.105225 KB/s 20:35:38.462 -> Tester la lecture /test_64k.bin 20:35:42.612 -> Lire le fichier utilisé: 4173 ms, 1005.105225 Ko/s

Étape 10: Mode SD SPI au benchmark de bus HSPI

MicroSD SanDisk 8 Go

08:41:19.703 -> Tester l'écriture /test_1k.bin

08:41:53.458 -> Fichier d'écriture utilisé: 33743 ms, 124.301453 KB/s 08:41:53.458 -> Test d'écriture /test_2k.bin 08:42:10.000 -> Fichier d'écriture utilisé: 16540 ms, 253.585495 KB/s 08:42:10.000 -> Test d'écriture /test_4k.bin 08:42:17.269 -> Fichier d'écriture utilisé: 7298 ms, 574.719666 Ko/s 08:42:17.308 -> Test d'écriture /test_8k.bin 08:42:22.640 -> Fichier d'écriture utilisé: 5345 ms, 784.715454 KB/s 08:42:22.640 -> Test d'écriture /test_16k.bin 08:42:32.285 -> Fichier d'écriture utilisé: 9662 ms, 434.103088 KB/s 08:42:32.285 -> Test write /test_32k.bin 08:42:36.659 -> Fichier d'écriture utilisé: 4355 ms, 963.100830 KB/s 08:42:36.659 -> Test d'écriture /test_64k.bin 08:42:39.594 -> Fichier d'écriture utilisé: 2949 ms, 1422.280151 KB/s 08:42:39.594 -> Test de lecture /test_1k.bin 08:42:44.774 -> Lecture du fichier utilisé: 5192 ms, 807.839783 KB/s 08:42:44.774 -> Test de lecture /test_2k.bin 08: 42:49.969 -> Lecture du fichier utilisé: 5189 ms, 808.306824 KB/s 08:42:49.969 -> Test read /test_4k.bin 08:42:55.123 -> Lecture du fichier utilisé: 5161 ms, 812.692139 KB/s 08:42:55.158 -> Test de lecture /test_8k.bin 08:43:00.300 -> Lecture fichier utilisé: 5176 ms, 810.336914 Ko/s 08:43:00.334 -> Test de lecture /test_16k.bin 08:43:05.277 -> Lecture du fichier utilisé: 4948 ms, 847.676636 KB/s 08:43:05.277 -> Test de lecture /test_32k.bin 08:43:10.028 -> Lire le fichier utilisé: 4773 ms, 878.756348 Ko/s 08:43:10.028 -> Tester la lecture /test_64k.bin 08:43:14.760 -> Lire le fichier utilisé: 4731 ms, 886.557617 Ko/s

Ancienne MicroSD 128 Mo

08:43:47.777 -> Tester l'écriture /test_1k.bin

08:44:04.148 -> Fichier d'écriture utilisé: 16390 ms, 255.906281 KB/s 08:44:04.183 -> Test d'écriture /test_2k.bin 08:44:20.648 -> Fichier d'écriture utilisé: 16494 ms, 254.292709 KB/s 08:44:20.648 -> Test d'écriture /test_4k.bin 08:44:36.674 -> Fichier d'écriture utilisé: 16001 ms, 262.127625 Ko/s 08:44:36.674 -> Test d'écriture /test_8k.bin 08:44:52.849 -> Fichier d'écriture utilisé: 16175 ms, 259.307831 Ko/s 08:44:52.849 -> Test d'écriture /test_16k.bin 08:45:09.225 -> Fichier d'écriture utilisé: 16397 ms, 255.797043 Ko/s 08:45:09.225 -> Test write /test_32k.bin 08:45:25.363 -> Fichier d'écriture utilisé: 16143 ms, 259.821838 Ko/s 08:45:25.397 -> Test d'écriture /test_64k.bin 08:45:41.632 -> Fichier d'écriture utilisé: 16263 ms, 257.904694 Ko/s 08:45:41.632 -> Test de lecture /test_1k.bin 08:45:46.488 -> Lecture du fichier utilisé: 4856 ms, 863.736389 Ko/s 08:45:46.488 -> Test de lecture /test_2k.bin 08: 45:51.332 -> Lecture du fichier utilisé: 4840 ms, 866.591736 KB/s 08:45:51.332 -> Test read /test_4k.bin 08:45:56.163 -> Lecture du fichier utilisé: 4834 ms, 867.667358 KB/s 08:45:56.163 -> Test de lecture /test_8k.bin 08:46:00.998 -> R ead fichier utilisé: 4827 ms, 868.925598 Ko/s 08:46:00.998 -> Test read /test_16k.bin 08:46:05.808 -> Lire fichier utilisé: 4825 ms, 869.285828 Ko/s 08:46:05.843 -> Test read /test_32k.bin 08:46:10.637 -> Lire le fichier utilisé: 4824 ms, 869.466003 KB/s 08:46:10.637 -> Tester la lecture /test_64k.bin 08:46:15.478 -> Lire le fichier utilisé: 4825 ms, 869.285828 Ko/s

Étape 11: Mode SD SPI sur le banc d'essai du bus VSPI

MicroSD SanDisk 8 Go

08:54:17.412 -> Tester l'écriture /test_1k.bin

08:54:48.398 -> Fichier d'écriture utilisé: 30994 ms, 135.326324 KB/s 08:54:48.398 -> Test d'écriture /test_2k.bin 08:55:06.079 -> Fichier d'écriture utilisé: 17677 ms, 237.274658 KB/s 08:55:06.079 -> Test d'écriture /test_4k.bin 08:55:13.357 -> Fichier d'écriture utilisé: 7274 ms, 576.615906 Ko/s 08:55:13.357 -> Test d'écriture /test_8k.bin 08:55:18.691 -> Fichier d'écriture utilisé: 5323 ms, 787.958679 Ko/s 08:55:18.691 -> Test d'écriture /test_16k.bin 08:55:28.336 -> Fichier d'écriture utilisé: 9669 ms, 433.788818 Ko/s 08:55:28.336 -> Test write /test_32k.bin 08:55:32.646 -> Fichier d'écriture utilisé: 4309 ms, 973.382202 KB/s 08:55:32.646 -> Test d'écriture /test_64k.bin 08:55:35.551 -> Fichier d'écriture utilisé: 2915 ms, 1438.869263 KB/s 08:55:35.584 -> Test de lecture /test_1k.bin 08:55:40.745 -> Lecture du fichier utilisé: 5183 ms, 809.242554 KB/s 08:55:40.745 -> Test de lecture /test_2k.bin 08: 55:45.916 -> Lecture du fichier utilisé: 5182 ms, 809.398682 KB/s 08:55:45.949 -> Test read /test_4k.bin 08:55:51.091 -> Lecture du fichier utilisé: 5162 ms, 812.534668 KB/s 08:55:51.091 -> Test de lecture /test_8k.bin 08:55:56.257 -> Lecture fichier utilisé: 5177 ms, 810.180420 KB/s 08:55:56.293 -> Test de lecture /test_16k.bin 08:56:01.244 -> Lecture du fichier utilisé: 4956 ms, 846.308289 KB/s 08:56:01.244 -> Test de lecture /test_32k.bin 08:56:06.006 -> Lecture du fichier utilisé: 4764 ms, 880.416443 KB/s 08:56:06.006 -> Test de lecture /test_64k.bin 08:56:10.716 -> Lecture du fichier utilisé: 4728 ms, 887.120117 Ko/s

Ancienne MicroSD 128 Mo

08:51:01.939 -> Tester l'écriture /test_1k.bin

08:51:18.358 -> Fichier d'écriture utilisé: 16422 ms, 255.407623 KB/s 08:51:18.358 -> Test d'écriture /test_2k.bin 08:51:34.529 -> Fichier d'écriture utilisé: 16173 ms, 259.339874 KB/s 08:51:34.529 -> Test d'écriture /test_4k.bin 08:51:50.911 -> Fichier d'écriture utilisé: 16372 ms, 256.187653 Ko/s 08:51:50.911 -> Test d'écriture /test_8k.bin 08:52:07.056 -> Fichier d'écriture utilisé: 16137 ms, 259.918457 Ko/s 08:52:07.056 -> Test d'écriture /test_16k.bin 08:52:23.383 -> Fichier d'écriture utilisé: 16351 ms, 256.516663 Ko/s 08:52:23.383 -> Test write /test_32k.bin 08:52:39.533 -> Fichier d'écriture utilisé: 16128 ms, 260.063507 Ko/s 08:52:39.533 -> Test d'écriture /test_64k.bin 08:52:55.764 -> Fichier d'écriture utilisé: 16250 ms, 258.111023 KB/s 08:52:55.764 -> Test de lecture /test_1k.bin 08:53:00.645 -> Lecture du fichier utilisé: 4855 ms, 863.914307 KB/s 08:53:00.645 -> Test de lecture /test_2k.bin 08: 53:05.459 -> Lecture du fichier utilisé: 4839 ms, 866.770813 KB/s 08:53:05.459 -> Test read /test_4k.bin 08:53:10.306 -> Lecture du fichier utilisé: 4833 ms, 867.846863 KB/s 08:53:10.306 -> Test de lecture /test_8k.bin 08:53:15.127 -> R ead fichier utilisé: 4827 ms, 868.925598 KB/s 08:53:15.127 -> Test read /test_16k.bin 08:53:19.963 -> Lire fichier utilisé: 4826 ms, 869.105652 KB/s 08:53:19.963 -> Test read /test_32k.bin 08:53:24.758 -> Lire le fichier utilisé: 4824 ms, 869.466003 KB/s 08:53:24.792 -> Tester la lecture /test_64k.bin 08:53:29.592 -> Lire le fichier utilisé: 4824 ms, 869.466003 Ko/s

Étape 12: Arrondissez

Le mode bus SD 4 bits offre les meilleures performances, le mode bus SD 1 bit est environ 20 % plus lent et le mode SPI est environ 50 % plus lent. L'une des principales raisons est que la couche de protocole SD_MMC n'implémente aucun type de verrouillage, contrairement à SPI. De plus, le mode bus SD 4 bits a des lignes de données doubles, ce qui double théoriquement la vitesse. Mais mon ancienne MicroSD ne peut pas prendre en charge le mode bus SD 4 bits.

Je recommanderai le mode bus SD 1 bit dans la plupart des cas, car:

  • bonne performance
  • meilleure compatibilité avec les cartes SD
  • exigences de tirage SD plus souples
  • seulement 3 broches GPIO requises
  • configuration de code moindre
  • de nombreux kits de développement, cartes de développement et cartes de développement peuvent utiliser ce mode

Conseillé: