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
     // SWO trace pin on PB3
     gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
     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))
     if (gpio_input_bit_get(DIP_PORT, DIPSW3_PIN))
     {
     {
         azlog("DIPSW3 is ON: Enabling SCSI termination");
         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
 // Initialize SPI and GPIO configuration
 void azplatform_init();
 void azplatform_init();
 
 
+// Initialization for main application, not used for bootloader
+void azplatform_late_init();
+
 // Setup soft watchdog
 // Setup soft watchdog
 void azplatform_reset_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;
     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
     \brief      get the detailed information of the SD card based on received CID and CSD
     \param[in]  none
     \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);
 uint32_t sd_card_capacity_get(void);
 /* get the detailed information of the SD card based on received CID and CSD */
 /* 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(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 */
 /* Get card information in raw format */
 void sd_cid_get(uint8_t *cid);
 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 sd_error_enum g_sdio_error = SD_OK;
 static int g_sdio_error_line = 0;
 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_card_status;
 static uint32_t g_sdio_clk_kHz;
 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__))
 #define checkReturnOk(call) ((g_sdio_error = (call)) == SD_OK ? true : logSDError(__LINE__))
 static bool logSDError(int line)
 static bool logSDError(int line)
@@ -39,8 +40,8 @@ bool SdioCard::begin(SdioConfig sdioConfig)
         return false;
         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_cardstatus_get(&g_sdio_card_status))
         && checkReturnOk(sd_bus_mode_config(SDIO_BUSMODE_4BIT))
         && checkReturnOk(sd_bus_mode_config(SDIO_BUSMODE_4BIT))
         && checkReturnOk(sd_transfer_mode_config(SD_DMA_MODE));
         && checkReturnOk(sd_transfer_mode_config(SD_DMA_MODE));
@@ -113,7 +114,9 @@ bool SdioCard::readStop()
 
 
 uint32_t SdioCard::sectorCount()
 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()
 uint32_t SdioCard::status()
@@ -163,9 +166,9 @@ bool SdioCard::syncDevice()
 
 
 uint8_t SdioCard::type() const
 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;
         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;
         return SD_CARD_TYPE_SD2;
     else
     else
         return SD_CARD_TYPE_SD1;
         return SD_CARD_TYPE_SD1;

+ 1 - 0
src/AzulSCSI.cpp

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