• 16
  • 5月

CMD6是SD卡用来扩展功能的一条重要命令。在SD协议1.00和2.00的版本是,该命令主要用于切换卡进入高速模式。而在3.00的协议中,该命令被赋予了更多的功能。

首先来说说功能模块的基本结构吧。SD卡协议中定义了6组功能,每组功能相当于是一组单框,我们可以根据自己不同的需要,来对每一组功能进行不同的选择。

这里以SD协议2.00版本为例,共定义了两种功能:Group1该组功能的名称叫AccessMode,主要就是用于速度上的选择了。默认选项为0x0,即25MHz的总线速度。我们可以将其选为0x1 High-Speed,即可进入到50MHz的总线速度模式了。Group2功能的名称叫Commandsystem,看样子是做一些命令上的扩展。怀疑可能会与加密卡有关,这里没有进行进一步的研究。

因此,简单的说,CMD6我们主要就是用于SD卡高速模式的切换了。下面说说该命令切换高速模式的用法。

CMD6命令共有查询模式和设置模式两种。查询模式主要用于查询是否支持该功能,而设置模式主要用于对该功能的设置。我们采取的流程是先查询,后设置。根据SPEC,因此,我们第一次发送的命令参数应该为:0x00, 0xff, 0xff, 0xf1。该命令的作用是查询AccessMode是否支持High-Speed。命令发送完毕,这里需要注意的是,CMD6并不是用命令总线,而是用数据总线来进行应答。在命令发送完毕时,我们会从数据总线上接收到64Byte的数据。根据SPEC,我们判断第17Byte的低4Bit(data_buf[16]&0x0f)是否等于1。是则继续,否则表示不支持高速模式。

确认SD卡支持高速模式后,我们第二次发送CMD6的参数为:0x80, 0xff, 0xff, 0xf1。该命令的作用是设置AccessMode为High-Speed。命令发送完毕,我们再一次查询接快收数据第17Byte的低4Bit (data_buf[16]&0x0f)是否等于1。如果是,则表明切换成功,接下来就可以调整SD主机模块的时钟和边沿控制了。