OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5648|回复: 2

关于mini板SD卡例程移植需要注意的一个问题

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-8-20
在线时间
19 小时
发表于 2020-8-21 15:03:50 | 显示全部楼层 |阅读模式
最近移植原子哥mini板SD卡驱动,移植完成后,初始化都正常,读CSD和扇区时候,返回成功,但是读取到的数据全是0xFF,找了半天眼睛都花了,终于找到原因了。

mini板使用的是SPI1,而我的板子使用的是SPI3,在MMC_SD.C中做的如下改动。前几个函数封装为SPI3的接口函数。
u8 SD_SPI_ReadWriteByte(u8 data)
{
        return SPI3_TxRx(data);
}          
//SD卡初始化的时候,需要低速
void SD_SPI_SpeedLow(void)
{
        SPI3_SetSpeed(SPI_BaudRatePrescaler_256);//设置到低速模式       
}
//SD卡正常工作的时候,可以高速了
void SD_SPI_SpeedHigh(void)
{
        SPI3_SetSpeed(SPI_BaudRatePrescaler_4);//设置到高速模式       
}
//SPI硬件层初始化
void SD_SPI_Init(void)
{

  SPI3_Init();
        SD_CS_H;
}



如此修改之后,就出现初始化正常,读到扇区内容和CSD等数据返回成功,但是数据都是0xFF,检查读写函数发现接收函数和读扇区函数有如下问题:函数中标红色的地方是直接调用的SPI1读写,而不是上面封装的SD_SPI_ReadWriteByte函数,此处修改之后,读写正常。
//从sd卡读取一个数据包的内容
//buf:数据缓存区
//len:要读取的数据长度.
//返回值:0,成功;其他,失败;       
u8 SD_RecvData(u8*buf,u16 len)
{                                    
        if(SD_GetResponse(0xFE))return 1;//等待SD卡发回数据起始令牌0xFE
    while(len--)//开始接收数据
    {
       *buf=SPI1_ReadWriteByte(0xFF);
        buf++;
    }
    //下面是2个伪CRC(dummy CRC)
    SD_SPI_ReadWriteByte(0xFF);
    SD_SPI_ReadWriteByte(0xFF);                                                                                                                      
    return 0;//读取成功
}
//向sd卡写入一个数据包的内容 512字节
//buf:数据缓存区
//cmd:指令
//返回值:0,成功;其他,失败;       
u8 SD_SendBlock(u8*buf,u8 cmd)
{       
        u16 t;                            
        if(SD_WaitReady())return 1;//等待准备失效
        SD_SPI_ReadWriteByte(cmd);
        if(cmd!=0XFD)//不是结束指令
        {
                for(t=0;t<512;t++)SPI1_ReadWriteByte(buf[t]);//提高速度,减少函数传参时间
            SD_SPI_ReadWriteByte(0xFF);//忽略crc
            SD_SPI_ReadWriteByte(0xFF);
                t=SD_SPI_ReadWriteByte(0xFF);//接收响应
                if((t&0x1F)!=0x05)return 2;//响应错误                                                                                                                      
        }                                                                                                                                                                       
    return 0;//写入成功
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2022-7-3
在线时间
0 小时
发表于 2022-7-6 22:57:22 | 显示全部楼层
mini板sd卡实验一点反应都没有,是sd卡的问题吗
回复 支持 反对

使用道具 举报

8

主题

169

帖子

0

精华

高级会员

Rank: 4

积分
564
金钱
564
注册时间
2015-7-4
在线时间
105 小时
发表于 2022-7-12 10:54:09 | 显示全部楼层
我一般移植驱动的时候,把变量名也改了,这样这种情况编译不通过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 17:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表