打印

单片机读SD卡兼容性差,是怎么回事?大师帮我看看代码哪里问题?

[复制链接]
1704|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdam999|  楼主 | 2024-7-18 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
购买了20个128M  SD卡,单片机可以读的了其中的10个,另外10个读不出来,读不出来卡初始化都是正常的。读不出来的基本上是在这段代码这里跳出或者停住,帮我看看这段代码什么地方需要改进。

uchar  SD_Read_Sector(ulong addr , uchar *buffer)
{//从SD卡的指定扇区中读出512个字节,使用CMD17(17号命令)
        uint i;
        uchar retry,temp;
        uchar cmd17[]={0x51,0x00,0x00,0x00,0x00,0xFF}; //CMD17的字节序列
        addr <<= 9;                 //sector = sector * 512           将块地址(扇区地址)转为字节地址
        cmd17[1] = ((addr & 0xFF000000) >> 24);
        cmd17[2] = ((addr & 0x00FF0000) >> 16);
        cmd17[3] = ((addr & 0x0000FF00) >> 8);
        //cmd17[4] = ((addr & 0x000000FF) >> 0);//可以省去
        //CLR_SD_CS;                                                        //打开片选

        retry = 0;
        do
        {  
                temp = SD_Write_Com(cmd17);                 //写入CMD17
                retry++;
                if(retry > 250)                                         //最大重试次数250
                {
                        SD_CS=1;
                        return(1);                                                 //读块失败
                }
        }while(temp != 0);     
        while (SPI_RW(0XFF) != 0xfe);         //一直读,当读到0xfe时,说明后面的是512字节的数据了
        for(i=0;i<512;i++)                                 //将数据写入到数据缓冲区中
        {       
                buffer[i] = SPI_RW(0XFF);
        }
        SPI_RW(0XFE);
        SPI_RW(0XFE);                                         //读取两个字节的CRC校验码,不用关心它们
        SD_CS=1;                                          //SD卡关闭片选
        SPI_RW(0xFF);                                        //按照SD卡的操作时序在这里补8个时钟
        SPI_MOSI=1;                                //没数据时SD_MI应保持为高电平
        return 0;                                                //返回0,说明读扇区成功
}

使用特权

评论回复

相关帖子

沙发
gdam999|  楼主 | 2024-7-18 22:53 | 只看该作者
while (SPI_RW(0XFF) != 0xfe);        有些时候就停在这段代码这里

使用特权

评论回复
板凳
gdam999|  楼主 | 2024-7-18 22:54 | 只看该作者
所有的卡读0扇区是没有问题的,就是读指定扇区的时候出问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

82

帖子

1

粉丝