1、背景介绍
1967年。贝尔实验室江大原(Dawon Kahng,韩裔)和施敏博士(Simon Sze)共同发明了浮栅MOSFET,即所有闪存,EEPROM和EPROM的基础。
从本质上讲,CF/SM/MMC/SD/MicroSD/eMMC卡都属于闪存,即Flash Memory。
备注:TF卡在2004年问世之后,因为被SD协会采纳,更名为Micro SD卡
从Flash Memory的发展历程来看,基本上就是日本和美国的半导体产业的博弈史。最开始是CF卡和SM卡两强并立;随后MMC卡的问世取代了CF卡和SM卡,但是日本紧随其后推出了SD卡(兼容MMC卡)与之抗衡;MicroSD卡只是形式上的区别,与SD卡无本质的区别,可以抛开不提。此时闪存江湖的腥风血雨告一段落,大家都在忙着跑马圈地,占领市场。2011年,eMMC卡横空出世,紧跟着智能手机和平板电脑的浪潮,独领风骚。此时,闪存江湖已无纷争,日美半导体行业俨然沆瀣一气。
2、MMC卡和SD卡
MMC卡只有7pin,可以支持MMC和SPI两种工作模式。
SD卡扩展为9pin,可以支持SD和SPI两种工作模式。
可以看到,SD卡比MMC卡多三根数据线,其他信号线基本相同。
3、SD卡特性分析
3.1、引脚描述
3.2、SPI模式和SD模式
在SD卡内部,CD引脚有一个上拉的50KOhm上拉电阻。当系统复位或者CPU发送CMD0(复位命令)复位SD卡时,SD卡处于idle状态。此时CD引脚提供卡检测功能,CD引脚电平为1表示卡在位,0表示卡不在位。
CD引脚还提供卡模式选择功能,因为默认为高电平,因此高电平状态表示SD模式,即SDIO总线;如果要让SD卡工作在SPI模式,需要CPU主动拉低CD引脚电平为低电平。
3.3、SD卡内部结构
如图所示,SD卡内部包括SD卡接口模块、接口控制模块、上电检测模块、内存区、内存接口以及几个内部寄存器。
内存区用来存储数据,内部寄存器用来保存SD卡信息以及记录SD卡工作参数。
3.3、SD卡寄存器
3.2、SD卡总线协议
命令都是由CPU发起,SD卡应答或者不应答,命令和应答都是通过CMD信号线完成的,只有数据传输才使用DAT信号线。
SD卡单块(多块)读操作
SD卡单块(多块)写操作
无论SD卡工作在单线模式还是多线模式,SD卡写操作时,SD卡发送的busy信号永远只出现在DAT0信号线上。
3.3、SD卡命令和应答格式
3.4、SD卡工作模式
SD卡主要处于卡识别模式和数据传输模式。
3.4.1、SD卡识别模式
系统或者SD卡复位之后,所有SD卡都处于Idle模式,此时RCA(Relative Card Address,相对卡地址)均为0。
此外,因为SD卡兼容MMC卡,而且生产厂家特别多,因此在电气规范(比如工作电压)上不尽相同。
因此,卡识别模式的主要工作是——识别SD卡类型,分配RCA地址,协商工作电压。
3.4.2、SD卡数据传输模式
SD卡的读写是以块为单位进行,块大小通常为512字节。
3.5、SD卡命令
SD卡的工作过程基本上是命令交互过程,命令的格式和说明可以参考SD卡协议规范。