打印
[应用相关]

请教香主SD卡读取问题

[复制链接]
2141|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qjm_79|  楼主 | 2009-6-2 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SD卡, IO, ST, ck, ni
我目前用的是万利399的开发板,程序用的是万利附带的程序,在main函数中增加一下几个命令:
 if(SD_Init() == SD_OK){
    SD_GetCardInfo(&cardinfo);
    SD_ReadBlock(0, sd_buf, 512);
    SD_ReadBlock(512,sd_buf,512);
    SD_ReadBlock(1024,sd_buf,512);
 }
 其中SD_Init()返回SD_OK,SD_GetCardInfo返回看cardinfo中SD卡的容量和Block的大小都对,其他的参数也有。但是在下面读取数据的时候,就返回超时信息。单步跟踪的时候发现时在下面返回超时:
/* Set Block Size for Card */
SDIO_CmdInitStructure.SDIO_Argument = (u32) BlockSize;
SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SET_BLOCKLEN;
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);
errorstatus = CmdResp1Error(SDIO_SET_BLOCKLEN);
if (SD_OK != errorstatus){
  return(errorstatus);
}
想请教香主我的函数调用的时候正确,在读取Block数据以前时候还需要进行其他设置,谢谢
沙发
skyler| | 2009-6-2 10:42 | 只看该作者

请问你是用SDIO还是SPI?

使用特权

评论回复
板凳
qjm_79|  楼主 | 2009-6-2 10:47 | 只看该作者

回复

用的是SDIO模式,采用1位数据宽度

使用特权

评论回复
地板
skyler| | 2009-6-2 10:51 | 只看该作者

SDIO区别于SPI

你可以参考Lib中自带的例子.

SDIO要比spi麻烦一些,要选卡(必选)、设置卡位宽(可选)、提高时钟频率(可选)、设置block长度(必选),然后就可以进行数据传输了.

spi在初始化后,就直接可以读写卡,方便得多.

使用特权

评论回复
5
qjm_79|  楼主 | 2009-6-2 11:33 | 只看该作者

已能读取数据

谢谢skyler
已经能读取数据了,对SD卡操作步骤不熟悉引起的问题啊
我采用Lib中自带的例子,可以读取数据了
应该是在SD_GetCardInfo后需要调用SD_SelectDeselect选取此
SDCard,然后才能继续操作
继续调试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

2

粉丝