6.6.20 Application-specific commands 6.6.20 应用层专属命令(这样翻译不知道合适不?)
EMMC系统旨在为各种应用类型提供标准接口。在这种情况下,可能会对需要特定的客户端/应用程序功能进行通信。为了实现这些功能的通用方式,标准中为此定义了两种通用命令类型:
- APP_CMD (CMD55)
当host对EMMC下发CMD55,且EMMC接收后,会将CMD55之后跟随的命令解释为应用特定命令ACMD。ACMD具有与常规e•MMC标准命令相同的结构,可能具有相同的CMD编号。EMMC将通过识别APP_CMD进而将后续命令识别为ACMD。
APP_CMD作用是赋予command 命令其他功能。例如,如果EMMC对ACMD13进行了定义但没有对ACMD7进行定义,则在APP_CMD命令之后立即接收到命令13将被解释为非正式功能的ACMD13,而CMD7则为正式功能的CMD7。
为了使用制造商指定的ACMD,host需要执行以下步骤:
发送APP_CMD命令。其响应会设置APP_CMD位(和CMD的响应状态位不一致),向host发出信号表示现在期望接收ACMD。
发送所需的ACMD。响应将设置APP_CMD位,表示接受的命令被识别为ACMD。如果发送的不是ACMD,则EMMC将其视为常规的EMMC命令,并且设备状态中的APP_CMD位持续设置为清除状态。
如果发送了一个非有效的命令(既不是ACMD也不是CMD),那么它将被识别为标准规定不符合的EMMC非法命令错误。从EMMC协议的角度来看,ACMD号码将由制造商定义,没有任何限制。
2. GEN_CMD (CMD56)
GEN_CMD的总线交互与单块读或写命令(CMD24或CMD17)相同。区别在于参数表示数据传输方向(而不是地址),数据块不是内存的有效数据,而是表示特定厂商指定的格式和含义。
在发送CMD56之前,EMMC必须被选中为传输状态('tran_state')。如果EMMC以单数据速率模式运行,则需要host下发CMD16命令对数据块长度参数BLOCK_LEN进行定义。
如果EMMC以双倍速率模式运行的话,则数据块大小为512字节。且EMMC对CMD56进行R1响应。
6.6.21 休眠 (CMD5)
host可以通过SLEEP/AWAKE命令(CMD5)对EMMC在睡眠状态和待机状态之间切换。
当EMMC处于睡眠状态下,能够使功耗保持最小化。此时EMMC仅对RESET命令(带有参数0x00000000或0xF0F0F0F0或H/W复位)和SLEEP/AWAKE命令(CMD5)进行响应反。EMMC将忽略所有其他命令。
在ext_csd寄存器的S_A_TIMEOUT字段中定义从待机状态到睡眠状态的状态切换的超时时间
同时在ext_csd寄存器的S_C_VCC和S_C_VCCQ两个字段中定义了睡眠状态下的最大电流消耗值。
睡眠命令参数定义:在SLEEP/AWAKE(CMD5)参数中,将第15位设置为1。
唤醒命令参数定义:在SLEEP/AWAKE(CMD5)参数中,将第15位设置为0。
睡眠命令用于从待机状态到睡眠状态进行切换。EMMC此时会拉低DAT0数据信号线来标志自身为忙碌状态。
在忙碌期间不应发送其他命令。当EMMC停止拉低DAT0线时,即切换到了睡眠状态。
唤醒命令用于从睡眠状态到待机状态进行转换。EMMC此时会拉低DAT0数据信号线来标志自身为忙碌状态。
在忙碌期间不应发送其他命令。当EMMC停止拉低DAT0线时,即切换到了待机状态。