From f6e9ed6ab3b3eb61f17e303f6a6c70774f047aa8 Mon Sep 17 00:00:00 2001 From: "sober.song" Date: Fri, 29 Dec 2023 00:29:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=88=E5=B9=B6=E5=BF=AB?= =?UTF-8?q?=E8=B5=B7=E6=AD=BB=E6=9C=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../init.d/S10_SysInit2 | 4 +- .../cardv/SrcCode/System/SF_SysStrgMng.c | 158 ++++++++++-------- .../cardv/SrcCode/System/SF_SysStrgMng.h | 7 +- .../source/cardv/SrcCode/System/SysStrg_CB.c | 1 + .../source/cardv/SrcCode/System/SysStrg_Exe.c | 14 +- .../source/cardv/SrcCode/System/main.c | 3 +- .../SrcCode/UIApp/Photo/UIAppPhoto_Exe.c | 10 +- .../SrcCode/UIApp/Photo/UIStorageCheck.c | 38 +++-- .../UIFlowPhoto/UIFlowPhotoEventCallback.c | 8 - .../driver/na51089/source/mcu/sf_sd_common.c | 8 +- 10 files changed, 151 insertions(+), 100 deletions(-) diff --git a/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S550/init.d/S10_SysInit2 b/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S550/init.d/S10_SysInit2 index ee4d6119c..6ca4560e6 100755 --- a/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S550/init.d/S10_SysInit2 +++ b/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S550/init.d/S10_SysInit2 @@ -201,6 +201,8 @@ ${PREFIX}/lib/modules/$KERVER/hdal/kdrv_videoout/fbdev/nvt_fb.ko #insmod ${PREFIX}/lib/modules/$KERVER/hdal/comm/usb2dev/nvt_usb2dev.ko #fi +mount /dev/mmcblk1p1 /mnt/sd2 + if [ -f /usr/bin/isp_demon ]; then /usr/bin/isp_demon else @@ -234,4 +236,4 @@ insmod_if_exist ${PREFIX}/lib/modules/$KERVER/hdal/kflow_audiodec/unit/kflow_aud #insmod /etc/lib/modules/$KERVER/extra/fs/exfat/exfat.ko -#fi \ No newline at end of file +#fi diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c index 208aee78c..50269dace 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c @@ -17,7 +17,7 @@ #include "SF_SysStrgMng.h" #include #include -#include +#include typedef struct { @@ -26,22 +26,42 @@ typedef struct int mounted_status; }STRG_CB_PARAM; + +SF_THREAD_S MMCMonitorTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; + + SF_ST_MMC_DEV *sf_mmc_dev[MMC_DEV_MAX_NUM] = {NULL}; +SF_ST_MMC_DEV *pMMCDev = NULL; + +void SF_SetMMCDev(SF_ST_MMC_DEV *pDev) +{ + pMMCDev = pDev; +} + +SF_ST_MMC_DEV *SF_GetMMCDev(void) +{ + return pMMCDev; +} + void SF_StrgInit(void) { for(int i = 0; i < MMC_DEV_MAX_NUM; i++) { sf_mmc_dev[i] = (SF_ST_MMC_DEV *)malloc(sizeof(SF_ST_MMC_DEV)); if(sf_mmc_dev[i] == NULL) { - // 处理内存分配失败的情况 + MLOGD("SF_StrgInit Failed, id = %d\n", i); } sf_mmc_dev[i]->dcf_handle = -1; sf_mmc_dev[i]->dev_type = MMC_DEV_NO; - sf_mmc_dev[i]->node = MMC_DEV_NODE_STATE_NO; - sf_mmc_dev[i]->moumted_state = MMC_DEV_MOUNT_STATE_NO; - sf_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_NO; - sf_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_NO; + sf_mmc_dev[i]->node = MMC_DEV_NODE_STATE_NO_EXIST; + sf_mmc_dev[i]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; + sf_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_ENOUGH; + sf_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_OFF; } } @@ -62,32 +82,33 @@ void SF_StrgSetDcfHandle(UINT32 strg_id, UINT32 handle) } static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev) -{ - UINT64 diskFree = 0; +{ + UINT64 diskFree = 0; UINT32 ret = 0; - - /*check disk free size*/ - if(mmc_dev == MMC_DEV_SD) - { - diskFree = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE); - } - else - { + + return 0; + /*check disk free size*/ + if(mmc_dev == MMC_DEV_SD) + { + diskFree = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE); + } + else + { diskFree = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE); - } - - diskFree = diskFree/1024/1024; - - if(diskFree < 30) /* 30MB */ - { + } + + diskFree = diskFree/1024/1024; + + if(diskFree < 30) /* 30MB */ + { ret = 1; - } - else - { + } + else + { ret = 0; } - MLOGD("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree); - return ret; + //MLOGD("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree); + return ret; } static int SF_StrgNodeCheck(const char *devName) @@ -175,9 +196,9 @@ void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf) for(int i = 0; i < 2; i++) { - MLOGD("node:%d, mount:%d, space:%d, loop:%d\n", + MLOGD("node:%d, mount:%d, loop:%d\n", sf_mmc_dev[i]->node, sf_mmc_dev[i]->moumted_state, - sf_mmc_dev[i]->space_state, sf_mmc_dev[i]->loop_state); + sf_mmc_dev[i]->loop_state); } } @@ -185,27 +206,6 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) { MMC_DEV_TYPE workable_dev = MMC_DEV_NO; //MLOGD("sf mmc check workable dev start!!!\n"); - - UINT32 isfull = 0; - isfull = SF_StrgSpaceCheckFull(MMC_DEV_EMMC); - if(isfull == 1) - { - sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH; - } - else if(isfull == 0) - { - sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH; - } - - isfull = SF_StrgSpaceCheckFull(MMC_DEV_SD); - if(isfull == 1) - { - sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH; - } - else if(isfull == 0) - { - sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH; - } if((sf_mmc_dev[MMC_DEV_SD]->node == MMC_DEV_NODE_STATE_NO_EXIST) && (sf_mmc_dev[MMC_DEV_EMMC]->node == MMC_DEV_NODE_STATE_NO_EXIST)) @@ -216,11 +216,11 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) { if(sf_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_MOUNTED) { - if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + if(!SF_StrgSpaceCheckFull(MMC_DEV_SD)) { workable_dev = MMC_DEV_SD; } - else if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH) + else { if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON) { @@ -233,11 +233,11 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) { if(sf_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_MOUNTED) { - if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + if(!SF_StrgSpaceCheckFull(MMC_DEV_EMMC)) { workable_dev = MMC_DEV_EMMC; } - else if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH) + else { if(sf_mmc_dev[MMC_DEV_EMMC]->loop_state == MMC_DEV_LOOP_STATE_ON) { @@ -255,7 +255,7 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) } else if(sf_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) { - if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + if(!SF_StrgSpaceCheckFull(MMC_DEV_EMMC)) { workable_dev = MMC_DEV_EMMC; } @@ -269,7 +269,7 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) } else if(sf_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) { - if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + if(!SF_StrgSpaceCheckFull(MMC_DEV_SD)) { workable_dev = MMC_DEV_SD; } @@ -283,16 +283,16 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) } else { - if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH && - sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + if(!SF_StrgSpaceCheckFull(MMC_DEV_SD) && + !SF_StrgSpaceCheckFull(MMC_DEV_EMMC)) { workable_dev = MMC_DEV_EMMC; } - else if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + else if(!SF_StrgSpaceCheckFull(MMC_DEV_EMMC)) { workable_dev = MMC_DEV_EMMC; } - else if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) + else if(!SF_StrgSpaceCheckFull(MMC_DEV_SD)) { workable_dev = MMC_DEV_SD; } @@ -306,21 +306,41 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) } } - //MLOGD("sf mmc check workable dev end, dev_id = %d!!!\n", workable_dev); for(int i = 0; i < 2; i++) { sf_mmc_dev[i]->dev_type = workable_dev; - //MLOGD("node:%d, mount:%d, space:%d, loop:%d\n", - //sf_mmc_dev[i]->node, sf_mmc_dev[i]->moumted_state, - //sf_mmc_dev[i]->space_state, sf_mmc_dev[i]->loop_state); } if(workable_dev == MMC_DEV_NO) - { - return NULL; - } - else - { + { + return NULL; + } + else + { return sf_mmc_dev[workable_dev]; } } + +static void* mmc_monitoring_thread(void *arg) +{ + while(MMCMonitorTskCfg.IsRun) + { +#if USE_MMC_DEV_CHECK + SF_SetMMCDev(SF_StrgCheckWorkableDev()); +#endif + sf_sleep_ms(500); + } + return NULL; +} + +int sf_mmc_dev_check_start(void) +{ + int ret = pthread_create(&MMCMonitorTskCfg.TskId, NULL, mmc_monitoring_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread sf_mmc_monitoring_start creat fail!\n"); + return ret; + } + return 0; +} + diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h index 421608c42..3f41d8abe 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h @@ -32,7 +32,7 @@ #define EMMC_DEVICE_NAME "/dev/mmcblk1p1" #define EMMC_MOUNT_ROOT "/mnt/sd2" -#define USE_MMC_DEV_CHECK (0) +#define USE_MMC_DEV_CHECK (1) typedef enum { @@ -79,12 +79,15 @@ typedef struct int dcf_handle; }SF_ST_MMC_DEV; - void SF_StrgInit(void); void SF_StrgUnInit(void); void SF_StrgSetDcfHandle(UINT32 strg_id, UINT32 handle); void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf); SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void); +void SF_SetMMCDev(SF_ST_MMC_DEV *pDev); +SF_ST_MMC_DEV *SF_GetMMCDev(void); +int sf_mmc_dev_check_start(void); + diff --git a/code/application/source/cardv/SrcCode/System/SysStrg_CB.c b/code/application/source/cardv/SrcCode/System/SysStrg_CB.c index afe371082..afa884a29 100755 --- a/code/application/source/cardv/SrcCode/System/SysStrg_CB.c +++ b/code/application/source/cardv/SrcCode/System/SysStrg_CB.c @@ -180,6 +180,7 @@ void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2) printf("strg_cb send MOUNT! dev_id = %d\n", param1); #if USE_MMC_DEV_CHECK SF_StrgRegister(&stMessageBuf); +#endif } #endif diff --git a/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c b/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c index 365ff6862..86478ac7a 100644 --- a/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c @@ -763,11 +763,16 @@ DCF_HANDLE System_Get_DCF_Handle(void) { #if USE_MMC_DEV_CHECK SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev(); - if(mmc_dev->dcf_handle < 0) + if(mmc_dev == NULL) { DBG_ERR("No MMC_Dev Can use!\n"); return -1; } + if(mmc_dev->dcf_handle < 0) + { + DBG_ERR("dcf_handle err!\n"); + return -1; + } DBG_WRN("DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle); return mmc_dev->dcf_handle; #else @@ -1222,6 +1227,13 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) stMessageBuf.cmdId = CMD_SD; sf_com_message_send_to_app(&stMessageBuf); #if USE_MMC_DEV_CHECK + + if(strg_id == 1) + { + printf("emmc mounted failed, remount\n"); + system("mount /dev/mmcblk1p1 /mnt/sd2"); + stMessageBuf.arg1 = CMD_SD_STRG_CB_MOUNT_FINISH; + } SF_StrgRegister(&stMessageBuf); #endif printf("System_OnStrgAttach send UNMOUNT! dev_id = %d\n", strg_id); diff --git a/code/application/source/cardv/SrcCode/System/main.c b/code/application/source/cardv/SrcCode/System/main.c index 9f5b759ad..dc35fae74 100755 --- a/code/application/source/cardv/SrcCode/System/main.c +++ b/code/application/source/cardv/SrcCode/System/main.c @@ -20,6 +20,7 @@ #include "sf_log.h" #endif +#include "SF_SysStrgMng.h" /////////////////////////////////////////////////////////////////////////////// @@ -476,7 +477,7 @@ int NvtMain(void) #endif sf_sd_exist_reg_cb(DrvCARD_DetStrgCard); - + sf_mmc_dev_check_start(); #endif System_WaitForPowerOffStart(); // Wait for shutdown cmd diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c index 5e5a5a230..cb5d6bc84 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -702,11 +702,17 @@ UINT32 PhotoExe_GetFreePicNum(void) #if USE_MMC_DEV_CHECK SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev(); - if(mmc_dev->dcf_handle < 0) + if(mmc_dev == NULL) { DBG_ERR("No MMC_Dev Can use!\n"); - return FALSE; + return 0; } + if(mmc_dev->dcf_handle < 0) + { + DBG_ERR("dcf_handle err!\n"); + return 0; + } + #endif #if (FILESIZE_ALIGN_FUNC) diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c index 4e304eb62..97c8e4dfb 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c @@ -39,6 +39,7 @@ #include #include "SF_SysStrgMng.h" +SF_ST_MMC_DEV *mmc_dev = NULL; void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain) { @@ -60,12 +61,17 @@ static BOOL check_CurrDir_writable(void) { #if USE_MMC_DEV_CHECK - SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev(); - if(mmc_dev->dcf_handle < 0) + if(mmc_dev == NULL) { DBG_ERR("No MMC_Dev Can use!\n"); return FALSE; } + if(mmc_dev->dcf_handle < 0) + { + DBG_ERR("dcf_handle err!\n"); + return FALSE; + } + #endif UINT32 useFileDB = 0; useFileDB = UI_GetData(FL_IsUseFileDB); @@ -109,12 +115,17 @@ BOOL UIStorageCheck_DCIMWritable(void) { #if USE_MMC_DEV_CHECK - SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev(); - if(mmc_dev->dcf_handle < 0) + if(mmc_dev == NULL) { DBG_ERR("No MMC_Dev Can use!\n"); return FALSE; } + if(mmc_dev->dcf_handle < 0) + { + DBG_ERR("dcf_handle err!\n"); + return FALSE; + } + #endif UINT32 useFileDB = 0; useFileDB = UI_GetData(FL_IsUseFileDB); @@ -243,20 +254,23 @@ static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id) BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) { -#if USE_MMC_DEV_CHECK + UINT32 useFileDB = 0; + useFileDB = UI_GetData(FL_IsUseFileDB); - SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev(); - if(mmc_dev->dcf_handle < 0) + mmc_dev = SF_GetMMCDev(); + DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem); +#if USE_MMC_DEV_CHECK + if(mmc_dev == NULL) { DBG_ERR("No MMC_Dev Can use!\n"); return FALSE; } + if(mmc_dev->dcf_handle < 0) + { + DBG_ERR("dcf_handle err!\n"); + return FALSE; + } #endif - UINT32 useFileDB = 0; - useFileDB = UI_GetData(FL_IsUseFileDB); - - DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem); - switch (uiCheckItem) { case STORAGE_CHECK_FOLDER_FULL: if (useFileDB) { diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c index b5220dd39..ca82cb57e 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c @@ -673,14 +673,6 @@ static void update_camera_message(void) { UIMenuStoreInfo *puiPara = sf_ui_para_get(); // if((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO)) -#if USE_MMC_DEV_CHECK - - SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev(); - if(mmc_dev->dcf_handle < 0) - { - DBG_ERR("No MMC_Dev Can use!\n"); - } -#endif switch (puiPara->ImgSize) { case PHOTO_SIZE_40M: diff --git a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c index 7fdd216b6..d6cd8ccae 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c +++ b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c @@ -122,10 +122,10 @@ void SF_RtosStrgInit(void) // 处理内存分配失败的情况 } sf_rtos_mmc_dev[i]->dcf_handle = -1; - sf_rtos_mmc_dev[i]->dev_type = MMC_DEV_NO; + sf_rtos_mmc_dev[i]->dev_type = MMC_DEV_EMMC; //sf_rtos_mmc_dev[i]->node = MMC_DEV_NODE_STATE_NO; - sf_rtos_mmc_dev[i]->moumted_state = MMC_DEV_MOUNT_STATE_NO; - sf_rtos_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_NO; + sf_rtos_mmc_dev[i]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; + sf_rtos_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_ENOUGH; //sf_rtos_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_NO; } DBG_WRN("SF_RtosStrgInit!\n"); @@ -302,7 +302,7 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void) } if(workable_dev == MMC_DEV_NO) { - return NULL; + return sf_rtos_mmc_dev[MMC_DEV_EMMC]; } else {