main/task_sdcard.c

changeset 106
191dccfe4252
parent 105
9e00845dc1ee
child 119
1cef3c25426b
--- 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);
 		}

mercurial