More work on SD card code
This commit is contained in:
parent
6f4e9b625d
commit
97b1af71ff
|
@ -64,6 +64,12 @@ PCF8574 pcf8574_Out(PCF8574_I2C_ADDR1); // First digital output modul PCF8574 fr
|
|||
Adafruit_FRAM_I2C fram;
|
||||
bool hasFRAM = false;
|
||||
|
||||
// SD Card
|
||||
#ifdef BOARD_OBP40S3
|
||||
sdmmc_card_t *sdcard;
|
||||
bool hasSDCard;
|
||||
#endif
|
||||
|
||||
// Global vars
|
||||
bool blinkingLED = false; // Enable / disable blinking flash LED
|
||||
bool statusLED = false; // Actual status of flash LED on/off
|
||||
|
@ -78,6 +84,9 @@ LedTaskData *ledTaskData=nullptr;
|
|||
|
||||
void hardwareInit(GwApi *api)
|
||||
{
|
||||
GwLog *logger=api->getLogger();
|
||||
GwConfigHandler *config=api->getConfig();
|
||||
|
||||
Wire.begin();
|
||||
// Init PCF8574 digital outputs
|
||||
Wire.setClock(I2C_SPEED); // Set I2C clock on 10 kHz
|
||||
|
@ -87,7 +96,7 @@ void hardwareInit(GwApi *api)
|
|||
fram = Adafruit_FRAM_I2C();
|
||||
if (esp_reset_reason() == ESP_RST_POWERON) {
|
||||
// help initialize FRAM
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Delaying I2C init for 250ms due to cold boot");
|
||||
LOG_DEBUG(GwLog::LOG,"Delaying I2C init for 250ms due to cold boot");
|
||||
delay(250);
|
||||
}
|
||||
// FRAM (e.g. MB85RC256V)
|
||||
|
@ -99,12 +108,53 @@ void hardwareInit(GwApi *api)
|
|||
// Boot counter
|
||||
uint8_t framcounter = fram.read(0x0000);
|
||||
fram.write(0x0000, framcounter+1);
|
||||
api->getLogger()->logDebug(GwLog::LOG,"FRAM detected: 0x%04x/0x%04x (counter=%d)", manufacturerID, productID, framcounter);
|
||||
LOG_DEBUG(GwLog::LOG,"FRAM detected: 0x%04x/0x%04x (counter=%d)", manufacturerID, productID, framcounter);
|
||||
}
|
||||
else {
|
||||
hasFRAM = false;
|
||||
api->getLogger()->logDebug(GwLog::LOG,"NO FRAM detected");
|
||||
LOG_DEBUG(GwLog::LOG,"NO FRAM detected");
|
||||
}
|
||||
// SD Card
|
||||
hasSDCard = false;
|
||||
#ifdef BOARD_OBP40S3
|
||||
if (config->getBool(config->useSDCard)) {
|
||||
esp_err_t ret;
|
||||
sdmmc_host_t host = SDSPI_HOST_DEFAULT();
|
||||
host.slot = SPI3_HOST;
|
||||
spi_bus_config_t bus_cfg = {
|
||||
.mosi_io_num = SD_SPI_MOSI,
|
||||
.miso_io_num = SD_SPI_MISO,
|
||||
.sclk_io_num = SD_SPI_CLK,
|
||||
.quadwp_io_num = -1,
|
||||
.quadhd_io_num = -1,
|
||||
.max_transfer_sz = 4000,
|
||||
};
|
||||
ret = spi_bus_initialize((spi_host_device_t) host.slot, &bus_cfg, SDSPI_DEFAULT_DMA);
|
||||
if (ret != ESP_OK) {
|
||||
LOG_DEBUG(GwLog::ERROR,"Failed to initialize SPI bus for SD card");
|
||||
} else {
|
||||
sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT();
|
||||
slot_config.gpio_cs = SD_SPI_CS;
|
||||
slot_config.host_id = (spi_host_device_t) host.slot;
|
||||
esp_vfs_fat_sdmmc_mount_config_t mount_config = {
|
||||
.format_if_mount_failed = false,
|
||||
.max_files = 5,
|
||||
.allocation_unit_size = 16 * 1024
|
||||
};
|
||||
ret = esp_vfs_fat_sdspi_mount(MOUNT_POINT, &host, &slot_config, &mount_config, &sdcard);
|
||||
if (ret != ESP_OK) {
|
||||
if (ret == ESP_FAIL) {
|
||||
LOG_DEBUG(GwLog::ERROR,"Failed to mount SD card filesystem");
|
||||
} else {
|
||||
LOG_DEBUG(GwLog::ERROR,"Failed to initialize SD card");
|
||||
}
|
||||
} else {
|
||||
LOG_DEBUG(GwLog::ERROR,"SD card filesystem mounted");
|
||||
hasSDCard = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void setPortPin(uint pin, bool value){
|
||||
|
|
|
@ -7,6 +7,12 @@
|
|||
#include <GxEPD2_BW.h> // E-paper lib V2
|
||||
#include <Adafruit_FRAM_I2C.h> // I2C FRAM
|
||||
|
||||
#ifdef BOARD_OBP40S3
|
||||
#include "esp_vfs_fat.h"
|
||||
#include "sdmmc_cmd.h"
|
||||
#define MOUNT_POINT "/sdcard"
|
||||
#endif
|
||||
|
||||
// FRAM address reservations 32kB: 0x0000 - 0x7FFF
|
||||
// 0x0000 - 0x03ff: single variables
|
||||
#define FRAM_PAGE_NO 0x0002
|
||||
|
@ -24,6 +30,10 @@
|
|||
|
||||
extern Adafruit_FRAM_I2C fram;
|
||||
extern bool hasFRAM;
|
||||
#ifdef BOARD_OBP40S3
|
||||
extern sdmmc_card_t *sdcard;
|
||||
extern bool hasSDCard;
|
||||
#endif
|
||||
|
||||
// Fonts declarations for display (#includes see OBP60Extensions.cpp)
|
||||
extern const GFXfont DSEG7Classic_BoldItalic16pt7b;
|
||||
|
|
|
@ -120,10 +120,10 @@
|
|||
#define SHOW_TIME 6000 // Show time in [ms] for logo and WiFi QR code
|
||||
#define FULL_REFRESH_TIME 600 // Refresh cycle time in [s][600...3600] for full display update (very important healcy function)
|
||||
// SPI SD-Card
|
||||
#define SD_SPI_CS 10
|
||||
#define SD_SPI_MOSI 40
|
||||
#define SD_SPI_CLK 39
|
||||
#define SD_SPI_MISO 13
|
||||
#define SD_SPI_CS GPIO_NUM_10
|
||||
#define SD_SPI_MOSI GPIO_NUM_40
|
||||
#define SD_SPI_CLK GPIO_NUM_39
|
||||
#define SD_SPI_MISO GPIO_NUM_13
|
||||
|
||||
// GPS (NEO-6M, NEO-M8N, ATGM336H)
|
||||
#define OBP_GPS_RX 19
|
||||
|
|
|
@ -6,11 +6,6 @@
|
|||
#include <esp32/clk.h>
|
||||
#include "qrcode.h"
|
||||
|
||||
#ifdef BOARD_OBP40S3
|
||||
#include <SD.h>
|
||||
#include <FS.h>
|
||||
#endif
|
||||
|
||||
#define STRINGIZE_IMPL(x) #x
|
||||
#define STRINGIZE(x) STRINGIZE_IMPL(x)
|
||||
#define VERSINFO STRINGIZE(GWDEVVERSION)
|
||||
|
@ -250,12 +245,7 @@ public:
|
|||
getdisplay().setCursor(8, y0 + 48);
|
||||
getdisplay().print("SD-Card:");
|
||||
getdisplay().setCursor(90, y0 + 48);
|
||||
if (sdcard) {
|
||||
uint64_t cardsize = SD.cardSize() / (1024 * 1024);
|
||||
getdisplay().print(String(cardsize) + String(" MB"));
|
||||
} else {
|
||||
getdisplay().print("off");
|
||||
}
|
||||
getdisplay().print(hasSDcard ? "ok" : "no");
|
||||
#endif
|
||||
|
||||
// CPU speed config / active
|
||||
|
@ -356,7 +346,6 @@ public:
|
|||
getdisplay().setCursor(x0, y0);
|
||||
getdisplay().print("Work in progress...");
|
||||
|
||||
|
||||
} else {
|
||||
// NMEA2000 device list
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt8b);
|
||||
|
|
|
@ -79,8 +79,8 @@ void OBP60Init(GwApi *api){
|
|||
}
|
||||
|
||||
#ifdef BOARD_OBP40S3
|
||||
bool sdcard = config->getBool(config->useSDCard);
|
||||
if (sdcard) {
|
||||
// TODO migrate to new code see OBP60Extensions.cpp
|
||||
if (config->getBool(config->useSDCard)) {
|
||||
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)) {
|
||||
|
@ -99,6 +99,7 @@ void OBP60Init(GwApi *api){
|
|||
}
|
||||
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
|
||||
LOG_DEBUG(GwLog::LOG,"SD card type %s of size %d MB detected", sdtype, cardSize);
|
||||
SD_SPI.end();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -382,6 +383,7 @@ void OBP60Task(GwApi *api){
|
|||
#ifdef HARDWARE_V21
|
||||
startLedTask(api);
|
||||
#endif
|
||||
|
||||
PageList allPages;
|
||||
registerAllPages(allPages);
|
||||
CommonData commonData;
|
||||
|
|
Loading…
Reference in New Issue