初始化代码:
- alt_u8 Spi_SDInit(void)
- {
- alt_u8 r1; //响应变量
- alt_u8 time = 0; //超时变量
- alt_u8 r7[4]; //响应变量
- //发送CMD8检测接口条件,若r1返回0x01,r7返回0x000001aa,则表示检测成功
- do{
- r1 = Spi_SDSendCmd(8,0x000001aa,0x87); //发送CMD8命令
- r7[0]= Spi_SDReadByte(); //读取响应0x00
- //r7 <<= 8;
- r7[1]= Spi_SDReadByte(); //读取响应0x00
- //r7 <<= 8;
- r7[2]= Spi_SDReadByte(); //读取响应0x01
- //r7 <<= 8;
- r7[3]= Spi_SDReadByte(); //读取响应0xaa
- time++;
- if(time > 254) return 1; //超时退出返回1
- }while((r1 != 0x01) && (r7 != 0x000001aa)); //等待r1返回0x01,r7返回0x000001aa
- time = 0;
- //此处省略发送CMD58命令
- //发送CMD55+ACMD41,收到0x00表示成功
- do{
- r1 = Spi_SDSendCmd(55,0,0xff); //发送CMD55命令
- if(r1 == 0x01) r1 = Spi_SDSendCmd(41,0x40000000,0xff); //发送ACMD41命令
- time++;
- if(time > 254) return 1; //超时退出返回1
- }while(r1 != 0x00); //等待返回0x00
- //此处省略发送CMD58命令
- return 0; //初始化成功,则返回0
- }
调试发现r1=1,是对的,可是r7是个很大的数。
|