From ff867beb9d71116f1dc5a332ae2d0f3478fa6fba Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Fri, 17 Jan 2025 15:04:47 +0100 Subject: [PATCH] Improve SD card code --- boards/obp60_s3_light_n8r8.json | 2 +- lib/obp60task/config.json | 15 +++++++++++ lib/obp60task/obp60task.cpp | 48 +++++++++++++++++++-------------- lib/obp60task/platformio.ini | 2 +- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/boards/obp60_s3_light_n8r8.json b/boards/obp60_s3_light_n8r8.json index b7b808a..c7a28f6 100644 --- a/boards/obp60_s3_light_n8r8.json +++ b/boards/obp60_s3_light_n8r8.json @@ -10,7 +10,7 @@ "-DBOARD_HAS_PSRAM", "-DARDUINO_ESP32S3_DEV", "-DARDUINO_USB_MODE=1", - "-DARDUINO_USB_CDC_ON_BOOT=1", + "-DARDUINO_USB_CDC_ON_BOOT=0", "-DARDUINO_RUNNING_CORE=1", "-DARDUINO_EVENT_RUNNING_CORE=1" ], diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index 49ac39d..c31c37d 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -573,6 +573,21 @@ "obp60":"true" } }, + { + "name": "useSDCard", + "label": "SD Card", + "type": "boolean", + "default": "off", + "description": "Use internal SD card interface [off|on]", + "list": [ + "off", + "on" + ], + "category": "OBP60 Hardware", + "capabilities": { + "obp60":"true" + } + }, { "name": "powerMode", "label": "Power Mode", diff --git a/lib/obp60task/obp60task.cpp b/lib/obp60task/obp60task.cpp index 6427685..ddc49d0 100644 --- a/lib/obp60task/obp60task.cpp +++ b/lib/obp60task/obp60task.cpp @@ -37,6 +37,9 @@ int taskRunCounter = 0; // Task couter for loop section //#################################################################################### void OBP60Init(GwApi *api){ + GwLog *logger = api->getLogger(); + GwConfigHandler *config = api->getConfig(); + // Set a new device name and hidden the original name in the main config String devicename = api->getConfig()->getConfigItem(api->getConfig()->deviceName,true)->asString(); api->getConfig()->setValue(GwConfigDefinitions::systemName, devicename, GwConfigInterface::ConfigType::HIDDEN); @@ -49,6 +52,31 @@ void OBP60Init(GwApi *api){ // Init hardware hardwareInit(api); + String sdcard = config->getConfigItem(config->useSDCard, true)->asString(); + if (sdcard == "on") { + setPortPin(OBP_POWER_SD, true); // Power on SD + delay(10); + SPIClass SD_SPI = SPIClass(HSPI); + SD_SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI); + if (SD.begin(SD_SPI_CS, SD_SPI, 80000000)) { + String sdtype = "unknown"; + uint8_t cardType = SD.cardType(); + switch (cardType) { + case CARD_MMC: + sdtype = "MMC"; + break; + case CARD_SD: + sdtype = "SDSC"; + break; + case CARD_SDHC: + sdtype = "SDHC"; + break; + } + uint64_t cardSize = SD.cardSize() / (1024 * 1024); + LOG_DEBUG(GwLog::LOG,"SD card type %s of size %d MB detected", sdtype, cardSize); + } + } + // Init power rail 5.0V String powermode = api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); api->getLogger()->logDebug(GwLog::DEBUG,"Power Mode is: %s", powermode.c_str()); @@ -414,26 +442,6 @@ void OBP60Task(GwApi *api){ doImageRequest(api, &pageNumber, pages, request); }); - // SD-Card: init an check - SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI, SD_SPI_CS); - if (SD.begin(SD_SPI_CS)) { - String sdtype = "unknown"; - uint8_t cardType = SD.cardType(); - switch (cardType) { - case CARD_MMC: - sdtype = "MMC"; - break; - case CARD_SD: - sdtype = "SDSC"; - break; - case CARD_SDHC: - sdtype = "SDHC"; - break; - } - uint64_t cardSize = SD.cardSize() / (1024 * 1024); - LOG_DEBUG(GwLog::DEBUG,"SD card type %s of size %d MB detected", sdtype, cardSize); - } - //now we have prepared the page data //we start a separate task that will fetch our keys... MyData allParameters; diff --git a/lib/obp60task/platformio.ini b/lib/obp60task/platformio.ini index e33617b..e47e00c 100644 --- a/lib/obp60task/platformio.ini +++ b/lib/obp60task/platformio.ini @@ -41,7 +41,7 @@ lib_deps = build_flags= #https://thingpulse.com/usb-settings-for-logging-with-the-esp32-s3-in-platformio/?srsltid=AfmBOopGskbkr4GoeVkNlFaZXe_zXkLceKF6Rn-tmoXABCeAR2vWsdHL # -D ARDUINO_USB_MODE=1 #0=OTG (to implement other external devices), 1=CDC (is a serial device) - -D ARDUINO_USB_CDC_ON_BOOT=0 #0=JTAG, 1=CDC (serial device) +# -D ARDUINO_USB_CDC_ON_BOOT=0 #0=JTAG, 1=CDC (serial device) # -D CORE_DEBUG_LEVEL=1 #Debug level for CPU core via CDC (seral device) # -D TIME=$UNIX_TIME #Set PC time for RTC (only settable via VSC) -D DISABLE_DIAGNOSTIC_OUTPUT #Disable diagnostic output for GxEPD2 lib