Grbl-Esp32 Big Problem

Schematics, Example Code and Q&A
sotchrys
Posts: 8
Joined: Wed Jan 27, 2021 7:37 am

Grbl-Esp32 Big Problem

Unread post by sotchrys »

ESP32_Ant-01 Breakout and Development Board
I bought this card a while ago to upload grbl-esp32 and connect an sd card but because of the 2 led it can not read the files from the card. (Too big and construction error to connect to VSPI PINS)
Is there a solution to this problem?
Or buy someone else esp32 controller ...?
Daniel
Posts: 133
Joined: Tue Nov 13, 2012 2:10 pm

Re: Grbl-Esp32 Big Problem

Unread post by Daniel »

I will try to load the code on my board and see if I run into any issues. It is extremely unlikely that the LEDs are causing the issue you are seeing. Many people have successfully accessed microSD cards from my boards.

I wired up the SD Card as per the diagram of the esp32_cnc_test_v4.1_schm.pdf I found in the GitHub repository. I tested the setup with my normal test code for SD card access and it works as expected. I have added the code to the bottom of the post. The setup has long wires because I removed the CPU and LDO from one of my SAMD21 boards to get access to an SD-card holder that I can put on a breadboard.
SD_Card_Test.jpg
After the test code worked I loaded the Grbl_ESP32 found in https://github.com/bdring/Grbl_Esp32 . I had to read the instructions in the wiki on how to get the code to compile and load but it was mostly painless. Getting to the WebUI was less fun because I struggled to find the default password (12345678) and then I learned I had to download a file before the web interface shows up. Since I didn't have the file on my phone I had to get the desktop to connect to the AP generated by Grbl_ESP32 which was another PITA because my desktop has wired Ethernet only. After pain and suffering I got the file loaded and could test the WebUI and SD card.
SDCapture.PNG
As you can see the files can be read and I could delete them too.

The SD card test program is listed below.

Code: Select all

/*
 * Connect the SD card to the following pins:
 *
 * SD Card | ESP32
 *    D2       -
 *    D3       SS
 *    CMD      MOSI
 *    VSS      GND
 *    VDD      3.3V
 *    CLK      SCK
 *    VSS      GND
 *    D0       MISO
 *    D1       -
 */
#include "FS.h"
#include "SD.h"
#include "SPI.h"

// Works CdB

#define SD_CS   5

void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
    Serial.printf("Listing directory: %s\n", dirname);

    File root = fs.open(dirname);
    if(!root){
        Serial.println("Failed to open directory");
        return;
    }
    if(!root.isDirectory()){
        Serial.println("Not a directory");
        return;
    }

    File file = root.openNextFile();
    while(file){
        if(file.isDirectory()){
            Serial.print("  DIR : ");
            Serial.println(file.name());
            if(levels){
                listDir(fs, file.name(), levels -1);
            }
        } else {
            Serial.print("  FILE: ");
            Serial.print(file.name());
            Serial.print("  SIZE: ");
            Serial.println(file.size());
        }
        file = root.openNextFile();
    }
}

void createDir(fs::FS &fs, const char * path){
    Serial.printf("Creating Dir: %s\n", path);
    if(fs.mkdir(path)){
        Serial.println("Dir created");
    } else {
        Serial.println("mkdir failed");
    }
}

void removeDir(fs::FS &fs, const char * path){
    Serial.printf("Removing Dir: %s\n", path);
    if(fs.rmdir(path)){
        Serial.println("Dir removed");
    } else {
        Serial.println("rmdir failed");
    }
}

void readFile(fs::FS &fs, const char * path){
    Serial.printf("Reading file: %s\n", path);

    File file = fs.open(path);
    if(!file){
        Serial.println("Failed to open file for reading");
        return;
    }

    Serial.print("Read from file: ");
    while(file.available()){
        Serial.write(file.read());
    }
    file.close();
}

void writeFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Writing file: %s\n", path);

    File file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println("Failed to open file for writing");
        return;
    }
    if(file.print(message)){
        Serial.println("File written");
    } else {
        Serial.println("Write failed");
    }
    file.close();
}

void appendFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Appending to file: %s\n", path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println("Failed to open file for appending");
        return;
    }
    if(file.print(message)){
        Serial.println("Message appended");
    } else {
        Serial.println("Append failed");
    }
    file.close();
}

void renameFile(fs::FS &fs, const char * path1, const char * path2){
    Serial.printf("Renaming file %s to %s\n", path1, path2);
    if (fs.rename(path1, path2)) {
        Serial.println("File renamed");
    } else {
        Serial.println("Rename failed");
    }
}

