管理提醒: 本帖被 qq2440 从 micro2440技术交流专区 移动到本区(2013-11-18)
环境:Micro2440的板子+ADS1.2+Kingston 2G SD卡
目的:获取SD卡的CSD寄存器值
过程:向SD卡依次发送CMD0、CMD55+ACMD41、CMD2、CMD3,CMD7,CMD55+ACMD6,CMD9指令。
问题:在发送以上指令过程中,前面8条指令都正常执行和返回,当发送CMD9指令以获取CSD寄存器值时,指令响应超时,不知是何原因。以下是CMD9指令的代码,望得到各位指点。
U8 CMD9(){
U32 RegTemp;
//STEP1:发送指令
Lcd_Print(RGB(0x00,0xF8,0x00),RGB( 0xFF,0xFF,0xFF),1,"开始执行CMD9指令…\n");
rSDICARG=(RCA<<16);//设定指令参数
rSDICCON=(1<<10)|(1<<9)|(1<<8)|(1<<6)|9;//发送CMD9指令
//等待指令发送结束
do{
RegTemp=rSDICSTA;
}while(!(((RegTemp&0x400)==0x400)|((RegTemp&0x200)==0x200)));
rSDICSTA=RegTemp;//清除标志位
Lcd_Print(RGB(0x00,0x00,0x00),RGB( 0xFF,0xFF,0xFF),1," 指令状态寄存器值为:");
Lcd_Print(RGB(0x00,0x00,0x1F),RGB( 0xFF,0xFF,0xFF),1,"0x%x\n",RegTemp);
//STEP2:对指令的返回值做判断
if((RegTemp&0x400)==0x400){//如果反馈超时
Lcd_Print(RGB(0x00,0x00,0x00),RGB( 0xFF,0xFF,0xFF),1," 获取存储卡CSD信息失败\n");
return 0;
}
else{
Lcd_Print(RGB(0x00,0x00,0x00),RGB( 0xFF,0xFF,0xFF),1," 指令返回值为:\n");
Lcd_Print(RGB(0x00,0x00,0x1F),RGB( 0xFF,0xFF,0xFF),1," 0x%x;0x%x;\n 0x%x;0x%x\n",rSDIRSP0,rSDIRSP1,rSDIRSP2,rSDIRSP3);
return 1;
}
}