2 协议功能描述
所有主机和SD卡间的通信由主机控制。主机发送下述两类命令:
? 广播命令——广播命令发送给所有SD卡,有些命令需要响应。
? 寻址(点对点)命令——寻址命令只发送给具有相应地址的卡,并需要从卡返回一个响应。 对卡而言也有两类操作:
? 卡识别模式——在重置(reset)后当主机查找总线上的新卡时,处于卡识别模式。重置后
SD卡将始终处于该模式,直到收到SEND_RCA命令(CMD3)。 ? 数据传输模式——一旦卡的REC发布后,将进入数据传输模式。主机一旦识别了所有总线
上的卡后,将进入数据传输模式。
操作模式与卡状态关系:
3 卡识别模式
在卡识别模式,主机重置所有处于卡识别模式的SD卡,检验操作电压范围,识别卡并请求卡发送相对卡地址RCA。操作对每个卡在各自的CMD线上单独进行,所有的数据传送只使用CMD线。
3.1 重置
GO_IDLE_STATE(CMD0)是软件重置命令,设置每个SD卡进入Idle状态。处于Inactive状态的卡不受此命令影响。
主机上电后,所有SD卡进入Idle状态,包括处于Inactive状态的卡。至少74个时钟周期后才能开始总线传输。
上电或CMD0后,所有SD卡的命令线处于输入模式,等待下一个命令的起始位。卡通过一个默认的相对卡地址RCA(RCA=0x0000)和默认驱动寄存器设置(最低速,最高驱动电流)初始化。
3.2 操作电压范围验证
SD的物理规范标准要求所有SD卡能通过最小和最大供电电压间的任何电压和主机建立通信。然而,数据传输时的最小和最大电压值在操作条件寄存器OCR中定义,可能并不
能覆盖所有的电压范围。SD卡主机希望通过读取卡的OCR寄存器获取合适的电压值或弹出卡。
SD卡
3.3 卡识别过程
在识别时钟速率fOD下主机开始卡识别过程。SD卡的CMD线输出驱动是push-pull驱动。
总线激活后,主机要求卡发送它们的有效操作条件(ACMD41 preceding with APP_CMD—CMD55 with RCA=0x0000)。ACMD41命令的响应是卡的操作条件寄存器。相同的命令将发送给系统中所有的卡。不兼容的卡将进入Inactive状态。主机然后发送命令ALL_SEND_CID(CMD2)到每个卡以获取每个卡的唯一标识CID号。未识别的卡通过CMD线发送CID号作为响应。当卡发送CID号后,进入识别状态(Identification State)。此后,主机发送CMD3(SEND_RELATIVE_ADDR)要求卡发布一个新的相对卡地址RCA,地址比CID短,在以后的数据传输模式中用来寻址卡。一旦获得RCA后,卡状态变成就绪状态(Stand-by state)。此时,如果主机要求卡换成其他的RCA号,可以通过发送另一个SEND_RELATIVE_ADDR命令给卡,要求发布一个新的RCA,最后发布的RCA是实际使用的RCA。主机对系统中的每个卡重复识别过程。
所有的SD卡初始化完以后,系统将开始初始化MMC卡(如果有的话),使用MMC卡的CMD2和CMD3。
4 数据传输模式
直到主机知道所有CSD寄存器的内容,fpp时钟速率必须保持在fOD,因为一些卡有操作频率限制。主机发送SEND_CSD(CMD9)获取卡定义数据(Card Specific Data,CSD寄存器),如块大小、卡存储容量、最大时钟速率等。
CMD7用来选择一个卡并将它置于传输状态(Transfer state),在任何时间只能有一个卡处于传输状态。如果已有一个卡处于传输状态,它和主机的连接将释放,并返回到Stand-by状态。当CMD7以保留相对地址“0x0000”发送时,所有卡将返回到Stand-by状态。这可以用来识别新的卡而不重置其他已注册的卡。在这种状态下已有一个RCA地址的卡不响应识别命令(ACMD41,CMD2,CMD3)。
注意:当卡接收到一个带有不匹配RCA的CMD7时,卡将取消选中。在公用CMD线时,选中一个卡时将自动不选中其他卡。因此,在SD卡系统中,主机具有如下功能:
? 初始化完成后,在公用CMD线时,不选中卡是自动完成的。 ? 如果使用单独的CMD线,需要关注不选中卡的操作
在主机和选择的SD卡之间的所有数据通信是点对点的方式。所有寻址命令都需要响应。
不同数据传输模式的关系如图4-8所示,使用如下步骤:
? 所有读数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。数
据传输将中止,卡回到传输状态(Transfer State)。读命令有:块读命令(CMD17),多块读命令(CMD18),发送读保护(CMD30),发送scr(ACMD51),以及读模式的通用命令(CMD56)。
? 所有写数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。在