OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2811|回复: 3

miniF1的SD卡问题(蓝色为问题部分)

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-8-26
在线时间
9 小时
发表于 2017-3-12 11:38:39 | 显示全部楼层 |阅读模式
1金钱
今天学习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;
}

最佳答案

查看完整内容[请看2#楼]

GET_SECTOR_SIZE,这才是扇区大小。这个是块大小。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-12 11:38:40 | 显示全部楼层
GET_SECTOR_SIZE,这才是扇区大小。这个是块大小。
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-8-26
在线时间
9 小时
 楼主| 发表于 2017-3-13 09:25:57 | 显示全部楼层
那标准SD卡的块大小一般不是512吗?再说就是块大小,不应该比扇区更大?为何是8?还是说这是8块的意思?
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-8-26
在线时间
9 小时
 楼主| 发表于 2017-3-13 09:26:32 | 显示全部楼层
正点原子 发表于 2017-3-12 11:38
GET_SECTOR_SIZE,这才是扇区大小。这个是块大小。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-14 02:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表