miniF1的SD卡问题(蓝 {MOD}为问题部分)

2019-08-30 09:46发布

今天学习SD卡,发现FATFS例程的代码:
//其他表参数的获得
//drv:磁盘编号0~9
//ctrl:控制代码
//*buff:发送/接收缓冲区指针
#if _USE_IOCTL
DRESULT disk_ioctl (
        BYTE pdrv,                /* Physical drive nmuber (0..) */
        BYTE cmd,                /* Control code */
        void *buff                /* Buffer to send/receive control data */
)
{
        DRESULT res;                                                                               
        if(pdrv==SD_CARD)//SD卡
        {
            switch(cmd)
            {
                    case CTRL_SYNC:
                                SD_CS=0;
                        if(SD_WaitReady()==0)res = RES_OK;
                        else res = RES_ERROR;          
                                SD_CS=1;
                        break;         
                    case GET_SECTOR_SIZE:
                        *(WORD*)buff = 512;
                        res = RES_OK;
                        break;         
                    case GET_BLOCK_SIZE:
                        *(WORD*)buff = 8;//SD卡的扇区不是一般512字节吗?为何此处设置擦出块大小为8?不应该设置为1?
                        res = RES_OK;
                        break;         
                    case GET_SECTOR_COUNT:
                        *(DWORD*)buff = SD_GetSectorCount();
                        res = RES_OK;
                        break;
                    default:
                        res = RES_PARERR;
                        break;
            }
        }else if(pdrv==EX_FLASH)        //外部FLASH  
        {
            switch(cmd)
            {
                    case CTRL_SYNC:
                                res = RES_OK;
                        break;         
                    case GET_SECTOR_SIZE:
                        *(WORD*)buff = FLASH_SECTOR_SIZE;
                        res = RES_OK;
                        break;         
                    case GET_BLOCK_SIZE:
                        *(WORD*)buff = FLASH_BLOCK_SIZE;
                        res = RES_OK;
                        break;         
                    case GET_SECTOR_COUNT:
                        *(DWORD*)buff = FLASH_SECTOR_COUNT;
                        res = RES_OK;
                        break;
                    default:
                        res = RES_PARERR;
                        break;
            }
        }else res=RES_ERROR;//其他的不支持
    return res;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。