Browse Source

Fix V1.1 bootloader exceeding 32kB by optimizing a bit.

Petteri Aimonen 3 years ago
parent
commit
554cadd15e

+ 3 - 0
lib/AzulSCSI_platform_GD32F205/AzulSCSI_platform.cpp

@@ -169,7 +169,10 @@ void azplatform_init()
 
     // SWO trace pin on PB3
     gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
+}
 
+void azplatform_late_init()
+{
     if (gpio_input_bit_get(DIP_PORT, DIPSW3_PIN))
     {
         azlog("DIPSW3 is ON: Enabling SCSI termination");

+ 3 - 0
lib/AzulSCSI_platform_GD32F205/AzulSCSI_platform.h

@@ -52,6 +52,9 @@ static inline void delay_100ns()
 // Initialize SPI and GPIO configuration
 void azplatform_init();
 
+// Initialization for main application, not used for bootloader
+void azplatform_late_init();
+
 // Setup soft watchdog
 void azplatform_reset_watchdog();
 

+ 7 - 0
lib/AzulSCSI_platform_GD32F205/gd32_sdio_sdcard.c

@@ -1661,6 +1661,13 @@ uint32_t sd_card_capacity_get(void)
     return capacity;
 }
 
+sd_error_enum sd_card_information_get_short(sdio_card_type_enum *card_type, uint16_t *card_rca)
+{
+    *card_type = cardtype;
+    *card_rca = sd_rca;
+    return SD_OK;
+}
+
 /*!
     \brief      get the detailed information of the SD card based on received CID and CSD
     \param[in]  none

+ 1 - 0
lib/AzulSCSI_platform_GD32F205/gd32_sdio_sdcard.h

@@ -258,6 +258,7 @@ sd_transfer_state_enum sd_transfer_state_get(void);
 uint32_t sd_card_capacity_get(void);
 /* get the detailed information of the SD card based on received CID and CSD */
 sd_error_enum sd_card_information_get(sd_card_info_struct *pcardinfo);
+sd_error_enum sd_card_information_get_short(sdio_card_type_enum *card_type, uint16_t *card_rca);
 
 /* Get card information in raw format */
 void sd_cid_get(uint8_t *cid);

+ 9 - 6
lib/AzulSCSI_platform_GD32F205/sd_card_sdio.cpp

@@ -13,9 +13,10 @@
 
 static sd_error_enum g_sdio_error = SD_OK;
 static int g_sdio_error_line = 0;
-static sd_card_info_struct g_sdio_card_info;
 static uint32_t g_sdio_card_status;
 static uint32_t g_sdio_clk_kHz;
+static sdio_card_type_enum g_sdio_card_type;
+static uint16_t g_sdio_card_rca;
 
 #define checkReturnOk(call) ((g_sdio_error = (call)) == SD_OK ? true : logSDError(__LINE__))
 static bool logSDError(int line)
@@ -39,8 +40,8 @@ bool SdioCard::begin(SdioConfig sdioConfig)
         return false;
     }
 
-    return checkReturnOk(sd_card_information_get(&g_sdio_card_info))
-        && checkReturnOk(sd_card_select_deselect(g_sdio_card_info.card_rca))
+    return checkReturnOk(sd_card_information_get_short(&g_sdio_card_type, &g_sdio_card_rca))
+        && 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));
@@ -113,7 +114,9 @@ bool SdioCard::readStop()
 
 uint32_t SdioCard::sectorCount()
 {
-    return sdCardCapacity((csd_t*)&g_sdio_card_info.card_csd);
+    csd_t csd;
+    sd_csd_get((uint8_t*)&csd);
+    return sdCardCapacity(&csd);
 }
 
 uint32_t SdioCard::status()
@@ -163,9 +166,9 @@ bool SdioCard::syncDevice()
 
 uint8_t SdioCard::type() const
 {
-    if (g_sdio_card_info.card_type == SDIO_HIGH_CAPACITY_SD_CARD)
+    if (g_sdio_card_type == SDIO_HIGH_CAPACITY_SD_CARD)
         return SD_CARD_TYPE_SDHC;
-    else if (g_sdio_card_info.card_type == SDIO_STD_CAPACITY_SD_CARD_V2_0)
+    else if (g_sdio_card_type == SDIO_STD_CAPACITY_SD_CARD_V2_0)
         return SD_CARD_TYPE_SD2;
     else
         return SD_CARD_TYPE_SD1;

+ 1 - 0
src/AzulSCSI.cpp

@@ -366,6 +366,7 @@ static void reinitSCSI()
 extern "C" int azulscsi_main(void)
 {
   azplatform_init();
+  azplatform_late_init();
 
   if(!SD.begin(SD_CONFIG))
   {