初次使用spi接口读写sd卡,在初始化阶段一直过不去,经过几天的借鉴、分析、学习终于靠移植原子哥的代码成功,借助逻辑分析仪找出了自己一直初始化不成功的原因,分享出来,供大家参考使用,新手摸石头过河,多有不足,还请斧正!!
先上时许图第一张图是逻辑分析仪抓的运行图,第二张图是手册里的时许图。
下面是初始化阶段的代码(代码是原子哥的开发板例程)(下图)
u8 SD_Init(void)
{
u8 r1;
u16 retry;
u8 buf[4];
u16 i;
SD_SPI_Init();
SD_SPI_SpeedLow();
for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);
retry=20;
do
{
r1=SD_SendCmd(CMD0,0,0x95);
}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[i