• 30
  • 10月

经常看到SD/MMC这样的写法。Hanny在这里稍微总结一下SD卡和MMC卡的异同点吧。

首先,两者在外型的规格上是几乎一致的。而且两都的接口是兼容的。也就是说,两者可以用同一个卡座来进行读取。而且,两者在时序上也是一致的,读写命令控制也完全一样,这就是为什么经常把两者混在一起写的原因。

不过,虽说外型几乎一致,但还是有点差异的。MMC比SD卡要薄一些,并且,长度只有SD卡的一半。

下面,Hanny从主机驱动方面谈谈两者的差异。

在数据位宽方面,MMC卡最大支持8BIT,而SD卡只能支持4BIT传输。

在卡的激活过程,MMC使用CMD1来进行激活,而SD卡使用ACMD41来进行激活的。于是,这两条命令也成了主机区分两种卡的类型的关键。

在获取卡的RCA地址时,MMC卡是由主机分配RCA给设备,而SD卡则是由设备返回RCA给主机。

在CMD6的使用方法上也有很大不同。MMC有EXT_CSD的概念,主要用CMD8进行读取,CMD6进行设置。而SD卡则只用CMD6进行UserFunction的设置。SD卡的CMD8主要用于区别SD1.0和SD2.0。

MMC还支持CMD14和CMD19进行主线测试,从而选择合适总线进行通信。SD则不支持。

另外,MMC卡还支持CMD11、CMD20这类数据流操作,因此较多用于媒体设备上。MMC还支持Boot等高级的用法。

» Tags:心得, SD, MMC

» 这篇文章共有13条评论,你可以在文章底部留下你的评论

  1. 2010-03-07 23:59

    [...]做SD/MMC卡驱动的项目也有大半年了,总觉得该总结些什么了。在这里,主要就是记录一些比较常见的问题及解决方法,以免再一次遇到。首先就是SD/MMC卡的初始化错误问题。在找错误之前,先确认:1.用读卡器确认这张SD卡是否损坏;2.用另一套环境(一样的程序)读取同一张卡,是否正常;3.用相同的环境读取另外一张SD卡是否正常。如果是1,那么就直接退出本文章了;如果是2,那么就是该环境上出现虚焊短路或芯[...]

  2. Henry Says:
    2010-12-31 13:58

    好文章,鼓励下,正在学习,有事求教你啊!

  3. yangzc Says:
    2011-05-09 09:27

    大侠,你测试CMD14和CMD19进行主线测试功能没?成功没?向大侠请教。请留个联系方式好吗?

  4. Hanny Says:
    2011-05-13 07:27

    @yangzc
    CMD14和CMD19是MMC卡用来测试数据线的命令。
    主要用于检查是否支持8bit、4bit的数据位宽。
    使用的方法,大概就是CMD14发送一个数据包,再用CMD19读回该数据包,进行校验。
    详细可参见MMC卡的SPEC.

  5. yangzcc Says:
    2011-05-14 08:53

    大侠,你有测试代码没?我的MMC卡plus可以成功,但是4.0协议的1位的卡不能成功,纠结啊!

  6. Hanny Says:
    2011-05-17 21:42

    @yangzcc
    测试代码的话,需要根据不同的MCU的SD模块来编写的。
    你说的MMC plus可以成功,那么命令应该就没问题了。

    1位的卡,应该是 3.x协议的吧,可能需要再详细看看SPEC,看是否支持本命令。

  7. uurun Says:
    2011-11-04 17:34

    你好 看了你的文章很有收获 非常感谢
    我现在有几个问题想请教你一下 还望能够指点一二
    我现在在做eMMC卡的驱动 和MMC卡差不多一样 我想获得EXT_CSD的内容发送CMD8之后 数据会立即从数据线传出来吗 还需要其他读指令吗? 但是其他读指令需要给定一个地址,这个地址是多少呢?
    另外一个问题是 我需要设置总线宽度为4BIT 回写EXT_CSD时候是需要把512Bytes字节全部传出去吗?
    呵呵 文字有点多 希望帮忙解答一下 万分感谢

  8. Hanny Says:
    2011-11-06 09:46

    @uurun
    发送CMD8后,即可从数据总线读回EXT_CSD的数据,不需要其它读指令。

    回写EXT_CSD只需要用CMD6写回相应的值就行了,不需要全部的值。

  9. uurun Says:
    2011-11-10 19:20

    呵呵 谢谢啊 现在已经搞出来了 用STM32的SDIO问题还真多唉

  10. yushi Says:
    2011-11-11 18:22

    你好,请问“MMC卡是由主机分配RCA给设备,而SD卡则是由设备返回RCA给主机”中设备是如何产生RCA地址的呀?是每次源地址加一吗?谢谢

  11. Hanny Says:
    2011-11-11 21:31

    @yushi
    协议对设备产生RCA地址的方式并没有做要求。设备可以根据自己的情况进行地址分配,一般为了简单,可采用加1的方式。

  12. 2011-12-24 20:28

    留个足迹,支持一下博主。
    平安夜到来了,祝大家过得开心哈

  13. 2013-06-04 21:42

    谢谢博主的分享,确实学习到不少。

发表评论