diff -r 9e00845dc1ee -r 191dccfe4252 main/task_sdcard.c --- a/main/task_sdcard.c Thu Jul 01 20:26:45 2021 +0200 +++ b/main/task_sdcard.c Mon Jul 05 10:30:05 2021 +0200 @@ -30,9 +30,8 @@ int card_handle = -1; static const char *TAG = "task_sdcard"; static sdmmc_card_t* card = NULL; -static uint8_t s_pdrv = 0; -//static char * s_base_path = NULL; static uint8_t pdrv = FF_DRV_NOT_USED; +char drv[3] = {'0', ':', 0}; #define SDCARD_HOST_SLOT VSPI_HOST ///< HSPI_HOST is used by the TFT @@ -215,7 +214,7 @@ -static esp_err_t mount_prepare_mem(const char *base_path, BYTE *out_pdrv, char **out_dup_path, sdmmc_card_t** out_card) +static esp_err_t mount_prepare_mem(const char *base_path, BYTE *out_pdrv, char **out_dup_path) { esp_err_t err = ESP_OK; char* dup_path = NULL; @@ -231,7 +230,7 @@ // not using ff_memalloc here, as allocation in internal RAM is preferred card = (sdmmc_card_t*)malloc(sizeof(sdmmc_card_t)); if (card == NULL) { - ESP_LOGD(TAG, "could not locate new sdmmc_card_t"); + ESP_LOGD(TAG, "could not malloc sdmmc_card_t"); err = ESP_ERR_NO_MEM; goto cleanup; } @@ -243,7 +242,6 @@ goto cleanup; } - *out_card = card; *out_pdrv = pdrv; *out_dup_path = dup_path; return ESP_OK; @@ -287,23 +285,23 @@ return ESP_ERR_INVALID_STATE; } - err = mount_prepare_mem(base_path, &pdrv, &dup_path, &card); + err = mount_prepare_mem(base_path, &pdrv, &dup_path); if (err != ESP_OK) { - ESP_LOGE(TAG, "mount_prepare failed"); + ESP_LOGE(TAG, "mount_prepare_mem 0x%x", err); return err; } //the init() function is usually empty, doesn't require any deinit to revert it err = (*host_config->init)(); if (err != ESP_OK) { - ESP_LOGE(TAG, "host init returned rc=0x%x", err); + ESP_LOGE(TAG, "host_config->init() 0x%x", err); goto fail; } // configure SD host err = my_init_sdspi_host(host_config->slot, slot_config, &card_handle); if (err != ESP_OK) { - ESP_LOGE(TAG, "my_init_sdspi_host() rc=0x%x", err); + ESP_LOGE(TAG, "my_init_sdspi_host() 0x%x", err); goto fail; } return ESP_OK; @@ -337,7 +335,7 @@ esp_err_t err = ESP_OK; if (card == NULL) { - ESP_LOGE(TAG, "card not NULL"); + ESP_LOGE(TAG, "card NULL"); return ESP_ERR_INVALID_STATE; } @@ -356,7 +354,7 @@ err = sdmmc_card_init(host_config, card); if (err != ESP_OK) { if (err != ESP_ERR_INVALID_RESPONSE) { // No card present, do not log - ESP_LOGI(TAG, "sdmmc_card_init failed 0x(%x)", err); + ESP_LOGI(TAG, "sdmmc_card_init failed 0x%x", err); } goto fail; } @@ -369,9 +367,8 @@ * mount to vfs fat */ ff_diskio_register_sdmmc(pdrv, card); - s_pdrv = pdrv; ESP_LOGD(TAG, "using pdrv=%i", pdrv); - char drv[3] = {(char)('0' + pdrv), ':', 0}; + drv[0] = (char)('0' + pdrv); // connect FATFS to VFS err = esp_vfs_fat_register(base_path, drv, mount_config->max_files, &fs); @@ -383,6 +380,7 @@ } // Try to mount partition + // See: esp-idf/components/fatfs/src/ff.h FRESULT res = f_mount(fs, drv, 1); if (res != FR_OK) { err = ESP_FAIL; @@ -412,7 +410,6 @@ return ESP_ERR_INVALID_STATE; } // unmount - char drv[3] = {(char)('0' + s_pdrv), ':', 0}; f_mount(0, drv, 0); return ESP_OK; } @@ -467,6 +464,8 @@ ESP_LOGI(TAG, "Start SD card"); sdmmc_host_t host = SDSPI_HOST_DEFAULT(); host.slot = SDCARD_HOST_SLOT; // HSPI_HOST is in use by the TFT. + //host.flags = SDMMC_HOST_FLAG_SPI | SDMMC_HOST_FLAG_DEINIT_ARG | SDMMC_HOST_FLAG_1BIT; + //host.max_freq_khz = 10000; spi_bus_config_t bus_cfg = { .mosi_io_num = SDCARD_PIN_NUM_MOSI, .miso_io_num = SDCARD_PIN_NUM_MISO, @@ -491,7 +490,7 @@ /* * No errors from the sdspi_transaction driver. */ -// esp_log_level_set("sdspi_transaction", ESP_LOG_NONE); + esp_log_level_set("sdspi_transaction", ESP_LOG_NONE); /* * Options for mounting the filesystem. @@ -513,7 +512,6 @@ vTaskDelete(NULL); return; } - xEventGroupSDcard = xEventGroupCreate(); /* @@ -532,7 +530,10 @@ DIR* dir = opendir("/sdcard/w/log"); if (dir == NULL) { + ret = mkdir("/sdcard/w", 0755); + ESP_LOGI(TAG, "mkdir(/sdcard/w)=%d", ret); ret = mkdir("/sdcard/w/log", 0755); + ESP_LOGI(TAG, "mkdir(/sdcard/w/log)=%d", ret); } else { closedir(dir); }