你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么无法初始化SD卡?用的都是库文件,为什么?为什么?

[复制链接]
yygy3748 提问时间:2017-3-22 16:42 /
阅读主题, 点击返回1楼
收藏 1 评论27 发布时间:2017-3-22 16:42
27个回答
废鱼 回答时间:2017-3-23 17:03:12
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;  这里改成SDIO_STD_CAPACITY_SD_CARD_V2_0再试一下,好久了,大概是1.0的才用地址左移。2.0的不用。你看一下SD卡的地址操作说明。
yygy3748 回答时间:2017-3-23 17:04:22
嗯,好的
yygy3748 回答时间:2017-3-23 17:06:38
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector

if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;这个是在读写里面的了

现在是发送ACMD41命令就出问题了
yygy3748 回答时间:2017-3-23 17:12:25
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector

执行到下面的代码即返回


        if(errorstatus==SD_OK)//SD2.0/SD 1.1,否则为MMC卡
        {                                                                                                                                  
                //SD卡,发送ACMD41 SD_APP_OP_COND,参数为:0x80100000
                while((!validvoltage)&&(count<SD_MAX_VOLT_TRIAL))
                {                                                                                             
                  SDIO_CmdInitStructure.SDIO_Argument = 0x00;//发送CMD55,短响应
                  SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;          //CMD55
                  SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
                  SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
                  SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
                  SDIO_SendCommand(&SDIO_CmdInitStructure);                        //发送CMD55,短响应         

                        errorstatus=CmdResp1Error(SD_CMD_APP_CMD);                  //等待R1响应  
                       
                        if(errorstatus!=SD_OK)
                                return errorstatus;           //响应错误

                  //acmd41,命令参数由支持的电压范围及HCS位组成,HCS位置一来区分卡是SDSc还是sdhc
                  SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SD_HIGH_CAPACITY | SDType;        //发送ACMD41,短响应       
                  SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND;
                  SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;  //r3
                  SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
                  SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
                  SDIO_SendCommand(&SDIO_CmdInitStructure);

                        errorstatus=CmdResp3Error();                                         //等待R3响应   
                       
                        if(errorstatus!=SD_OK)
                                return errorstatus;           //响应错误
                        response=SDIO->RESP1;;                                                           //得到响应
                        validvoltage=(((response>>31)==1)?1:0);                        //判断SD卡上电是否完成
                        count++;
                }


yygy3748 回答时间:2017-3-23 17:15:50
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector

到了确认卡是否是HC卡及上电是否完成时,出错,发送CMD55->发送ACMD41,如此循环八九点后,最终在响应CMD55命令时出错,Resp1返回 SD_CMD_CRC_FAIL
suoma 回答时间:2017-3-23 20:23:17
yygy3748 发表于 2017-3-23 15:49
公司的电脑不知什么原因,上传不了附件。用SDIO,用原子的STM32F407的     实验38 SD卡实验     代码测试 ...

看样子是卡的问题,要不换几个试试。另外程序好几年前的,我知道很早的FAFS.h支持的容量不大
废鱼 回答时间:2017-3-23 22:07:14
楼主,你按照我的改一下试试。既然能识别4G以下的卡,说明驱动没有问题,只是对2.0的卡需要做一下处理。
zbber 回答时间:2017-3-23 23:30:25
楼主不要着急,慢慢来顺 一下
原田夜舞love 回答时间:2017-3-27 00:33:21
yygy3748 回答时间:2017-3-27 16:18:35
安 发表于 2017-3-23 22:07
楼主,你按照我的改一下试试。既然能识别4G以下的卡,说明驱动没有问题,只是对2.0的卡需要做一下处理。 ...

后来找到的问题是时钟配置有问题,驱动测试好后,即用DMA读写也正常后,再移到另一个项目里,DMA读写不正常了,还是用同一块板子
yygy3748 回答时间:2017-3-27 16:20:01
suoma 发表于 2017-3-23 20:23
看样子是卡的问题,要不换几个试试。另外程序好几年前的,我知道很早的FAFS.h支持的容量不大 ...

嗯,卡也有问题
无帝老三 回答时间:2017-11-2 16:48:46

好坑,到底也没说明白啥问题?
时钟配置有问题是哪里配置有问题?
g921002 回答时间:2017-11-7 22:45:03
本帖最后由 g921002 于 2017-11-7 22:47 编辑

官方論壇這兩篇參考一下
http://community.st.com/thread/ ... rite-speed-solution
http://community.st.com/docs/DO ... fatfs-configuration

回復參考這篇,有回應BUG已經提交,如果你CubeMX是4.23版,那有一些問題。
http://community.st.com/thread/ ... sdinit-missing-code

我用CubeMX4.23,在STM32F429上跑SDIO,只有mount,open,正確,write,close,還是返錯。不得已只好用SPI,抓R0.11C版的FATFS實現。
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版