SD和EMMC都是基于mmc发展而来,但是两者后来基本独立发展,所以这两个协议之间有共性,也有不同点。MMC更加注重多媒体卡。SD更加注重数据安全。
SD发展
SD版本 | 最大时钟(Mhz) | 数据位宽(bit) | 说明 |
---|---|---|---|
SD2.0之前 | 25(Default Speed) | 1 , 4 | SDSC1 |
SD2.0 | 50(High Speed) | 1 , 4 | 引入SDHC2,定义了4个速度规范 |
SD3.0 | 208 | 1 , 4 | 引入UHS总线,SDXC3,规定了UHS-1,支持1.8v供电,SDR12,SDR25,SDR50,SDR104,DDR50 |
SD4.0 | 156 | 1 , 4 | 引入UHS-||4 |
SD5.0 | 200 | 1, 4 , 8 | 制定视屏录制规范,5.1制定A1标准,支持HS4005 |
SD6.0 | 1,4,8 | 制定A2标准,支持SD Express6技术,支持UHS- III | |
SD7.0 | SDUC7, |
几个特殊点:
- 数据位宽:spi模式只支持1-bit数据线,sd模式在5.0之前只支持1-bit和4bit数据线,5.0之后开始支持8bit数据线。从6.0开始如果使用差分传输,就没有数据线位宽一说了,但是会向下兼容。UHS-I只支持4线数据位宽。
- 电压:3.0之前标准工作电压是[2.7,3.6]v,大家通常直接取中间值说成3.3v,有一些高速SD卡也支持[2.2,2.7]v; 3.0开始支持1.8v工作电压(需要从3.3v切换到1.8v)。但不管怎么说,主机在上电时先使用标准工作电压3.3v,通过CMD5来查询SD卡的工作电压,然后再根据需要进行电压调整。
- 时钟:为了节约功耗,一些主机会采用一些策略在bus idle态关闭时钟。不推荐主机在一个block数据中间间断关闭时钟(有些主机在实现上确实有可能会在一个block数据中间间断关闭时钟,故系统级设计时尤其要注意数据延迟带来的影响)
- CMD线和DAT线:DAT可以在CMD之前发送
- 总线速度:SDR开头的速度模式都是工作于1.8v,4线工作模式。SDR后面的数字表示的是数据带宽MB/s
MMC发展
mmc版本 | 最大时钟(MHz) | 数据位宽(bit) | 说明 |
---|---|---|---|
1.x | 20(default speed) | 1 | |
2.x | 26 | 1 | |
3.x | 52(high speed) | 1,4 | 支持[1.65,1.95]v工作电压 |
4.x | 52 | 1,4,8 | 从4.1版本开始JEDED接管协议推进,4.2版本开始支持1.8v电压,支持8线 |
4.3 | 52 | 1,4.8 | 分区管理,增强型存储,secure erase,引入emmc,支持emmc boot |
4.4 | 52 | 1,4,8 | 多分区管理,ddr |
4.5 | 200 | 1,4,8 | 支持HS200 |
5.0 | 200 | 1,4,8 | HS200,支持1.2v电压,改善信号完整性 |
5.1 | 400 | 1,4,8 | HS400,引入命令队列功能,提高多任务效率 |
5.2 | 1,4,8 | 支持3D NAND,支持更低电压 |
mmc已经几乎不用了,emmc在中低端应用比较多,高端设备使用UFS(universal flash storage)
SD接口
SD4.0之前都使用9-pin接口,SD4.0之后开始支持17-pin接口。SD 4线模式支持通过拉低DATA[1]线来发起中断请求。DATA[3]通常复用作card detect。
CMD
cmd可分为两大类,带A开头的表示应用命令,用于执行高级或者扩展功能;不带A开头的表示基本操作命令。
CMD0:用于选择SD模式或者SPI模式。只有SD模式才支持1.8v工作电压。
CMD3:用于查询slave的RCA
CMD5:用于查询slave的工作电压
ACMD41:用于查询slave是否支持电压切换(即是否支持UHS_I模式)。
ACMD6:用于配置数据位宽,UHS_I只支持4线模式。
关于slave的枚举过程可以查找对应的SPEC。