void deleteFile(fs::FS &fs, const char * path){
    Serial.printf("Deleting file: %s\n", path);
    if(fs.remove(path)){
        Serial.println("File deleted");
    } else {
        Serial.println("Delete failed");
    }
}

void testFileIO(fs::FS &fs, const char * path){
    File file = fs.open(path);
    static uint8_t buf[512];
    size_t len = 0;
    uint32_t start = millis();
    uint32_t end = start;
    if(file){
        len = file.size();
        size_t flen = len;
        start = millis();
        while(len){
            size_t toRead = len;
            if(toRead > 512){
                toRead = 512;
            }
            file.read(buf, toRead);
            len -= toRead;
        }
        end = millis() - start;
        Serial.printf("%u bytes read for %u ms\n", flen, end);
        file.close();
    } else {
        Serial.println("Failed to open file for reading");
    }


    file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println("Failed to open file for writing");
        return;
    }

    size_t i;
    start = millis();
    for(i=0; i<2048; i++){
        file.write(buf, 512);
    }
    end = millis() - start;
    Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
    file.close();
}


void setup(){
    Serial.begin(115200);
    
    delay( 1 );
    
    if(!SD.begin( SD_CS )){
        Serial.println("Card Mount Failed");
        return;
    }
    uint8_t cardType = SD.cardType();

    if(cardType == CARD_NONE){
        Serial.println("No SD card attached");
        return;
    }

    Serial.print("SD Card Type: ");
    if(cardType == CARD_MMC){
        Serial.println("MMC");
    } else if(cardType == CARD_SD){
        Serial.println("SDSC");
    } else if(cardType == CARD_SDHC){
        Serial.println("SDHC");
    } else {
        Serial.println("UNKNOWN");
    }

    uint64_t cardSize = SD.cardSize() / (1024 * 1024);
    Serial.printf("SD Card Size: %lluMB\n", cardSize);

    listDir(SD, "/", 0);
    createDir(SD, "/mydir");
    listDir(SD, "/", 0);
    removeDir(SD, "/mydir");
    listDir(SD, "/", 2);
    writeFile(SD, "/hello.txt", "Hello ");
    appendFile(SD, "/hello.txt", "World!\n");
    readFile(SD, "/hello.txt");
    deleteFile(SD, "/foo.txt");
    renameFile(SD, "/hello.txt", "/foo.txt");
    readFile(SD, "/foo.txt");
    testFileIO(SD, "/test.txt");
    Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
    Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
}

void loop(){

}
sotchrys
Posts: 8
Joined: Wed Jan 27, 2021 7:37 am

Re: Grbl-Esp32 Big Problem

Unread post by sotchrys »

witch SD-card holder you use ? I test it with this
https://www.banggood.com/el/3Pcs-Micro- ... rehouse=CN
sotchrys
Posts: 8
Joined: Wed Jan 27, 2021 7:37 am

Re: Grbl-Esp32 Big Problem

Unread post by sotchrys »

I test it with yours's sketch
No luck...
ets Jun 8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
Card Mount Failed
Daniel
Posts: 133
Joined: Tue Nov 13, 2012 2:10 pm

Re: Grbl-Esp32 Big Problem

Unread post by Daniel »

The SD card is just the card, no electronics and its wired in the same way as the original Grbl_ESP schematic. In the beginning of the code is a list of the pin numbers used.

The ESP32 board works, the code works. That means its not wired up correctly or the adapter is interfering with the signals to the SD-card. The adapter has a level shifter and a voltage regulator. You don't need a level shifter or voltage regulator, the SD card and the ESP32 are both 3.3V devices. If the level shifter drives the ESP with 5V signals it may damage the ESP32. If you powered the board from 3.3V then the voltage on the SD card is only 2.8V (or less) and it won't work. If you power it from 5V then you may have killed the ESP32. You need a socket only, no electronics.
sotchrys
Posts: 8
Joined: Wed Jan 27, 2021 7:37 am

Re: Grbl-Esp32 Big Problem

Unread post by sotchrys »

I tested it in your own way ..with 2 different cards only esp32 and the cart reader no other electronic components on breadboard . I just uploaded your sketch with the same result ... nothing
I will buy another type of card reader maybe this is the reason...
can you tell me please which card do you have?
sotchrys
Posts: 8
Joined: Wed Jan 27, 2021 7:37 am

Re: Grbl-Esp32 Big Problem

Unread post by sotchrys »

I connected the card to an external source at 4 volts and it worked just fine
sotchrys
Posts: 8
Joined: Wed Jan 27, 2021 7:37 am

Re: Grbl-Esp32 Big Problem

Unread post by sotchrys »

Where can I find the pin outs ?
Post Reply