http://blog.163.com/dreamatic_altezza/blog/static/119304542013112932216498/

大家在使用stm32 sdio口初始化sd卡的时候会遇到一个国内文章中都没有提到的问题
首先我来说说初始化sdhc卡(sdsc卡acmd41参数为0x00ff8000)的流程:
cmd0 无参数 返回0x00 0x00
cmd8 参数0x1aa 返回0x8 0x1aa
cmd55 无参数 返回0x37 0x120
acmd41 参数0x40ff8000 返回0x3f 0x40ff8000
cmd55 无参数 返回0x37 0x120
acmd41 参数0x40ff8000 返回0x3f 0xc0ff8000 (sd卡OCR bit[31] busy位置1 卡进入ready status)
但在实际使用stm32的过程中,我们会遇到发送完第一个acmd41后,返回就一直是0x3f 0x40ff8000。即使是再发送cmd55也是0x3f 0x40ff8000。这不是sd卡不响应,而是stm32的sdio监测到crc错误,不再发送命令了。
这是由于sd规范中,Acmd41返回的crc永远是11111,也就是应该忽略crc,但是Stm32的sdio却检查了crc,就出错了。
为了使crc错误后的sdio恢复正常我们可以使用sdio库函数来清除crc标志位,代码如下:
SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
SDIO_ClearITPendingBit(SDIO_IT_CCRCFAIL);
以下是我写的cmd55+acmd41循环:
测试用的,请勿就纠结代码的效率。
希望能够被sd初始化困扰的朋友带来曙光!
for(k=0;k<800;k++)
{
SDIO_CmdInitStructure.SDIO_Argument = 0x00;
SDIO_CmdInitStructure.SDIO_CmdIndex = 0x37;
SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
SDIO_SendCommand(&SDIO_CmdInitStructure);
for(i=0;i<2000;i++)//发送完命令需要延时才能获取sd卡的反馈
{
}   
d5=SDIO_GetCommandResponse();//等待返回 返回是63
d1=SDIO_GetResponse(SDIO_RESP1);//16gb卡返回0x40200000;16gb卡返回0x00ff8000
d2=SDIO_GetResponse(SDIO_RESP2);
d3=SDIO_GetResponse(SDIO_RESP3);
d4=SDIO_GetResponse(SDIO_RESP4);  
d3=SDIO_GetITStatus(SDIO_IT_CCRCFAIL );
d4=SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL);
SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
SDIO_ClearITPendingBit(SDIO_IT_CCRCFAIL);
d3=SDIO_GetITStatus(SDIO_IT_CCRCFAIL );
d4=SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL);
//  
SDIO_CmdInitStructure.SDIO_Argument = 0x40ff8000;//16gb卡用0x40000000;2gb用0x00000000
SDIO_CmdInitStructure.SDIO_CmdIndex = 0x29;
SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
SDIO_SendCommand(&SDIO_CmdInitStructure);
for(i=0;i<2000;i++)//发送完命令需要延时才能获取sd卡的反馈
{
}
d5=SDIO_GetCommandResponse();//等待返回 返回是63
d1=SDIO_GetResponse(SDIO_RESP1);//16gb卡返回0x40ff8000;16gb卡返回0x00ff8000
d2=SDIO_GetResponse(SDIO_RESP2);
d3=SDIO_GetResponse(SDIO_RESP3);
d4=SDIO_GetResponse(SDIO_RESP4);
for(i=0;i<5000;i++)//发送完命令需要延时才能获取sd卡的反馈
{
}
d3=SDIO_GetITStatus(SDIO_IT_CCRCFAIL );
d4=SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL);
SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
SDIO_ClearITPendingBit(SDIO_IT_CCRCFAIL);
d3=SDIO_GetITStatus(SDIO_IT_CCRCFAIL );
d4=SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL);
}

