[FL-2654] Updater: retrying pre-boot SD card mount multiple times (#1402)
* Updater: retrying pre-boot SD card mount multiple times * Updater: added delay before retrying SD card mount on early boot Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									712a48b5db
								
							
						
					
					
						commit
						84550d5878
					
				| @ -26,8 +26,7 @@ static FS_Error storage_ext_parse_error(SDError error); | |||||||
| 
 | 
 | ||||||
| static bool sd_mount_card(StorageData* storage, bool notify) { | static bool sd_mount_card(StorageData* storage, bool notify) { | ||||||
|     bool result = false; |     bool result = false; | ||||||
|     const uint8_t max_init_counts = 10; |     uint8_t counter = BSP_SD_MaxMountRetryCount(); | ||||||
|     uint8_t counter = max_init_counts; |  | ||||||
|     uint8_t bsp_result; |     uint8_t bsp_result; | ||||||
|     SDData* sd_data = storage->data; |     SDData* sd_data = storage->data; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -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() { | static bool flipper_update_init() { | ||||||
|     furi_hal_clock_init(); |     furi_hal_clock_init(); | ||||||
|     furi_hal_rtc_init(); |     furi_hal_rtc_init(); | ||||||
| @ -34,13 +49,9 @@ static bool flipper_update_init() { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(BSP_SD_Init(true)) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     pfs = malloc(sizeof(FATFS)); |     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) { | static bool flipper_update_load_stage(const string_t work_dir, UpdateManifest* manifest) { | ||||||
|  | |||||||
| @ -331,6 +331,10 @@ void SD_SPI_Bus_To_Normal_State() { | |||||||
|   * @{ |   * @{ | ||||||
|   */ |   */ | ||||||
| 
 | 
 | ||||||
|  | uint8_t BSP_SD_MaxMountRetryCount() { | ||||||
|  |     return 10; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|   * @brief  Initializes the SD/SD communication. |   * @brief  Initializes the SD/SD communication. | ||||||
|   * @param  None |   * @param  None | ||||||
|  | |||||||
| @ -198,6 +198,7 @@ typedef struct { | |||||||
| /** @defgroup STM32_ADAFRUIT_SD_Exported_Functions
 | /** @defgroup STM32_ADAFRUIT_SD_Exported_Functions
 | ||||||
|   * @{ |   * @{ | ||||||
|   */ |   */ | ||||||
|  | uint8_t BSP_SD_MaxMountRetryCount(); | ||||||
| uint8_t BSP_SD_Init(bool reset_card); | uint8_t BSP_SD_Init(bool reset_card); | ||||||
| uint8_t | uint8_t | ||||||
|     BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); |     BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| from SCons.Builder import Builder | from SCons.Builder import Builder | ||||||
| from SCons.Action import Action | from SCons.Action import Action | ||||||
| from SCons.Errors import UserError | from SCons.Warnings import warn, WarningOnByDefault | ||||||
| 
 |  | ||||||
| import SCons | import SCons | ||||||
|  | 
 | ||||||
| from fbt.appmanifest import ( | from fbt.appmanifest import ( | ||||||
|     FlipperAppType, |     FlipperAppType, | ||||||
|     AppManager, |     AppManager, | ||||||
| @ -22,7 +22,7 @@ def LoadApplicationManifests(env): | |||||||
|             try: |             try: | ||||||
|                 appmgr.load_manifest(entry.File("application.fam").abspath, entry.name) |                 appmgr.load_manifest(entry.File("application.fam").abspath, entry.name) | ||||||
|             except FlipperManifestException as e: |             except FlipperManifestException as e: | ||||||
|                 raise UserError(e) |                 warn(WarningOnByDefault, str(e)) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def PrepareApplicationsBuild(env): | def PrepareApplicationsBuild(env): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 hedger
						hedger