OpenEdv-开源电子网

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

SD卡初始化错误!

[复制链接]

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2013-7-11 16:00:28 | 显示全部楼层 |阅读模式
                //MMC卡,发送CMD1 SDIO_SEND_OP_COND,参数为:0x80FF8000 
while((!validvoltage)&&(count<SD_MAX_VOLT_TRIAL))
{       
SDIO_Send_Cmd(SD_CMD_SEND_OP_COND,1,SD_VOLTAGE_WINDOW_MMC);//发送CMD1,短响应  
errorstatus=CmdResp3Error(); //等待R3响应   
  if(errorstatus!=SD_OK)return errorstatus;   //响应错误  
response=SDIO->RESP1;;   //得到响应
validvoltage=(((response>>31)==1)?1:0);
count++;
}
if(count>=SD_MAX_VOLT_TRIAL)
{
errorstatus=SD_INVALID_VOLTRANGE;
return errorstatus;
}    
CardType=SDIO_MULTIMEDIA_CARD;   

初始化的时候 返回错误信息:errorstatus=SD_INVALID_VOLTRANGE;
求指导!
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-11 16:41:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 09:09:03 | 显示全部楼层
我就是把sdio_sdcard.c和.h移植到我自己的工程目录,然后调用:
                while(SD_Init())
  {     
Tx_To_PC("SD卡初始化错误!\r\n",19,1);
IWDG_ReloadCounter();   //喂狗;
Delay_Nms(800);   

show_sdcard_info();//打印SD卡相关信息  之前的挂载
  exfuns_init(); //为fatfs相关变量申请内存  
   f_mount(0,fs[0]);    //挂载SD卡 
                                                                //都没有用到。是不是这个原因呢
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 09:09:33 | 显示全部楼层
我就是把sdio_sdcard.c和.h移植到我自己的工程目录,然后调用: 
                while(SD_Init())
  {      
Tx_To_PC("SD卡初始化错误!\r\n",19,1); 
IWDG_ReloadCounter();    //喂狗; 
Delay_Nms(800);     
}  
show_sdcard_info();//打印SD卡相关信息  
之前的挂载 
  exfuns_init();  //为fatfs相关变量申请内存   
   f_mount(0,fs[0]);      //挂载SD卡  
  //都没有用到。是不是这个原因呢
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 09:23:27 | 显示全部楼层
换成通杀版的程序可以识别了;
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 10:02:35 | 显示全部楼层
换成通杀版;
if(count>=SD_MAX_VOLT_TRIAL)
{
errorstatus=SD_INVALID_VOLTRANGE;
return errorstatus;
}
 
这里还是同样的错误,不过由于
CardType=SDIO_MULTIMEDIA_CARD;

这句话,所以在

if((errorstatus==SD_OK)||(SDIO_MULTIMEDIA_CARD==CardType))
{       
SDIO_Clock_Set(SDIO_TRANSFER_CLK_DIV); //设置时钟频率,SDIO时钟计算公式:SDIO_CK时钟=SDIOCLK/[clkdiv+2];其中,SDIOCLK一般为72Mhz 
errorstatus=SD_SetDeviceMode(SD_DMA_MODE); //设置为DMA模式
//errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);//设置为查询模式
  }
不知道是否为正常。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 10:04:00 | 显示全部楼层
换成通杀版; 
if(count>=SD_MAX_VOLT_TRIAL) 

errorstatus=SD_INVALID_VOLTRANGE; 
return errorstatus; 

 
这里还是同样的错误,不过由于 
CardType=SDIO_MULTIMEDIA_CARD; 

这句话,所以在 

if((errorstatus==SD_OK)||(SDIO_MULTIMEDIA_CARD==CardType)) 
{         
SDIO_Clock_Set(SDIO_TRANSFER_CLK_DIV);  //设置时钟频率,SDIO时钟计算公式:SDIO_CK时钟=SDIOCLK/[clkdiv+2];其中,SDIOCLK一般为72Mhz  
errorstatus=SD_SetDeviceMode(SD_DMA_MODE);  //设置为DMA模式 
//errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);//设置为查询模式 
  } 
是能正常进去,并且设置了模式返回结果是0,就是说没有错误了,但是不知道是否为正常识别SD卡了。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 11:32:12 | 显示全部楼层
求顶!
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-12 17:59:42 | 显示全部楼层
顶一个!
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-15 09:08:11 | 显示全部楼层
换成通杀版;  
if(count>=SD_MAX_VOLT_TRIAL)  
{  
errorstatus=SD_INVALID_VOLTRANGE;  
return errorstatus;  
}  
 
这里还是同样的错误,不过由于  
CardType=SDIO_MULTIMEDIA_CARD;  

这句话,所以在  

if((errorstatus==SD_OK)||(SDIO_MULTIMEDIA_CARD==CardType))  
{          
SDIO_Clock_Set(SDIO_TRANSFER_CLK_DIV);  //设置时钟频率,SDIO时钟计算公式:SDIO_CK时钟=SDIOCLK/[clkdiv+2];其中,SDIOCLK一般为72Mhz   
errorstatus=SD_SetDeviceMode(SD_DMA_MODE);  //设置为DMA模式  
//errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);//设置为查询模式  
  }  
是能正常进去,并且设置了模式返回结果是0,就是说没有错误了,但是不知道是否为正常识别SD卡了。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-15 21:26:00 | 显示全部楼层
回复【10楼】a4615800:
---------------------------------
知不知道测试下就知道了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-17 15:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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