From 0c467a6f8a6b517ec5d15f04e08ecc3ef4d28d3d Mon Sep 17 00:00:00 2001 From: Tomas Pilny Date: Wed, 7 Jun 2023 11:00:07 +0200 Subject: [PATCH 1/4] Added pin getters and ASCII art pin description in example --- .../SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino | 86 ++++++++++++++++--- libraries/SD_MMC/src/SD_MMC.cpp | 54 ++++++++++++ libraries/SD_MMC/src/SD_MMC.h | 6 ++ 3 files changed, 134 insertions(+), 12 deletions(-) diff --git a/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino b/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino index 024ea4bfdea..ab93c32fd62 100644 --- a/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino +++ b/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino @@ -1,21 +1,60 @@ /* - * Connect the SD card to the following pins: + * pin 1 - D2 | Micro SD card | + * pin 2 - D3 | / + * pin 3 - CMD | |__ + * pin 4 - VDD (3.3V) | | + * pin 5 - CLK | 8 7 6 5 4 3 2 1 / + * pin 6 - VSS (GND) | ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ / + * pin 7 - D0 | ▀ ▀ █ ▀ █ ▀ ▀ ▀ | + * pin 8 - D1 |_________________| + * ║ ║ ║ ║ ║ ║ ║ ║ + * ╔═══════╝ ║ ║ ║ ║ ║ ║ ╚═════════╗ + * ║ ║ ║ ║ ║ ║ ╚══════╗ ║ + * ║ ╔═════╝ ║ ║ ║ ╚═════╗ ║ ║ + * Connections for ║ ║ ╔═══╩═║═║═══╗ ║ ║ ║ + * full-sized ║ ║ ║ ╔═╝ ║ ║ ║ ║ ║ + * SD card ║ ║ ║ ║ ║ ║ ║ ║ ║ + * ESP32-S3 DevKit | 21 47 GND 39 3V3 GND 40 41 42 | + * ESP32-S3-USB-OTG | 38 37 GND 36 3V3 GND 35 34 33 | + * ESP32 | 4 2 GND 14 3V3 GND 15 13 12 | + * Pin name | D1 D0 VSS CLK VDD VSS CMD D3 D2 | + * SD pin number | 8 7 6 5 4 3 2 1 9 / + * | █/ + * |__▍___▊___█___█___█___█___█___█___/ + * WARNING: ALL data pins must be pulled up to 3.3V with external 10k Ohm resistor! + * Note to ESP32 pin 2 (D0) : add 1K pull up after flashing * - * SD Card | ESP32 - * D2 12 - * D3 13 - * CMD 15 - * VSS GND - * VDD 3.3V - * CLK 14 - * VSS GND - * D0 2 (add 1K pull up after flashing) - * D1 4 + * For more info see file README.md in this library or on URL: + * https://github.com/espressif/arduino-esp32/tree/master/libraries/SD_MMC */ #include "FS.h" #include "SD_MMC.h" +// Default pins for ESP-S3 +// Warning: ESP32-S3-WROOM-2 is using most of the default GPIOs (33-37) to interface with on-board OPI flash. +// If the SD_MMC is initialized with default pins it will result in rebooting loop - please +// reassign the pins elsewhere using the mentioned command `setPins`. +// The easiest option is to uncomment the definitions below. +// Note: ESP32-S3-WROOM-1 does not have GPIO 33 and 34 broken out. +// Note: If it's ok to use default pins, you do not need to call the setPins +// Note: Pins in this definition block are ordered from top down in order in which they are on the full-sized SD card +// from left to right when facing the pins down (when connected to a breadboard) + +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + int d1 = 21; // SD pin 8 - add 10k Pullup to 3.3V if using 4-bit mode (use_1_bit_mode = false) + int d0 = 47; // SD pin 7 - add 10k Pullup + // GND pin - SD pin 6 + int clk = 39; // SD pin 5 - add 10k Pullup + // 3.3V pin - SD pin 4 + // GND pin - SD pin 3 + int cmd = 40; // SD pin 2 - add 10k Pullup + int d3 = 41; // SD pin 1 - add 10k Pullup to card's pin even when using 1-bit mode + int d2 = 42; // SD pin 9 - add 10k Pullup to 3.3V if using 4-bit mode (use_1_bit_mode = false) +#endif + +bool use_1_bit_mode = false; // Change the value to `true` to use 1-bit mode instead of the 4-bit mode + void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ Serial.printf("Listing directory: %s\n", dirname); @@ -172,7 +211,30 @@ void testFileIO(fs::FS &fs, const char * path){ void setup(){ Serial.begin(115200); - if(!SD_MMC.begin()){ + while(!Serial) { delay(10); } + Serial.println("SDMMC_Test.ino starting!"); + pinMode(12, INPUT); + pinMode(10, INPUT); + pinMode(9, INPUT); + + // If you need to reassign pins, uncomment the block at the top of this example containing the define statement of REASIGN_PINS + // If you want to use only 1-bit mode, you can use the line with only one data pin (d0) begin changed. + // Please note that ESP32 does not allow pin change and will always fail. +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + //if(! SD_MMC.setPins(clk, cmd, d0)){ + if(! SD_MMC.setPins(clk, cmd, d0, d1, d2, d3)){ + Serial.println("Pin change failed!"); + return; + } +#endif + + if(use_1_bit_mode){ + Serial.printf("Begin in 1-bit mode; pins: CLK=%d, CMD=%d, D0=%d\n", SD_MMC.getClkPin(), SD_MMC.getCmdPin(), SD_MMC.getD0Pin()); + }else{ + Serial.printf("Begin in 4-bit mode; pins: CLK=%d, CMD=%d, D0=%d, D1=%d, D2=%d, D3=%d\n", SD_MMC.getClkPin(), SD_MMC.getCmdPin(), SD_MMC.getD0Pin(), SD_MMC.getD1Pin(), SD_MMC.getD2Pin(), SD_MMC.getD3Pin()); + } + + if(!SD_MMC.begin("/sdcard", use_1_bit_mode)){ Serial.println("Card Mount Failed"); return; } diff --git a/libraries/SD_MMC/src/SD_MMC.cpp b/libraries/SD_MMC/src/SD_MMC.cpp index 83cf9aa0dd1..e421c55305e 100644 --- a/libraries/SD_MMC/src/SD_MMC.cpp +++ b/libraries/SD_MMC/src/SD_MMC.cpp @@ -84,6 +84,60 @@ bool SDMMCFS::setPins(int clk, int cmd, int d0, int d1, int d2, int d3) #endif } +int SDMMCFS::getClkPin() +{ +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + return _pin_clk; +#elif CONFIG_IDF_TARGET_ESP32 + return SDMMC_SLOT1_IOMUX_PIN_NUM_CLK; +#endif +} + +int SDMMCFS::getCmdPin() +{ +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + return _pin_cmd; +#elif CONFIG_IDF_TARGET_ESP32 + return SDMMC_SLOT1_IOMUX_PIN_NUM_CMD; +#endif +} + +int SDMMCFS::getD0Pin() +{ +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + return _pin_d0; +#elif CONFIG_IDF_TARGET_ESP32 + return SDMMC_SLOT1_IOMUX_PIN_NUM_D0; +#endif +} + +int SDMMCFS::getD1Pin() +{ +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + return _pin_d1; +#elif CONFIG_IDF_TARGET_ESP32 + return SDMMC_SLOT1_IOMUX_PIN_NUM_D1; +#endif +} + +int SDMMCFS::getD2Pin() +{ +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + return _pin_d2; +#elif CONFIG_IDF_TARGET_ESP32 + return SDMMC_SLOT1_IOMUX_PIN_NUM_D2; +#endif +} + +int SDMMCFS::getD3Pin() +{ +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + return _pin_d3; +#elif CONFIG_IDF_TARGET_ESP32 + return SDMMC_SLOT1_IOMUX_PIN_NUM_D3; +#endif +} + bool SDMMCFS::begin(const char * mountpoint, bool mode1bit, bool format_if_mount_failed, int sdmmc_frequency, uint8_t maxOpenFiles) { if(_card) { diff --git a/libraries/SD_MMC/src/SD_MMC.h b/libraries/SD_MMC/src/SD_MMC.h index ffbc3b8f964..0ee5932fc81 100644 --- a/libraries/SD_MMC/src/SD_MMC.h +++ b/libraries/SD_MMC/src/SD_MMC.h @@ -50,6 +50,12 @@ class SDMMCFS : public FS SDMMCFS(FSImplPtr impl); bool setPins(int clk, int cmd, int d0); bool setPins(int clk, int cmd, int d0, int d1, int d2, int d3); + int getClkPin(); + int getCmdPin(); + int getD0Pin(); + int getD1Pin(); + int getD2Pin(); + int getD3Pin(); bool begin(const char * mountpoint="/sdcard", bool mode1bit=false, bool format_if_mount_failed=false, int sdmmc_frequency=BOARD_MAX_SDMMC_FREQ, uint8_t maxOpenFiles = 5); void end(); sdcard_type_t cardType(); From eaac3160004a9fe5564ed7cb00977215c3d90e12 Mon Sep 17 00:00:00 2001 From: Tomas Pilny Date: Wed, 7 Jun 2023 14:56:14 +0200 Subject: [PATCH 2/4] Updated example --- .../SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino b/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino index ab93c32fd62..4acb0c35fc4 100644 --- a/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino +++ b/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino @@ -217,12 +217,13 @@ void setup(){ pinMode(10, INPUT); pinMode(9, INPUT); - // If you need to reassign pins, uncomment the block at the top of this example containing the define statement of REASIGN_PINS + // If you are using any other ESP32-S3 board than ESP32-S3-USB-OTG which has preset default pins, you will + // need to specify the pins with the following example of SD_MMC.setPins() // If you want to use only 1-bit mode, you can use the line with only one data pin (d0) begin changed. // Please note that ESP32 does not allow pin change and will always fail. -#ifdef SOC_SDMMC_USE_GPIO_MATRIX - //if(! SD_MMC.setPins(clk, cmd, d0)){ - if(! SD_MMC.setPins(clk, cmd, d0, d1, d2, d3)){ +#if defined(SOC_SDMMC_USE_GPIO_MATRIX) && not defined(BOARD_HAS_SDMMC) + //if(! SD_MMC.setPins(clk, cmd, d0)){ // 1-bit line version + if(! SD_MMC.setPins(clk, cmd, d0, d1, d2, d3)){ // 4-bit line version Serial.println("Pin change failed!"); return; } @@ -235,7 +236,12 @@ void setup(){ } if(!SD_MMC.begin("/sdcard", use_1_bit_mode)){ - Serial.println("Card Mount Failed"); + Serial.println("Card Mount Failed."); + Serial.println("Increase log level to see more info: Tools > Core Debug Level > Verbose"); + Serial.println("Make sure that all data pins have 10 kOhm pull-up resistor"); +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + Serial.println("Make sure that when using generic ESP32-S3 board the pins are setup using SD_MMC.setPins()"); +#endif return; } uint8_t cardType = SD_MMC.cardType(); From 870e7a9a42cc1f086cc43e4c8c7f3bfce95f6917 Mon Sep 17 00:00:00 2001 From: Tomas Pilny Date: Thu, 8 Jun 2023 12:40:14 +0200 Subject: [PATCH 3/4] Updated time example + modified pin change block --- .../SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino | 8 +- .../SD_MMC/examples/SDMMC_time/SDMMC_time.ino | 99 +++++++++++++++---- 2 files changed, 82 insertions(+), 25 deletions(-) diff --git a/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino b/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino index 4acb0c35fc4..8e3e0f31a55 100644 --- a/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino +++ b/libraries/SD_MMC/examples/SDMMC_Test/SDMMC_Test.ino @@ -35,13 +35,12 @@ // Warning: ESP32-S3-WROOM-2 is using most of the default GPIOs (33-37) to interface with on-board OPI flash. // If the SD_MMC is initialized with default pins it will result in rebooting loop - please // reassign the pins elsewhere using the mentioned command `setPins`. -// The easiest option is to uncomment the definitions below. // Note: ESP32-S3-WROOM-1 does not have GPIO 33 and 34 broken out. -// Note: If it's ok to use default pins, you do not need to call the setPins +// Note: The board SP32-S3-USB-OTG has predefined default pins and the following definitions with the setPins() call will not be compiled. // Note: Pins in this definition block are ordered from top down in order in which they are on the full-sized SD card // from left to right when facing the pins down (when connected to a breadboard) -#ifdef SOC_SDMMC_USE_GPIO_MATRIX +#if defined(SOC_SDMMC_USE_GPIO_MATRIX) && not defined(BOARD_HAS_SDMMC) int d1 = 21; // SD pin 8 - add 10k Pullup to 3.3V if using 4-bit mode (use_1_bit_mode = false) int d0 = 47; // SD pin 7 - add 10k Pullup // GND pin - SD pin 6 @@ -213,9 +212,6 @@ void setup(){ Serial.begin(115200); while(!Serial) { delay(10); } Serial.println("SDMMC_Test.ino starting!"); - pinMode(12, INPUT); - pinMode(10, INPUT); - pinMode(9, INPUT); // If you are using any other ESP32-S3 board than ESP32-S3-USB-OTG which has preset default pins, you will // need to specify the pins with the following example of SD_MMC.setPins() diff --git a/libraries/SD_MMC/examples/SDMMC_time/SDMMC_time.ino b/libraries/SD_MMC/examples/SDMMC_time/SDMMC_time.ino index 4472f8c6c37..a416a2a723f 100644 --- a/libraries/SD_MMC/examples/SDMMC_time/SDMMC_time.ino +++ b/libraries/SD_MMC/examples/SDMMC_time/SDMMC_time.ino @@ -1,16 +1,31 @@ /* - * Connect the SD card to the following pins: + * pin 1 - D2 | Micro SD card | + * pin 2 - D3 | / + * pin 3 - CMD | |__ + * pin 4 - VDD (3.3V) | | + * pin 5 - CLK | 8 7 6 5 4 3 2 1 / + * pin 6 - VSS (GND) | ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ / + * pin 7 - D0 | ▀ ▀ █ ▀ █ ▀ ▀ ▀ | + * pin 8 - D1 |_________________| + * ║ ║ ║ ║ ║ ║ ║ ║ + * ╔═══════╝ ║ ║ ║ ║ ║ ║ ╚═════════╗ + * ║ ║ ║ ║ ║ ║ ╚══════╗ ║ + * ║ ╔═════╝ ║ ║ ║ ╚═════╗ ║ ║ + * Connections for ║ ║ ╔═══╩═║═║═══╗ ║ ║ ║ + * full-sized ║ ║ ║ ╔═╝ ║ ║ ║ ║ ║ + * SD card ║ ║ ║ ║ ║ ║ ║ ║ ║ + * ESP32-S3 DevKit | 21 47 GND 39 3V3 GND 40 41 42 | + * ESP32-S3-USB-OTG | 38 37 GND 36 3V3 GND 35 34 33 | + * ESP32 | 4 2 GND 14 3V3 GND 15 13 12 | + * Pin name | D1 D0 VSS CLK VDD VSS CMD D3 D2 | + * SD pin number | 8 7 6 5 4 3 2 1 9 / + * | █/ + * |__▍___▊___█___█___█___█___█___█___/ + * WARNING: ALL data pins must be pulled up to 3.3V with external 10k Ohm resistor! + * Note to ESP32 pin 2 (D0) : add 1K pull up after flashing * - * SD Card | ESP32 - * D2 - - * D3 SS - * CMD MOSI - * VSS GND - * VDD 3.3V - * CLK SCK - * VSS GND - * D0 MISO - * D1 - + * For more info see file README.md in this library or on URL: + * https://github.com/espressif/arduino-esp32/tree/master/libraries/SD_MMC */ #include "FS.h" @@ -19,12 +34,35 @@ #include #include -const char* ssid = "your-ssid"; -const char* password = "your-password"; +const char* ssid = "Viks"; +const char* password = "Mordornumber1"; long timezone = 1; byte daysavetime = 1; +// Default pins for ESP-S3 +// Warning: ESP32-S3-WROOM-2 is using most of the default GPIOs (33-37) to interface with on-board OPI flash. +// If the SD_MMC is initialized with default pins it will result in rebooting loop - please +// reassign the pins elsewhere using the mentioned command `setPins`. +// Note: ESP32-S3-WROOM-1 does not have GPIO 33 and 34 broken out. +// Note: The board SP32-S3-USB-OTG has predefined default pins and the following definitions with the setPins() call will not be compiled. +// Note: Pins in this definition block are ordered from top down in order in which they are on the full-sized SD card +// from left to right when facing the pins down (when connected to a breadboard) + +#if defined(SOC_SDMMC_USE_GPIO_MATRIX) && not defined(BOARD_HAS_SDMMC) + int d1 = 21; // SD pin 8 - add 10k Pullup to 3.3V if using 4-bit mode (use_1_bit_mode = false) + int d0 = 47; // SD pin 7 - add 10k Pullup + // GND pin - SD pin 6 + int clk = 39; // SD pin 5 - add 10k Pullup + // 3.3V pin - SD pin 4 + // GND pin - SD pin 3 + int cmd = 40; // SD pin 2 - add 10k Pullup + int d3 = 41; // SD pin 1 - add 10k Pullup to card's pin even when using 1-bit mode + int d2 = 42; // SD pin 9 - add 10k Pullup to 3.3V if using 4-bit mode (use_1_bit_mode = false) +#endif + +bool use_1_bit_mode = false; // Change the value to `true` to use 1-bit mode instead of the 4-bit mode + void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ Serial.printf("Listing directory: %s\n", dirname); @@ -164,16 +202,39 @@ void setup(){ Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.println("Contacting Time Server"); - configTime(3600*timezone, daysavetime*3600, "time.nist.gov", "0.pool.ntp.org", "1.pool.ntp.org"); - struct tm tmstruct ; + configTime(3600*timezone, daysavetime*3600, "time.nist.gov", "0.pool.ntp.org", "1.pool.ntp.org"); + struct tm tmstruct ; delay(2000); tmstruct.tm_year = 0; getLocalTime(&tmstruct, 5000); - Serial.printf("\nNow is : %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct.tm_year)+1900,( tmstruct.tm_mon)+1, tmstruct.tm_mday,tmstruct.tm_hour , tmstruct.tm_min, tmstruct.tm_sec); + Serial.printf("\nNow is : %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct.tm_year)+1900,( tmstruct.tm_mon)+1, tmstruct.tm_mday,tmstruct.tm_hour , tmstruct.tm_min, tmstruct.tm_sec); Serial.println(""); - if(!SD_MMC.begin()){ - Serial.println("Card Mount Failed"); + // If you are using any other ESP32-S3 board than ESP32-S3-USB-OTG which has preset default pins, you will + // need to specify the pins with the following example of SD_MMC.setPins() + // If you want to use only 1-bit mode, you can use the line with only one data pin (d0) begin changed. + // Please note that ESP32 does not allow pin change and will always fail. +#if defined(SOC_SDMMC_USE_GPIO_MATRIX) && not defined(BOARD_HAS_SDMMC) + //if(! SD_MMC.setPins(clk, cmd, d0)){ // 1-bit line version + if(! SD_MMC.setPins(clk, cmd, d0, d1, d2, d3)){ // 4-bit line version + Serial.println("Pin change failed!"); + return; + } +#endif + + if(use_1_bit_mode){ + Serial.printf("Begin in 1-bit mode; pins: CLK=%d, CMD=%d, D0=%d\n", SD_MMC.getClkPin(), SD_MMC.getCmdPin(), SD_MMC.getD0Pin()); + }else{ + Serial.printf("Begin in 4-bit mode; pins: CLK=%d, CMD=%d, D0=%d, D1=%d, D2=%d, D3=%d\n", SD_MMC.getClkPin(), SD_MMC.getCmdPin(), SD_MMC.getD0Pin(), SD_MMC.getD1Pin(), SD_MMC.getD2Pin(), SD_MMC.getD3Pin()); + } + + if(!SD_MMC.begin("/sdcard", use_1_bit_mode)){ + Serial.println("Card Mount Failed."); + Serial.println("Increase log level to see more info: Tools > Core Debug Level > Verbose"); + Serial.println("Make sure that all data pins have 10 kOhm pull-up resistor"); +#ifdef SOC_SDMMC_USE_GPIO_MATRIX + Serial.println("Make sure that when using generic ESP32-S3 board the pins are setup using SD_MMC.setPins()"); +#endif return; } uint8_t cardType = SD_MMC.cardType(); @@ -203,7 +264,7 @@ void setup(){ deleteFile(SD_MMC, "/hello.txt"); writeFile(SD_MMC, "/hello.txt", "Hello "); appendFile(SD_MMC, "/hello.txt", "World!\n"); - listDir(SD_MMC, "/", 0); + listDir(SD_MMC, "/", 0); } void loop(){ From fa2bcdc4e143af26137217d0b07b16b17abb97ff Mon Sep 17 00:00:00 2001 From: Tomas Pilny Date: Thu, 8 Jun 2023 14:42:00 +0200 Subject: [PATCH 4/4] Updated SD_SPI examples --- libraries/SD/examples/SD_Test/SD_Test.ino | 63 +++++++++++++++++++---- libraries/SD/examples/SD_time/SD_time.ino | 60 +++++++++++++++++---- 2 files changed, 101 insertions(+), 22 deletions(-) diff --git a/libraries/SD/examples/SD_Test/SD_Test.ino b/libraries/SD/examples/SD_Test/SD_Test.ino index 8084ee17dae..a7de5ca24ce 100644 --- a/libraries/SD/examples/SD_Test/SD_Test.ino +++ b/libraries/SD/examples/SD_Test/SD_Test.ino @@ -1,21 +1,56 @@ /* - * Connect the SD card to the following pins: + * pin 1 - not used | Micro SD card | + * pin 2 - CS (SS) | / + * pin 3 - DI (MOSI) | |__ + * pin 4 - VDD (3.3V) | | + * pin 5 - SCK (SCLK) | 8 7 6 5 4 3 2 1 / + * pin 6 - VSS (GND) | ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ / + * pin 7 - DO (MISO) | ▀ ▀ █ ▀ █ ▀ ▀ ▀ | + * pin 8 - not used |_________________| + * ║ ║ ║ ║ ║ ║ ║ ║ + * ╔═══════╝ ║ ║ ║ ║ ║ ║ ╚═════════╗ + * ║ ║ ║ ║ ║ ║ ╚══════╗ ║ + * ║ ╔═════╝ ║ ║ ║ ╚═════╗ ║ ║ + * Connections for ║ ║ ╔═══╩═║═║═══╗ ║ ║ ║ + * full-sized ║ ║ ║ ╔═╝ ║ ║ ║ ║ ║ + * SD card ║ ║ ║ ║ ║ ║ ║ ║ ║ + * Pin name | - DO VSS SCK VDD VSS DI CS - | + * SD pin number | 8 7 6 5 4 3 2 1 9 / + * | █/ + * |__▍___▊___█___█___█___█___█___█___/ * - * SD Card | ESP32 - * D2 - - * D3 SS - * CMD MOSI - * VSS GND - * VDD 3.3V - * CLK SCK - * VSS GND - * D0 MISO - * D1 - + * Note: that SPI pins can be configured by using `SPI.begin(sck, miso, mosi, cs);` + * alternatively you can change only the CS pin with `SD.begin(CSpin)` + * + * +--------------+---------+-------+----------+----------+----------+ + * | SPI Pin Name | ESP8266 | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | + * +==============+=========+=======+==========+==========+==========+ + * | CS (SS) | GPIO15 | GPIO5 | GPIO5 | GPIO13 | GPIO13 | + * +--------------+---------+-------+----------+----------+----------+ + * | DI (MOSI) | GPIO13 | GPIO23| GPIO24 | GPIO14 | GPIO14 | + * +--------------+---------+-------+----------+----------+----------+ + * | DO (MISO) | GPIO12 | GPIO19| GPIO25 | GPIO15 | GPIO15 | + * +--------------+---------+-------+----------+----------+----------+ + * | SCK (SCLK) | GPIO14 | GPIO18| GPIO19 | GPIO16 | GPIO16 | + * +--------------+---------+-------+----------+----------+----------+ + * + * For more info see file README.md in this library or on URL: + * https://github.com/espressif/arduino-esp32/tree/master/libraries/SD */ + #include "FS.h" #include "SD.h" #include "SPI.h" +/* +Uncomment and setup pins you want to use for the SPI communication +#define REASSIGN_PINS +int sck = -1; +int miso = -1; +int mosi = -1; +int cs = -1; +*/ + void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ Serial.printf("Listing directory: %s\n", dirname); @@ -175,6 +210,12 @@ void testFileIO(fs::FS &fs, const char * path){ void setup(){ Serial.begin(115200); + while(!Serial) { delay (10); } + +#ifdef REASSIGN_PINS + SPI.begin(sck, miso, mosi, cs); +#endif + //if(!SD.begin(cs)){ //Change to this function to manually change CS pin if(!SD.begin()){ Serial.println("Card Mount Failed"); return; diff --git a/libraries/SD/examples/SD_time/SD_time.ino b/libraries/SD/examples/SD_time/SD_time.ino index cef80dd600c..8219942193e 100644 --- a/libraries/SD/examples/SD_time/SD_time.ino +++ b/libraries/SD/examples/SD_time/SD_time.ino @@ -1,16 +1,41 @@ /* - * Connect the SD card to the following pins: + * pin 1 - not used | Micro SD card | + * pin 2 - CS (SS) | / + * pin 3 - DI (MOSI) | |__ + * pin 4 - VDD (3.3V) | | + * pin 5 - SCK (SCLK) | 8 7 6 5 4 3 2 1 / + * pin 6 - VSS (GND) | ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ / + * pin 7 - DO (MISO) | ▀ ▀ █ ▀ █ ▀ ▀ ▀ | + * pin 8 - not used |_________________| + * ║ ║ ║ ║ ║ ║ ║ ║ + * ╔═══════╝ ║ ║ ║ ║ ║ ║ ╚═════════╗ + * ║ ║ ║ ║ ║ ║ ╚══════╗ ║ + * ║ ╔═════╝ ║ ║ ║ ╚═════╗ ║ ║ + * Connections for ║ ║ ╔═══╩═║═║═══╗ ║ ║ ║ + * full-sized ║ ║ ║ ╔═╝ ║ ║ ║ ║ ║ + * SD card ║ ║ ║ ║ ║ ║ ║ ║ ║ + * Pin name | - DO VSS SCK VDD VSS DI CS - | + * SD pin number | 8 7 6 5 4 3 2 1 9 / + * | █/ + * |__▍___▊___█___█___█___█___█___█___/ * - * SD Card | ESP32 - * D2 - - * D3 SS - * CMD MOSI - * VSS GND - * VDD 3.3V - * CLK SCK - * VSS GND - * D0 MISO - * D1 - + * Note: that SPI pins can be configured by using `SPI.begin(sck, miso, mosi, cs);` + * alternatively you can change only the CS pin with `SD.begin(CSpin)` + * + * +--------------+---------+-------+----------+----------+----------+ + * | SPI Pin Name | ESP8266 | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | + * +==============+=========+=======+==========+==========+==========+ + * | CS (SS) | GPIO15 | GPIO5 | GPIO5 | GPIO13 | GPIO13 | + * +--------------+---------+-------+----------+----------+----------+ + * | DI (MOSI) | GPIO13 | GPIO23| GPIO24 | GPIO14 | GPIO14 | + * +--------------+---------+-------+----------+----------+----------+ + * | DO (MISO) | GPIO12 | GPIO19| GPIO25 | GPIO15 | GPIO15 | + * +--------------+---------+-------+----------+----------+----------+ + * | SCK (SCLK) | GPIO14 | GPIO18| GPIO19 | GPIO16 | GPIO16 | + * +--------------+---------+-------+----------+----------+----------+ + * + * For more info see file README.md in this library or on URL: + * https://github.com/espressif/arduino-esp32/tree/master/libraries/SD */ #include "FS.h" @@ -25,6 +50,15 @@ const char* password = "your-password"; long timezone = 1; byte daysavetime = 1; +/* +Uncomment and setup pins you want to use for the SPI communication +#define REASSIGN_PINS +int sck = -1; +int miso = -1; +int mosi = -1; +int cs = -1; +*/ + void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ Serial.printf("Listing directory: %s\n", dirname); @@ -172,6 +206,10 @@ void setup(){ Serial.printf("\nNow is : %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct.tm_year)+1900,( tmstruct.tm_mon)+1, tmstruct.tm_mday,tmstruct.tm_hour , tmstruct.tm_min, tmstruct.tm_sec); Serial.println(""); +#ifdef REASSIGN_PINS + SPI.begin(sck, miso, mosi, cs); +#endif + //if(!SD.begin(cs)){ //Change to this function to manually change CS pin if(!SD.begin()){ Serial.println("Card Mount Failed"); return;