[FL-3224] SD Driver: do not cache sd status. (#2560)
* SD Driver: do not cache sd status. * SD Driver: fix status getter --------- Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									2a26680acb
								
							
						
					
					
						commit
						8a021ae48c
					
				| @ -2,16 +2,14 @@ | |||||||
| #include <furi_hal.h> | #include <furi_hal.h> | ||||||
| #include "sector_cache.h" | #include "sector_cache.h" | ||||||
| 
 | 
 | ||||||
| static volatile DSTATUS Stat = STA_NOINIT; |  | ||||||
| 
 |  | ||||||
| static DSTATUS driver_check_status(BYTE lun) { | static DSTATUS driver_check_status(BYTE lun) { | ||||||
|     UNUSED(lun); |     UNUSED(lun); | ||||||
|     Stat = STA_NOINIT; |     DSTATUS status = 0; | ||||||
|     if(sd_get_card_state() == SdSpiStatusOK) { |     if(sd_get_card_state() != SdSpiStatusOK) { | ||||||
|         Stat &= ~STA_NOINIT; |         status = STA_NOINIT; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return Stat; |     return status; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static DSTATUS driver_initialize(BYTE pdrv); | static DSTATUS driver_initialize(BYTE pdrv); | ||||||
| @ -107,6 +105,16 @@ static bool sd_device_write(uint32_t* buff, uint32_t sector, uint32_t count) { | |||||||
|   * @retval DSTATUS: Operation status |   * @retval DSTATUS: Operation status | ||||||
|   */ |   */ | ||||||
| static DSTATUS driver_initialize(BYTE pdrv) { | static DSTATUS driver_initialize(BYTE pdrv) { | ||||||
|  |     UNUSED(pdrv); | ||||||
|  |     return RES_OK; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Gets Disk Status  | ||||||
|  |   * @param  pdrv: Physical drive number (0..) | ||||||
|  |   * @retval DSTATUS: Operation status | ||||||
|  |   */ | ||||||
|  | static DSTATUS driver_status(BYTE pdrv) { | ||||||
|     furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); |     furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); | ||||||
|     furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; |     furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; | ||||||
| 
 | 
 | ||||||
| @ -118,16 +126,6 @@ static DSTATUS driver_initialize(BYTE pdrv) { | |||||||
|     return status; |     return status; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 |  | ||||||
|   * @brief  Gets Disk Status  |  | ||||||
|   * @param  pdrv: Physical drive number (0..) |  | ||||||
|   * @retval DSTATUS: Operation status |  | ||||||
|   */ |  | ||||||
| static DSTATUS driver_status(BYTE pdrv) { |  | ||||||
|     UNUSED(pdrv); |  | ||||||
|     return Stat; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /**
 | /**
 | ||||||
|   * @brief  Reads Sector(s)  |   * @brief  Reads Sector(s)  | ||||||
|   * @param  pdrv: Physical drive number (0..) |   * @param  pdrv: Physical drive number (0..) | ||||||
| @ -224,15 +222,15 @@ static DRESULT driver_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT coun | |||||||
|   * @retval DRESULT: Operation result |   * @retval DRESULT: Operation result | ||||||
|   */ |   */ | ||||||
| static DRESULT driver_ioctl(BYTE pdrv, BYTE cmd, void* buff) { | static DRESULT driver_ioctl(BYTE pdrv, BYTE cmd, void* buff) { | ||||||
|     UNUSED(pdrv); |  | ||||||
|     DRESULT res = RES_ERROR; |     DRESULT res = RES_ERROR; | ||||||
|     SD_CardInfo CardInfo; |     SD_CardInfo CardInfo; | ||||||
| 
 | 
 | ||||||
|     if(Stat & STA_NOINIT) return RES_NOTRDY; |  | ||||||
| 
 |  | ||||||
|     furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); |     furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); | ||||||
|     furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; |     furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; | ||||||
| 
 | 
 | ||||||
|  |     DSTATUS status = driver_check_status(pdrv); | ||||||
|  |     if(status & STA_NOINIT) return RES_NOTRDY; | ||||||
|  | 
 | ||||||
|     switch(cmd) { |     switch(cmd) { | ||||||
|     /* Make sure that no pending write process */ |     /* Make sure that no pending write process */ | ||||||
|     case CTRL_SYNC: |     case CTRL_SYNC: | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sergey Gavrilov
						Sergey Gavrilov