打印
[应用相关]

stm32的sdio口读写sd卡问题

[复制链接]
2860|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rangar|  楼主 | 2016-8-30 21:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在用stm32的sdio读写sd卡信息的过程中遇到了一点问题,我不知道怎么确定那个CMD命令的命令参数,我也在研究例程,但是看了一个下午了也没能看懂怎么确定命令参数,比如cmd0,cmd7等等,所以请走过路过的朋友们帮我解答一下,不胜感激!
沙发
wahahaheihei| | 2016-8-30 21:49 | 只看该作者

SD/MMC 初始化流程

步骤是:1)配置时钟,慢速一般为400K,设置工作模式

        2)发送CMD0,进入空闲态,该指令没有反馈

3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。

        4)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈成功说明该卡为SD卡(短反馈第31位置1为HC卡),否则发送CMD0,有反应说明是MMC卡

        5)发送CMD2,验证SD卡是否接入,长反馈(CID)

        6)发送CMD3,读取SD卡的RCA(地址),短反馈

7)发送CMD9,读取CSD寄存器获取卡的相关信息

        8)发送CMD7,使能SD卡

        9)配置高速时钟,准备数据传输,一般20M~25M

10)发送CMD55+ACMD51读取SCR寄存器,SD卡可以通过该值获得位宽,如果是MMC卡则需要使用主线测试来确定卡的位宽。

11)SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽

12)发送CMD7,使能SD卡,使其进入传输状态),接着发送CMD16设置块大小(根据前面读取的CSD信息确定)。

13) 把命令参数设置为0,再次发送CMD7,取消选中所有卡。

SD 读操作(注意:标准卡和HC卡最大区别在于单块或者多块读写时命令的起始地址参数对齐,标准卡是以字节计算为起始地址的,而HC则按块地址作为起始地址.例如,一般情况下从CSD获取的卡信息中,块长度都为512字节大小,那么要访问第一个512字节时,对于标准卡,命令的参数直接写512,而HC卡则写1.另外,标准卡所使用的SD协议有可能是1.0也有可能是2.0,但是HC的卡就一定是2.0的,大部分的SD卡都是2.0的,而最新的XC卡则使用3.0的协议.)

步骤是:1)发送CMD7,以卡的相对地址为参数,选中该卡,并使其进入Tran状态

        2)发送CMD17/CMD18,命令的参数需要根据初始化时所判断的卡类型填写,按字节或按块.

3)循环读取数据

        4)发送CMD12,强制停止所有传输.

        5)发送CMD7,以0作为命令参数,取消所有选中.


使用特权

评论回复
板凳
wahahaheihei| | 2016-8-30 21:50 | 只看该作者

SD/MMC 初始化流程

步骤是:1)配置时钟,慢速一般为400K,设置工作模式

        2)发送CMD0,进入空闲态,该指令没有反馈

3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。

        4)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈成功说明该卡为SD卡(短反馈第31位置1为HC卡),否则发送CMD0,有反应说明是MMC卡

        5)发送CMD2,验证SD卡是否接入,长反馈(CID)

        6)发送CMD3,读取SD卡的RCA(地址),短反馈

7)发送CMD9,读取CSD寄存器获取卡的相关信息

        8)发送CMD7,使能SD卡

        9)配置高速时钟,准备数据传输,一般20M~25M

10)发送CMD55+ACMD51读取SCR寄存器,SD卡可以通过该值获得位宽,如果是MMC卡则需要使用主线测试来确定卡的位宽。

11)SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽

12)发送CMD7,使能SD卡,使其进入传输状态),接着发送CMD16设置块大小(根据前面读取的CSD信息确定)。

13) 把命令参数设置为0,再次发送CMD7,取消选中所有卡。

SD 读操作(注意:标准卡和HC卡最大区别在于单块或者多块读写时命令的起始地址参数对齐,标准卡是以字节计算为起始地址的,而HC则按块地址作为起始地址.例如,一般情况下从CSD获取的卡信息中,块长度都为512字节大小,那么要访问第一个512字节时,对于标准卡,命令的参数直接写512,而HC卡则写1.另外,标准卡所使用的SD协议有可能是1.0也有可能是2.0,但是HC的卡就一定是2.0的,大部分的SD卡都是2.0的,而最新的XC卡则使用3.0的协议.)

步骤是:1)发送CMD7,以卡的相对地址为参数,选中该卡,并使其进入Tran状态

        2)发送CMD17/CMD18,命令的参数需要根据初始化时所判断的卡类型填写,按字节或按块.

3)循环读取数据

        4)发送CMD12,强制停止所有传输.

        5)发送CMD7,以0作为命令参数,取消所有选中


使用特权

评论回复
地板
Thor9| | 2016-8-30 21:55 | 只看该作者
读写SD卡一般要慢速

使用特权

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

本版积分规则

154

主题

763

帖子

0

粉丝