原子哥的代码是没问题的,但自己写的出现了问题
下面说下我出现的情况
就是按顺序启动SD卡
1、74个时钟周期
2、复位(CMD0)进入IDLE状态(返回0x01,正常)
3、卡类型识别CMD8命令(返回R7,检查了参数都正确)
4、出问题就在这点:CMD55+ACMD41组合中ACMD41返回值总是为0x01,死活都没返回0x00,但你的代码没问题
小弟愚钝,找不出是哪出的问题,原子哥,高抬贵手帮忙看下哪里有错吧
#define SD_CMD55 0x37
#define SD_CMD55_ARG 0x00
#define SD_CMD55_CRC 0x01
#define SD_CMD55_RESPONSE 0x01
#define SD_ACMD41 0x41
#define SD_ACMD41_ARG 0x40000000
#define SD_ACMD41_CRC 0x01
/*循环发送CMD55 + ACMD41,等待0x00*/
sdcardInfo sdcardInit(void)
{
uint16_t retryLoop;
uint8_t readByte;
retryLoop = 0xFFFF;
do{
/*CMD55*/
writeSdcardCMD( SD_CMD55, SD_CMD55_ARG, SD_CMD55_CRC);
/*ACMD41,回应R1*/
readByte = writeSdcardCMD( SD_ACMD41, SD_ACMD41_ARG, SD_ACMD41_CRC);
if( readByte == 0x00)
return SD_NORMAL;
}while(retryLoop--);
return SD_INIT_ERROR;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你这个代码看上去没错啊。
估计问题出在这段代码之外的地方吧!
---------------------------------
嗯,好的,我再检查一下吧,谢谢原子哥
一周热门 更多>