[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…
Reference in New Issue
Block a user