Эх сурвалжийг харах

Fix crash log saving when using SDIO

Petteri Aimonen 3 жил өмнө
parent
commit
f4a4ca395d

+ 4 - 1
lib/AzulSCSI_platform_GD32F205/AzulSCSI_platform.cpp

@@ -217,13 +217,16 @@ void azplatform_log(const char *s)
 
 void azplatform_emergency_log_save()
 {
+    azplatform_set_sd_callback(NULL, NULL);
+
+    SD.begin(SD_CONFIG_CRASH);
     FsFile crashfile = SD.open(CRASHFILE, O_WRONLY | O_CREAT | O_TRUNC);
 
     if (!crashfile.isOpen())
     {
         // Try to reinitialize
         int max_retry = 10;
-        while (max_retry-- > 0 && !SD.begin(SD_CONFIG));
+        while (max_retry-- > 0 && !SD.begin(SD_CONFIG_CRASH));
 
         crashfile = SD.open(CRASHFILE, O_WRONLY | O_CREAT | O_TRUNC);
     }

+ 3 - 0
lib/AzulSCSI_platform_GD32F205/AzulSCSI_platform.h

@@ -116,12 +116,15 @@ extern const uint32_t g_scsi_out_byte_to_bop[256];
 class SdSpiConfig;
 extern SdSpiConfig g_sd_spi_config;
 #define SD_CONFIG g_sd_spi_config
+#define SD_CONFIG_CRASH g_sd_spi_config
 
 #else
 // SDIO interface, AzulSCSI v1.1
 class SdioConfig;
 extern SdioConfig g_sd_sdio_config;
+extern SdioConfig g_sd_sdio_config_crash;
 #define SD_CONFIG g_sd_sdio_config
+#define SD_CONFIG_CRASH g_sd_sdio_config_crash
 
 #endif
 

+ 4 - 1
lib/AzulSCSI_platform_GD32F205/sd_card_sdio.cpp

@@ -44,7 +44,7 @@ bool SdioCard::begin(SdioConfig sdioConfig)
         && checkReturnOk(sd_card_select_deselect(g_sdio_card_rca))
         && checkReturnOk(sd_cardstatus_get(&g_sdio_card_status))
         && checkReturnOk(sd_bus_mode_config(SDIO_BUSMODE_4BIT))
-        && checkReturnOk(sd_transfer_mode_config(SD_DMA_MODE));
+        && checkReturnOk(sd_transfer_mode_config(sdioConfig.useDma() ? SD_DMA_MODE : SD_POLLING_MODE));
 }
 
 uint8_t SdioCard::errorCode() const
@@ -280,4 +280,7 @@ extern "C" void SDIO_IRQHandler(void)
 // SDIO configuration for main program
 SdioConfig g_sd_sdio_config(DMA_SDIO);
 
+// SDIO configuration in crash
+SdioConfig g_sd_sdio_config_crash(0);
+
 #endif