stm32 sdio acmd41 无响应。一直是返回0x3f。解决方法是清除crc错误中断相关推荐

  1. Android点击无响应,Android Studio无响应打不开的解决办法

    最近谷歌发布了Android Studio,下载安装之后,在使用时发现一个问题,那就是发布无响应且无法启动,也就是点击Android图标的时候没有任务反应,我想说的是你需要重新配置一下环境~ 因为这个 ...

  2. 龙邱STM32单片机用J-LINK下载无法被识别的解决方法

    龙邱STM32单片机用J-LINK下载无法被识别的解决方法 参考文章: (1)龙邱STM32单片机用J-LINK下载无法被识别的解决方法 (2)https://www.cnblogs.com/Arag ...

  3. scp连接linux网络错误,winscp连接linux(centos7)时提示主机超过15秒无通信,继续等待的解决方法...

    1. 前言 本文主要讲解winscp连接linux(centos7)时提示主机超过15秒无通信,继续等待的解决方法 2. winscp报错界面 winscp报错界面如下: 解决方法如下: 3. 确保网 ...

  4. 织梦DEDECMS QQ一键登录插件返回空白解决方法

    修改织梦网站时,遇到个QQ一键登录返回是空白的问题 找了好久没发现什么原因,最后才知道原因在于服务器, 因为腾讯OAuth2.0采用的是https协议进行数据请求,QQ一键登录插件采用curl拓展对数 ...

  5. Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法

    Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法 tomcat日志 localhost.1949-09-15.log 报错信息 1949-09-15 9:13:34 org. ...

  6. 电脑服务器停止响应已经恢复,Win7系统提示“显示器驱动已停止响应并且已恢复”的解决方法...

    最近好多小伙伴说Win7 64位系统提示"显示器驱动已停止响应并且已恢复"的问题,怎么回事呢?在开启"玻璃效果"和"启用桌面组合"效果的时候 ...

  7. win10打开程序响应很慢_Win10显示器驱动程序停止响应后又恢复了解决方法

    [文章导读]当你使用win10系统的时候会不会出现"显示器驱动程序停止响应后并且已恢复"的提示窗口?那你知道遇到这种情况应该怎么解决吗?现在小编就教大家详细的操作方法,希望可以帮助 ...

  8. 显示器驱动程序 NVIDIA Windows Kernel Mode Driver Version 已停止响应 并且己成功恢复 解决方法

    显示器驱动程序 NVIDIA Windows Kernel Mode Driver Version 已停止响应 并且己成功恢复 解决方法 参考文章: (1)显示器驱动程序 NVIDIA Windows ...

  9. 数据库无响应(hang住)故障处理思路和方法

    故障现象描述 数据库无响应(hang住)故障,常见的就是数据库实例不能响应客户端发起的SQL语句请求,客户端提交一个SQL后,就一直处于等待数据库实例返回结果的状态.最为严重的现象是客户端根本不能连接 ...

最新文章

  1. Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略
  2. MongoDB 之 手把手教你增删改查 MongoDB - 2
  3. 【VBA】多条件去重
  4. linux版本fedora,技术|初级:如何更新 Fedora Linux 系统
  5. springboot框架学习理解下
  6. Linux终端(一)
  7. python opencv对颗粒的计数与计算空洞率
  8. Oxygen XML Editor Professional文档的强大工具
  9. VMware Workstation 14中文破解版下载(附密钥)(笔记)
  10. 用Dim搭建轻量级媒体服务器
  11. python 球的表面积和体积_[给球的体积算表面积]C语言求球的表面积和体积
  12. Linux权限的理解
  13. esp32 采集某个路由器信号强度
  14. TIDB集群搭建-流水线
  15. 苹果展开新显示器带动高阶需求:Mini LED背光技术
  16. 树莓派:双色LED灯实验
  17. 保定学院数学与计算机系2016,保定学院数学与计算机系
  18. 北大自考计算机及应用,北大自考计算机哪个专业好
  19. SYU新人提高90题1(基础题)
  20. 梯度下降法的推导(非常详细、易懂的推导)

热门文章

  1. 隐藏头视图即隐藏UINavigationBar
  2. 读未来产品的设计(1)
  3. C#枚举硬件设备(升级版)
  4. 2008世界大学排名(泰晤士报)Top200
  5. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)
  6. js添加多个子节点_JS创建DOM节点-使用document.createElement()创建子节点或同级节点...
  7. 前端必备,JavaScript面试问题及答案
  8. nodejs中的exports和module.exports
  9. 12月21日云栖精选夜读:阿里云总裁胡晓明:AI泡沫过后,下一站是“产业AI”...
  10. 02NSString 转换 UTF8