OpenEdv-开源电子网

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

F4的板子用SPI通信SD卡

[复制链接]

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
发表于 2018-5-24 01:11:13 | 显示全部楼层 |阅读模式
6金钱
如题,发送CMD0一直返回0XFF,SPI1,SPI2都是这样,SPI3则是卡在wait_ack里,SPI配置都是按照原子的程序来的,应该不会配置失误,另外我用的SD卡模块是micro sd card adapter,就是手机内存卡那种拓展出来的,只引出了SPI接口,没SDIO接口,研究了一个星期,把能找到的方法试遍了还是老样子,求大佬们解答 IMG_0068.JPG 原理图.PNG
a.PNG

最佳答案

查看完整内容[请看2#楼]

void SD_SPI_SpeedHigh(void) { SPI1_SetSpeed(SPI_BaudRatePrescaler_16);//设置到高速模式 } 原子的程序在这里设置的是2,然后CMD返回3f,在偶然的情况下,我将其改为了4后返回7f,改为8后返回ff,直到改为16才正常的返回0
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
 楼主| 发表于 2018-5-24 01:11:14 | 显示全部楼层
void SD_SPI_SpeedHigh(void)
{
        SPI1_SetSpeed(SPI_BaudRatePrescaler_16);//设置到高速模式       
}
原子的程序在这里设置的是2,然后CMD返回3f,在偶然的情况下,我将其改为了4后返回7f,改为8后返回ff,直到改为16才正常的返回0
回复

使用道具 举报

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
 楼主| 发表于 2018-5-24 14:45:28 | 显示全部楼层
经过一番研究,SPI1和SPI2的原理图有问题,那几根引脚不对,而SPI3则是因为MISO需要外接一个上拉电阻,接上后,初始化成功,换了不同的卡,能够分辨出V2卡和V2HC卡,但是接下来的读CSD信息一直不对。
u8 SD_GetCSD(u8 *csd_data)
{
    u8 r1;         
    r1=SD_SendCmd(CMD9,0,0x01);//发送CMD9命令,读CSD
        printf("r1=%x:\r\n",r1);
    if(r1==0)
        {
            r1=SD_RecvData(csd_data, 16);//接收16个字节数据
    }
        SD_DisSelect();//取消片选
        if(r1)return 1;
        else return 0;
}
这里的r1一直是3f ,不知道怎么回事,求解答
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-5-25 01:50:46 | 显示全部楼层
exploder 发表于 2018-5-24 14:45
经过一番研究,SPI1和SPI2的原理图有问题,那几根引脚不对,而SPI3则是因为MISO需要外接一个上拉电阻,接上 ...

换卡试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
 楼主| 发表于 2018-5-25 17:25:15 | 显示全部楼层

不是卡的问题,经过一番尝试,问题已解决,原因下一楼解释。
回复

使用道具 举报

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
 楼主| 发表于 2018-5-25 17:35:18 | 显示全部楼层
好奇怪,设为最佳答案后,跑到第二楼去了
回复

使用道具 举报

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
 楼主| 发表于 2018-5-25 17:54:55 | 显示全部楼层
  历时两周,SD卡的移植终于完成,在这里总结下我的个人经验
  首先最开始的时候,初始化一直不对,CMD0一直返回0xff,卡在这里很久,在我看来,卡在这里有很大可能是硬件问题,尤其是接线问题,我是尝试了SPI1,SPI2,SPI3,只有SPI3是卡在wait_ack里,同样是SPI,除了引脚不同外,其余配置都相同,那为啥会有区别呢,那就只能是接线不对,经过我的排查,原理图有点问题,或者说可能程序上需要一些我不知道的步骤才可以吧,反正我这里是原理图的上方的SPI1 PA5/6/7可以使用,右下方的那个SPI1PA5/6/7不行,这样一来就需解决卡在wait_ack的问题,这个问题我是百度各位大佬的方法,发现是上拉电阻的问题,我看了下SD卡原理图,MISO确实没上拉电阻,然后我就用杜邦线接了一个,至此初始化成功。
  初始化成功后,我就卡在get_csd这里,这个问题是我无意中尝试出来的,那就是高速模式的速率不对,好像是因为SPI1和SPI2的速率不同,还有F1和F4的板子主频可能也不同,这里我对于F4,F1系列的主频还有其他的跟频率有关的参数一直处于一脸懵逼状态,所以纯属运气试出来的,至此,速率修改正确后,SD卡移植成功,没其他问题。
回复

使用道具 举报

5

主题

16

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-11
在线时间
7 小时
 楼主| 发表于 2018-5-25 17:59:02 | 显示全部楼层
exploder 发表于 2018-5-25 17:54
历时两周,SD卡的移植终于完成,在这里总结下我的个人经验
  首先最开始的时候,初始化一直不对,CMD0一 ...

对了,忘了补一句,我用的SD卡模块原理图不是上面那一张,由于我刚开始一直没进展,所以换了个SD卡模块调试,所以不要说我的SD卡模块MISO有上拉电阻。。。。。。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2023-7-17
在线时间
5 小时
发表于 2023-7-17 15:03:45 | 显示全部楼层
本帖最后由 浅塘夏荷 于 2023-7-17 15:08 编辑
exploder 发表于 2018-5-24 01:11
void SD_SPI_SpeedHigh(void)
{
         SPI1_SetSpeed(SPI_BaudRatePrescaler_16);//设置到高速模式        

感谢楼主!!!!!!!!!!!!!!!!!!!
就为这个问题困扰了好久,头发不知道掉了多少根(笑哭)
现在才想起来好像SPI通讯SD卡时时钟频率不大于18MHZ
我用的SPI1,APB2的外设,72MHZ时钟频率,我把分频从2分频改到4分频(18MHZ)之后就正常了,返回值从0x7f回到正常状态了

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 08:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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