OpenEdv-开源电子网

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

SD卡响应指令CRC检验是必需的吗

[复制链接]

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2019-8-4
在线时间
187 小时
发表于 2019-12-9 10:54:46 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 taomao 于 2019-12-9 11:26 编辑

SD_Error CmdResp1Error(u8 cmd)
{         
           u32 status;
        while(1)
        {
                status=SDIO->STA;
                if(status&((1<<0)|(1<<2)|(1<<6)))break;//CRC错误/命令响应超时/已经收到响应(CRC校验成功)
        }
        if(SDIO_GetFlagStatus(SDIO_FLAG_CTIMEOUT) != RESET)                //04,        响应超时
        {                                                                                                                                                                    
                 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);                                 //清除命令响应超时标志
                return SD_CMD_RSP_TIMEOUT;//3
        }        
         if(SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL) != RESET)                //01,        CRC错误,所有的响应格式都需要判断CRC吗
        {                                                                                                                                                                    
                 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);                                 //清除标志
                return SD_CMD_CRC_FAIL;
        }
        
        if(SDIO->RESPCMD!=cmd)return SD_ILLEGAL_CMD;//16,命令不匹配
          SDIO->ICR=0X5FF;                                         //清除标记
        return (SD_Error)(SDIO->RESP1&SD_OCR_ERRORBITS);//返回卡响应
}
//检查R3响应的错误状态
//返回值:错误状态
SD_Error CmdResp3Error(void)
{
        u32 status;                                                
         while(1)
        {
                status=SDIO->STA;
                if(status&((1<<0)|(1<<2)|(1<<6)))break;//CRC错误/命令响应超时/已经收到响应(CRC校验成功)        
        }
         if(SDIO_GetFlagStatus(SDIO_FLAG_CTIMEOUT) != RESET)                                        //响应超时
        {                                                                                         
                SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);                        //清除命令响应超时标志
                return SD_CMD_RSP_TIMEOUT;
        }         
   SDIO_ClearFlag(SDIO_STATIC_FLAGS);//清除所有标记
         return SD_OK;                                                  
}2.这些定义对应的卡类型是什么
#define SDIO_STD_CAPACITY_SD_CARD_V1_1             ((u32)0x00000000)
#define SDIO_STD_CAPACITY_SD_CARD_V2_0             ((u32)0x00000001)
#define SDIO_HIGH_CAPACITY_SD_CARD                 ((u32)0x00000002)
#define SDIO_MULTIMEDIA_CARD                       ((u32)0x00000003)
#define SDIO_SECURE_DIGITAL_IO_CARD                ((u32)0x00000004)
#define SDIO_HIGH_SPEED_MULTIMEDIA_CARD            ((u32)0x00000005)
#define SDIO_SECURE_DIGITAL_IO_COMBO_CARD          ((u32)0x00000006)
#define SDIO_HIGH_CAPACITY_MMC_CARD                ((u32)0x00000007)



最佳答案

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

CCRCFAIL是看看有没有接收到命令响应的,这个是必须的,至于定义的卡的类型,SD卡是有区别的,比如说大容量的,多媒体的,后面的地址是定义的,到时判断的话,可以根据后面的数值判断
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3625
金钱
3625
注册时间
2019-8-14
在线时间
1054 小时
发表于 2019-12-9 10:54:47 | 显示全部楼层
CCRCFAIL是看看有没有接收到命令响应的,这个是必须的,至于定义的卡的类型,SD卡是有区别的,比如说大容量的,多媒体的,后面的地址是定义的,到时判断的话,可以根据后面的数值判断
回复

使用道具 举报

40

主题

137

帖子

0

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2019-8-4
在线时间
187 小时
 楼主| 发表于 2019-12-9 15:58:36 | 显示全部楼层
本帖最后由 taomao 于 2019-12-9 16:32 编辑
hou18 发表于 2019-12-9 15:38
CCRCFAIL是看看有没有接收到命令响应的,这个是必须的,至于定义的卡的类型,SD卡是有区别的,比如说大容量 ...

那为什么R1判断了CRC,R3没有,只判断了是否超时
SDIO_MULTIMEDIA_CARD                这个我知道是中等容量卡的意思,那下面两个是什么意思,好像不能通过初始化判断出来吧
SDIO_SECURE_DIGITAL_IO_CARD
SDIO_SECURE_DIGITAL_IO_COMBO_CARD  
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-9 18:35:56 | 显示全部楼层
帮顶                                             
成功没有捷径
回复

使用道具 举报

15

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2019-12-17
在线时间
76 小时
发表于 2020-3-26 09:54:31 | 显示全部楼层
sd卡上电后默认是SDIO模式,好像得发校验位,SPI模式下不用管
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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