你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
安 发表于 2017-3-23 17:03 你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector
yygy3748 发表于 2017-3-23 15:49 公司的电脑不知什么原因,上传不了附件。用SDIO,用原子的STM32F407的 实验38 SD卡实验 代码测试 ...
安 发表于 2017-3-23 22:07 楼主,你按照我的改一下试试。既然能识别4G以下的卡,说明驱动没有问题,只是对2.0的卡需要做一下处理。 ...
suoma 发表于 2017-3-23 20:23 看样子是卡的问题,要不换几个试试。另外程序好几年前的,我知道很早的FAFS.h支持的容量不大 ...
yygy3748 发表于 2017-3-27 16:20 嗯,卡也有问题
if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;这个是在读写里面的了
现在是发送ACMD41命令就出问题了
执行到下面的代码即返回
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++;
}
到了确认卡是否是HC卡及上电是否完成时,出错,发送CMD55->发送ACMD41,如此循环八九点后,最终在响应CMD55命令时出错,Resp1返回 SD_CMD_CRC_FAIL
看样子是卡的问题,要不换几个试试。另外程序好几年前的,我知道很早的FAFS.h支持的容量不大
后来找到的问题是时钟配置有问题,驱动测试好后,即用DMA读写也正常后,再移到另一个项目里,DMA读写不正常了,还是用同一块板子
嗯,卡也有问题
好坑,到底也没说明白啥问题?
时钟配置有问题是哪里配置有问题?
官方論壇這兩篇參考一下
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實現。