Skip to content

Commit

Permalink
[FL-2654] Updater: retrying pre-boot SD card mount multiple times (#1…
Browse files Browse the repository at this point in the history
…402)

* Updater: retrying pre-boot SD card mount multiple times
* Updater: added delay before retrying SD card mount on early boot

Co-authored-by: あく <[email protected]>
  • Loading branch information
hedger and skotopes authored Jul 30, 2022
1 parent 712a48b commit 84550d5
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 11 deletions.
3 changes: 1 addition & 2 deletions applications/storage/storages/storage_ext.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ static FS_Error storage_ext_parse_error(SDError error);

static bool sd_mount_card(StorageData* storage, bool notify) {
bool result = false;
const uint8_t max_init_counts = 10;
uint8_t counter = max_init_counts;
uint8_t counter = BSP_SD_MaxMountRetryCount();
uint8_t bsp_result;
SDData* sd_data = storage->data;

Expand Down
23 changes: 17 additions & 6 deletions firmware/targets/f7/Src/update.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@ static FATFS* pfs = NULL;
} \
}

static bool flipper_update_mount_sd() {
for(int i = 0; i < BSP_SD_MaxMountRetryCount(); ++i) {
if(BSP_SD_Init((i % 2) == 0) != MSD_OK) {
/* Next attempt will be without card reset, let it settle */
furi_delay_ms(1000);
continue;
}

if(f_mount(pfs, "/", 1) == FR_OK) {
return true;
}
}
return false;
}

static bool flipper_update_init() {
furi_hal_clock_init();
furi_hal_rtc_init();
Expand All @@ -34,13 +49,9 @@ static bool flipper_update_init() {
return false;
}

if(BSP_SD_Init(true)) {
return false;
}

pfs = malloc(sizeof(FATFS));
CHECK_FRESULT(f_mount(pfs, "/", 1));
return true;

return flipper_update_mount_sd();
}

static bool flipper_update_load_stage(const string_t work_dir, UpdateManifest* manifest) {
Expand Down
4 changes: 4 additions & 0 deletions firmware/targets/f7/fatfs/stm32_adafruit_sd.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,10 @@ void SD_SPI_Bus_To_Normal_State() {
* @{
*/

uint8_t BSP_SD_MaxMountRetryCount() {
return 10;
}

/**
* @brief Initializes the SD/SD communication.
* @param None
Expand Down
1 change: 1 addition & 0 deletions firmware/targets/f7/fatfs/stm32_adafruit_sd.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ typedef struct {
/** @defgroup STM32_ADAFRUIT_SD_Exported_Functions
* @{
*/
uint8_t BSP_SD_MaxMountRetryCount();
uint8_t BSP_SD_Init(bool reset_card);
uint8_t
BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
Expand Down
6 changes: 3 additions & 3 deletions site_scons/site_tools/fbt_apps.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from SCons.Builder import Builder
from SCons.Action import Action
from SCons.Errors import UserError

from SCons.Warnings import warn, WarningOnByDefault
import SCons

from fbt.appmanifest import (
FlipperAppType,
AppManager,
Expand All @@ -22,7 +22,7 @@ def LoadApplicationManifests(env):
try:
appmgr.load_manifest(entry.File("application.fam").abspath, entry.name)
except FlipperManifestException as e:
raise UserError(e)
warn(WarningOnByDefault, str(e))


def PrepareApplicationsBuild(env):
Expand Down

0 comments on commit 84550d5

Please sign in to comment.