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;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-08-30 10:53
GET_SECTOR_SIZE,这才是扇区大小。这个是块大小。
Ian22L
2楼-- · 2019-08-30 13:15
 精彩回答 2  元偷偷看……
Ian22L
3楼-- · 2019-08-30 16:53
正点原子 发表于 2017-3-12 11:38
GET_SECTOR_SIZE,这才是扇区大小。这个是块大小。

那标准SD卡的块大小一般不是512吗?再说就是块大小,不应该比扇区更大?为何是8?还是说这是8块的意思?

一周热门 更多>