请教下原子哥SD卡 CMD55+ACMD41总是返回0x01的问题

2019-08-16 20:20发布

原子哥的代码是没问题的,但自己写的出现了问题
下面说下我出现的情况
就是按顺序启动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; }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
jmldx
2019-08-17 14:31
回复【4楼】w277277w:
---------------------------------
不会吧?原子的例程里都是这么写的:

#define CMD0    0       //?¨????
#define CMD1    1
#define CMD8    8       //?ü??8 ??SEND_IF_COND
#define CMD9    9       //?ü??9 ????CSD????
#define CMD10   10      //?ü??10????CID????
#define CMD12   12      //?ü??12??????????????
#define CMD16   16      //?ü??16???è??SectorSize ??·???0x00
#define CMD17   17      //?ü??17????sector
#define CMD18   18      //?ü??18????Multi sector
#define CMD23   23      //?ü??23???è???àsector?????°?¤??????N??block
#define CMD24   24      //?ü??24????sector
#define CMD25   25      //?ü??25????Multi sector
#define CMD41   41      //?ü??41????·???0x00
#define CMD55   55      //?ü??55????·???0x01
#define CMD58   58      //?ü??58????OCR????
#define CMD59   59      //?ü??59??????/????CRC????·???0x00

一周热门 更多>