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;
|
Adafruit_FRAM_I2C fram;
|
||||||
bool hasFRAM = false;
|
bool hasFRAM = false;
|
||||||
|
|
||||||
|
// SD Card
|
||||||
|
#ifdef BOARD_OBP40S3
|
||||||
|
sdmmc_card_t *sdcard;
|
||||||
|
bool hasSDCard;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Global vars
|
// Global vars
|
||||||
bool blinkingLED = false; // Enable / disable blinking flash LED
|
bool blinkingLED = false; // Enable / disable blinking flash LED
|
||||||
bool statusLED = false; // Actual status of flash LED on/off
|
bool statusLED = false; // Actual status of flash LED on/off
|
||||||
|
@ -78,6 +84,9 @@ LedTaskData *ledTaskData=nullptr;
|
||||||
|
|
||||||
void hardwareInit(GwApi *api)
|
void hardwareInit(GwApi *api)
|
||||||
{
|
{
|
||||||
|
GwLog *logger=api->getLogger();
|
||||||
|
GwConfigHandler *config=api->getConfig();
|
||||||
|
|
||||||
Wire.begin();
|
Wire.begin();
|
||||||
// Init PCF8574 digital outputs
|
// Init PCF8574 digital outputs
|
||||||
Wire.setClock(I2C_SPEED); // Set I2C clock on 10 kHz
|
Wire.setClock(I2C_SPEED); // Set I2C clock on 10 kHz
|
||||||
|
@ -87,7 +96,7 @@ void hardwareInit(GwApi *api)
|
||||||
fram = Adafruit_FRAM_I2C();
|
fram = Adafruit_FRAM_I2C();
|
||||||
if (esp_reset_reason() == ESP_RST_POWERON) {
|
if (esp_reset_reason() == ESP_RST_POWERON) {
|
||||||
// help initialize FRAM
|
// 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);
|
delay(250);
|
||||||
}
|
}
|
||||||
// FRAM (e.g. MB85RC256V)
|
// FRAM (e.g. MB85RC256V)
|
||||||
|
@ -99,12 +108,53 @@ void hardwareInit(GwApi *api)
|
||||||
// Boot counter
|
// Boot counter
|
||||||
uint8_t framcounter = fram.read(0x0000);
|
uint8_t framcounter = fram.read(0x0000);
|
||||||
fram.write(0x0000, framcounter+1);
|
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 {
|
else {
|
||||||
hasFRAM = false;
|
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){
|
void setPortPin(uint pin, bool value){
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
#include <GxEPD2_BW.h> // E-paper lib V2
|
#include <GxEPD2_BW.h> // E-paper lib V2
|
||||||
#include <Adafruit_FRAM_I2C.h> // I2C FRAM
|
#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
|
// FRAM address reservations 32kB: 0x0000 - 0x7FFF
|
||||||
// 0x0000 - 0x03ff: single variables
|
// 0x0000 - 0x03ff: single variables
|
||||||
#define FRAM_PAGE_NO 0x0002
|
#define FRAM_PAGE_NO 0x0002
|
||||||
|
@ -24,6 +30,10 @@
|
||||||
|
|
||||||
extern Adafruit_FRAM_I2C fram;
|
extern Adafruit_FRAM_I2C fram;
|
||||||
extern bool hasFRAM;
|
extern bool hasFRAM;
|
||||||
|
#ifdef BOARD_OBP40S3
|
||||||
|
extern sdmmc_card_t *sdcard;
|
||||||
|
extern bool hasSDCard;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Fonts declarations for display (#includes see OBP60Extensions.cpp)
|
// Fonts declarations for display (#includes see OBP60Extensions.cpp)
|
||||||
extern const GFXfont DSEG7Classic_BoldItalic16pt7b;
|
extern const GFXfont DSEG7Classic_BoldItalic16pt7b;
|
||||||
|
|
|
@ -120,10 +120,10 @@
|
||||||
#define SHOW_TIME 6000 // Show time in [ms] for logo and WiFi QR code
|
#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)
|
#define FULL_REFRESH_TIME 600 // Refresh cycle time in [s][600...3600] for full display update (very important healcy function)
|
||||||
// SPI SD-Card
|
// SPI SD-Card
|
||||||
#define SD_SPI_CS 10
|
#define SD_SPI_CS GPIO_NUM_10
|
||||||
#define SD_SPI_MOSI 40
|
#define SD_SPI_MOSI GPIO_NUM_40
|
||||||
#define SD_SPI_CLK 39
|
#define SD_SPI_CLK GPIO_NUM_39
|
||||||
#define SD_SPI_MISO 13
|
#define SD_SPI_MISO GPIO_NUM_13
|
||||||
|
|
||||||
// GPS (NEO-6M, NEO-M8N, ATGM336H)
|
// GPS (NEO-6M, NEO-M8N, ATGM336H)
|
||||||
#define OBP_GPS_RX 19
|
#define OBP_GPS_RX 19
|
||||||
|
|
|
@ -6,11 +6,6 @@
|
||||||
#include <esp32/clk.h>
|
#include <esp32/clk.h>
|
||||||
#include "qrcode.h"
|
#include "qrcode.h"
|
||||||
|
|
||||||
#ifdef BOARD_OBP40S3
|
|
||||||
#include <SD.h>
|
|
||||||
#include <FS.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define STRINGIZE_IMPL(x) #x
|
#define STRINGIZE_IMPL(x) #x
|
||||||
#define STRINGIZE(x) STRINGIZE_IMPL(x)
|
#define STRINGIZE(x) STRINGIZE_IMPL(x)
|
||||||
#define VERSINFO STRINGIZE(GWDEVVERSION)
|
#define VERSINFO STRINGIZE(GWDEVVERSION)
|
||||||
|
@ -250,12 +245,7 @@ public:
|
||||||
getdisplay().setCursor(8, y0 + 48);
|
getdisplay().setCursor(8, y0 + 48);
|
||||||
getdisplay().print("SD-Card:");
|
getdisplay().print("SD-Card:");
|
||||||
getdisplay().setCursor(90, y0 + 48);
|
getdisplay().setCursor(90, y0 + 48);
|
||||||
if (sdcard) {
|
getdisplay().print(hasSDcard ? "ok" : "no");
|
||||||
uint64_t cardsize = SD.cardSize() / (1024 * 1024);
|
|
||||||
getdisplay().print(String(cardsize) + String(" MB"));
|
|
||||||
} else {
|
|
||||||
getdisplay().print("off");
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// CPU speed config / active
|
// CPU speed config / active
|
||||||
|
@ -356,7 +346,6 @@ public:
|
||||||
getdisplay().setCursor(x0, y0);
|
getdisplay().setCursor(x0, y0);
|
||||||
getdisplay().print("Work in progress...");
|
getdisplay().print("Work in progress...");
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// NMEA2000 device list
|
// NMEA2000 device list
|
||||||
getdisplay().setFont(&Ubuntu_Bold12pt8b);
|
getdisplay().setFont(&Ubuntu_Bold12pt8b);
|
||||||
|
|
|
@ -79,8 +79,8 @@ void OBP60Init(GwApi *api){
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BOARD_OBP40S3
|
#ifdef BOARD_OBP40S3
|
||||||
bool sdcard = config->getBool(config->useSDCard);
|
// TODO migrate to new code see OBP60Extensions.cpp
|
||||||
if (sdcard) {
|
if (config->getBool(config->useSDCard)) {
|
||||||
SPIClass SD_SPI = SPIClass(HSPI);
|
SPIClass SD_SPI = SPIClass(HSPI);
|
||||||
SD_SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI);
|
SD_SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI);
|
||||||
if (SD.begin(SD_SPI_CS, SD_SPI, 80000000)) {
|
if (SD.begin(SD_SPI_CS, SD_SPI, 80000000)) {
|
||||||
|
@ -99,6 +99,7 @@ void OBP60Init(GwApi *api){
|
||||||
}
|
}
|
||||||
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
|
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
|
||||||
LOG_DEBUG(GwLog::LOG,"SD card type %s of size %d MB detected", sdtype, cardSize);
|
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
|
#ifdef HARDWARE_V21
|
||||||
startLedTask(api);
|
startLedTask(api);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PageList allPages;
|
PageList allPages;
|
||||||
registerAllPages(allPages);
|
registerAllPages(allPages);
|
||||||
CommonData commonData;
|
CommonData commonData;
|
||||||
|
|
Loading…
Reference in New Issue