OpenEdv-开源电子网

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

SD卡初始化问题

[复制链接]

14

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2012-5-18
在线时间
3 小时
发表于 2012-5-25 13:15:56 | 显示全部楼层 |阅读模式

//初始化SD卡
//返回值:0,正常.
//   其他,不正常.
u8 SD_Initialize(void)
{
    u8 r1;      // 存放SD卡的返回值
    u16 retry;  // 用来进行超时计数
    u8 buf[4]; 
 u16 i;

 SD_SPI_Init();  //初始化IO
  SD_SPI_SpeedLow(); //设置到低速模式
  //for(i=0;i<0xf00;i++);//纯延时,等待SD卡上电完成  
 for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//发送最少74个脉冲
 retry=20;
 do
 {
  r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态
 }while((r1!=0X01) && retry--);
  SD_Type=0;//默认无卡
 if(r1==0X01)
 {
  if(SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0
  {
   for(i=0;i<4;i++)buf=SD_SPI_ReadWriteByte(0XFF); //Get trailing return value of R7 resp
   if(buf[2]==0X01&&buf[3]==0XAA)//卡是否支持2.7~3.6V
   {
    retry=0XFFFE;
    do
    {
     SD_SendCmd(CMD55,0,0X01); //发送CMD55
     r1=SD_SendCmd(CMD41,0x40000000,0X01);//发送CMD41
    }while(r1&&retry--);
    if(retry&&SD_SendCmd(CMD58,0,0X01)==0)//鉴别SD2.0卡版本开始
    {
     for(i=0;i<4;i++)buf=SD_SPI_ReadWriteByte(0XFF);//得到OCR值
     if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC;    //检查CCS
     else SD_Type=SD_TYPE_V2;  
    }
   }
  }else//SD V1.x/ MMC V3
  {
   SD_SendCmd(CMD55,0,0X01);  //发送CMD55
   r1=SD_SendCmd(CMD41,0,0X01); //发送CMD41
   if(r1<=1)
   {  
    SD_Type=SD_TYPE_V1;
    retry=0XFFFE;
    do //等待退出IDLE模式
    {
     SD_SendCmd(CMD55,0,0X01); //发送CMD55
     r1=SD_SendCmd(CMD41,0,0X01);//发送CMD41
    }while(r1&&retry--);
   }else
   {
    SD_Type=SD_TYPE_MMC;//MMC V3
    retry=0XFFFE;
    do //等待退出IDLE模式
    {              
     r1=SD_SendCmd(CMD1,0,0X01);//发送CMD1
    }while(r1&&retry--); 
   }
   if(retry==0||SD_SendCmd(CMD16,512,0X01)!=0)SD_Type=SD_TYPE_ERR;//错误的卡
  }
 }
 SD_DisSelect();//取消片选
 SD_SPI_SpeedHigh();//高速
 if(SD_Type)return 0;
 else if(r1)return r1;    
 return 0xaa;//其他错误
}



用仿真器调试发现程序死在SD卡初始化程序的
do
 {
  r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态
 }while((r1!=0X01) && retry--);
是不是和读写速度有关,还是有什么其他原因,请原子哥指教~~谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-25 13:47:56 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 01:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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