redirect sd card to eMMC

This commit is contained in:
Benjamin Wiegand 2024-06-16 20:30:22 -07:00
parent 9e1b2ee573
commit 2d2433031c
2 changed files with 15 additions and 110 deletions

View File

@ -35,42 +35,29 @@ static u16 sd_errors[3] = { 0 }; // Init and Read/Write errors.
static u32 sd_mode = SD_DEFAULT_SPEED; static u32 sd_mode = SD_DEFAULT_SPEED;
sdmmc_t sd_sdmmc;
sdmmc_storage_t sd_storage;
FATFS sd_fs;
void sd_error_count_increment(u8 type) void sd_error_count_increment(u8 type)
{ {
switch (type) emmc_error_count_increment(type);
{
case SD_ERROR_INIT_FAIL:
sd_errors[0]++;
break;
case SD_ERROR_RW_FAIL:
sd_errors[1]++;
break;
case SD_ERROR_RW_RETRY:
sd_errors[2]++;
break;
}
} }
u16 *sd_get_error_count() u16 *sd_get_error_count()
{ {
return sd_errors; return emmc_get_error_count();
} }
bool sd_get_card_removed() bool sd_get_card_removed()
{ {
if (insertion_event && !sdmmc_get_sd_inserted()) // if (insertion_event && !sdmmc_get_sd_inserted())
return true; // return true;
// you probably wouldn't want to remove the nand while the system is powered on anyways.
return false; return false;
} }
bool sd_get_card_initialized() bool sd_get_card_initialized()
{ {
return sd_init_done; // return sd_init_done;
return true;
} }
bool sd_get_card_mounted() bool sd_get_card_mounted()
@ -85,96 +72,12 @@ u32 sd_get_mode()
int sd_init_retry(bool power_cycle) int sd_init_retry(bool power_cycle)
{ {
u32 bus_width = SDMMC_BUS_WIDTH_4; return emmc_init_retry(power_cycle);
#ifndef BDK_SDMMC_UHS_DDR200_SUPPORT
u32 type = SDHCI_TIMING_UHS_SDR104;
#else
u32 type = SDHCI_TIMING_UHS_DDR200;
#endif
// Power cycle SD card.
if (power_cycle)
{
sd_mode--;
sdmmc_storage_end(&sd_storage);
}
// Get init parameters.
switch (sd_mode)
{
case SD_INIT_FAIL: // Reset to max.
return 0;
case SD_1BIT_HS25:
bus_width = SDMMC_BUS_WIDTH_1;
type = SDHCI_TIMING_SD_HS25;
break;
case SD_4BIT_HS25:
type = SDHCI_TIMING_SD_HS25;
break;
case SD_UHS_SDR82:
type = SDHCI_TIMING_UHS_SDR82;
break;
case SD_UHS_SDR104:
type = SDHCI_TIMING_UHS_SDR104;
break;
#ifdef BDK_SDMMC_UHS_DDR200_SUPPORT
case SD_UHS_DDR208:
type = SDHCI_TIMING_UHS_DDR200;
break;
#endif
default:
sd_mode = SD_DEFAULT_SPEED;
break;
}
int res = sdmmc_storage_init_sd(&sd_storage, &sd_sdmmc, bus_width, type);
if (res)
{
sd_init_done = true;
insertion_event = true;
}
else
sd_init_done = false;
return res;
} }
bool sd_initialize(bool power_cycle) bool sd_initialize(bool power_cycle)
{ {
if (power_cycle) return emmc_initialize(power_cycle);
sdmmc_storage_end(&sd_storage);
int res = !sd_init_retry(false);
while (true)
{
if (!res)
return true;
else if (!sdmmc_get_sd_inserted()) // SD Card is not inserted.
{
sd_mode = SD_DEFAULT_SPEED;
break;
}
else
{
sd_errors[SD_ERROR_INIT_FAIL]++;
if (sd_mode == SD_INIT_FAIL)
break;
else
res = !sd_init_retry(true);
}
}
sdmmc_storage_end(&sd_storage);
return false;
} }
bool sd_mount() bool sd_mount()
@ -239,7 +142,7 @@ static void _sd_deinit(bool deinit)
} }
void sd_unmount() { _sd_deinit(false); } void sd_unmount() { _sd_deinit(false); }
void sd_end() { _sd_deinit(true); } void sd_end() { emmc_end(); }
bool sd_is_gpt() bool sd_is_gpt()
{ {

View File

@ -21,6 +21,7 @@
#include <storage/sdmmc.h> #include <storage/sdmmc.h>
#include <storage/sdmmc_driver.h> #include <storage/sdmmc_driver.h>
#include <libs/fatfs/ff.h> #include <libs/fatfs/ff.h>
#include <storage/emmc.h>
#define SD_BLOCKSIZE SDMMC_DAT_BLOCKSIZE #define SD_BLOCKSIZE SDMMC_DAT_BLOCKSIZE
@ -44,9 +45,10 @@ enum
SD_ERROR_RW_RETRY = 2 SD_ERROR_RW_RETRY = 2
}; };
extern sdmmc_t sd_sdmmc; // redirect to emmc variables
extern sdmmc_storage_t sd_storage; #define sd_sdmmc emmc_sdmmc
extern FATFS sd_fs; #define sd_storage emmc_storage
#define sd_fs emmc_fs
void sd_error_count_increment(u8 type); void sd_error_count_increment(u8 type);
u16 *sd_get_error_count(); u16 *sd_get_error_count();