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

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

[复制链接]
yygy3748 提问时间:2017-3-22 16:42 /
为什么无法初始化SD卡?用的都是库文件,为什么?为什么?为什么?单片机是STM32F407,代码没带操作系统没上文件系统,只是进行初始化都不行,用的都是库中的代码
收藏 1 评论27 发布时间:2017-3-22 16:42

举报

27个回答
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-22 16:46:58
:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@
yygy3748 回答时间:2017-3-23 15:50:15
安 发表于 2017-3-22 17:02
楼主不要着急,慢慢来顺 一下。确定使用的SDIO或者SPI初始化正确,最好是把代码传上来,还有说明硬件使用的 ...

公司的电脑不知什么原因,上传不了附件。用SDIO,用原子的STM32F407的     实验38 SD卡实验     代码测试也初始化不成功,用STM32CubeMX生成的代码也不行,卡是金士顿 8G Class 4的TF卡,但相同的程序用很多年前买的一张512MB的卡,却可以初始化,并能正常读写数数;两个程序对512MB的卡都能正常操作(初始化、读写操作)。但公司要求产品必须能识别8G或16G的卡,你说会不会是卡的问题?但金士顿 8G Class 4的TF卡是前几天在JD上买的。都卡在这里拖了一周了本来还想在三月份把产品搞定的,又得延期了
yygy3748 回答时间:2017-3-22 16:43:06
本帖最后由 yygy3748 于 2017-3-23 15:40 编辑

https://www.stmcu.org.cn/faq/index/detail/id-70858
废鱼 回答时间:2017-3-22 17:02:48
楼主不要着急,慢慢来顺 一下。确定使用的SDIO或者SPI初始化正确,最好是把代码传上来,还有说明硬件使用的接口等等。如果初始化过不去,很可能是接口初始化问题,或者底层的驱动没有接入正确的接口中。
suoma 回答时间:2017-3-22 22:00:03
SPI还是SDIO方式?
yygy3748 回答时间:2017-3-23 15:49:22
suoma 发表于 2017-3-22 22:00
SPI还是SDIO方式?

公司的电脑不知什么原因,上传不了附件。用SDIO,用原子的STM32F407的     实验38 SD卡实验     代码测试也初始化不成功,用STM32CubeMX生成的代码也不行,卡是金士顿 8G Class 4的TF卡,但相同的程序用很多年前买的一张512MB的卡,却可以初始化,并能正常读写数数;两个程序对512MB的卡都能正常操作(初始化、读写操作)。但公司要求产品必须能识别8G或16G的卡,你说会不会是卡的问题?但金士顿 8G Class 4的TF卡是前几天在JD上买的。都卡在这里拖了一周了本来还想在三月份把产品搞定的,又得延期了
废鱼 回答时间:2017-3-23 15:51:36
修改一下驱动,你看一下初始化时,对于4G以上和4G以下代码的处理。
yygy3748 回答时间:2017-3-23 15:54:52
安 发表于 2017-3-23 15:51
修改一下驱动,你看一下初始化时,对于4G以上和4G以下代码的处理。

这是个好思路,我去看一下,你有没有空帮我看一下代码?
废鱼 回答时间:2017-3-23 16:07:06
你把SD卡初始化的代码传上来,大家一块看看。
废鱼 回答时间:2017-3-23 16:15:03
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type!=SD_TYPE_V2HC)
    {
        sector = sector<<9;
    }
yygy3748 回答时间:2017-3-23 16:40:33
安 发表于 2017-3-23 16:15
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type ...

这是初始化中的代码吗?
yygy3748 回答时间:2017-3-23 16:42:59
安 发表于 2017-3-23 16:15
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type ...

能上传一下你的代码给我看一下吗?
原子的代码就有  if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;  
废鱼 回答时间:2017-3-23 16:59:30
楼主,你仿真进入这里,看一下CardType的值是多少。
yygy3748 回答时间:2017-3-23 17:01:07
安 发表于 2017-3-23 16:59
楼主,你仿真进入这里,看一下CardType的值是多少。

值为  SDIO_STD_CAPACITY_SD_CARD_V2_0
12下一页

所属标签

相似问题

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