eMMC Protocol Feature:CMDQ

本文关键字:Nand Flash、eMMC、CMDQ。

 

概述

相关寄存器

相关命令

CMD44+CMD45:Queuing a Transaction

CMD13:Checking the Queue Status

CMD46/CMD47:Execution of a Queued Task

CMD48:Discard Queued Task

Error handling

Supported Commands


概述

(1)Command Queuing:命令队列。就是将一些读写命令排成一个队列, 进行数据传输。队列长度最多为32条,由Device指定。

(2)Device不保证队列任务被处理的顺序,host跟踪队列的状态,决定命令队列的执行顺序,或者Firmware可以通过优化指令的顺序、提前准备数据,从而提高性能和降低损耗。

(3) 发送CMD6(切换分区或禁用命令队列)时,命令队列必须为空。在队列不为空时发送CMD6视为非法命令。

(4)使能cmdq前,block大小必须设置为512Byte,否则Device在收到CMD46/CMD47后,会返回错误。

(5)如果host需要访问RPMB分区,应禁用命令队列机制,并且禁止通过命令队列访问RPMB分区,但是可以通过命令队列访问通用分区。

 

相关寄存器

  • EXT_CSD [308]CMDQ_SUPPORT        Cell Type:R
  • EXT_CSD [15]:CMDQ_MODE_EN        Cell Type:R/W/E_P
  • EXT_CSD[307]: CMDQ_DEPTH            Cell Type:R
  • 32位队列状态寄存器 QSR

承载队列中任务在特定时间点的状态。host可以通过cmd13(bit [15]=1)的响应读取该寄存器,R1的参数将是32位队列状态寄存器(QSR)。QSR中的每一bit表示与位索引相对应的任务ID。如果位QSR[i]=“0”,则具有ID为i的任务未准备好执行。如果位QSR[i]=“1”,则任务ID为i的排队任务已准备好执行。

 

相关命令

fbbb5eab1f7b10d9c5f1052fdbd320f8.png

 

CMD44+CMD45:Queuing a Transaction

(1)host通过发出cmd44+cmd45将数据传输任务排队。cmd44 bit[15:0]Number of blocks单位为sector。

(2)host应确保CMD44中的任务ID在设备队列中尚未使用。

(3)为了将任务排队,必须依次发出cmd44和cmd45。如果在cmd44之后未发出cmd45,则取消排队操作。如果cmd44不成功(例如请求的任务ID已在使用),设备将该命令视为非法,并且不响应。在这种情况下,host不能发cmd45。成功下发cmd45并返回R1响应后,该任务将被视为在设备中排队。只要队列未满,主机就可以使用cmd​44+cmd45流对任意数量的任务进行排队。

(4)当数据正在DAT上传输,或设备处于busy状态(cmd48引起的busy除外)或线路空闲时(例如,NAC期间),可以发cmd44和cmd45。

 

CMD13:Checking the Queue Status

(​1)当bit 15=1时, CMD13用于查看cmdq任务的状态,cmdq任务的状态与response bit[0-31] 一一对应。因为R1只有32位, 只能查看32个任务的状态, 所以CMDQ_DEPTH最大只有31。

(2)当数据正在DAT上传输时,或设备处于busy状态或线路空闲时(例如,NAC期间),可能会发出发送状态。

 

CMD46/CMD47:Execution of a Queued Task

(1)host发出一个CMD46或CMD47去执行先前排队的任务。CMD46用于执行读命令,CMD47用于执行写命令。host只能执行QSR中显示为ready for execution的任务。

(2)如果任务已准备好执行,并且其数据方向与命令索引匹配(CMD46用于读,CMD47用于写),则设备将发出相应的R1响应并开始数据传输。如果有任何错误,设备不会响应,也不会进行数据传输。

(3)对于读任务,最后一个数据块在emmc的总线上传输完成,才叫做读任务完成,设备才能清除任务ID。对于写任务,最后一个数据块的busy信号被释放才能叫做写任务完成,设备才能清除任务ID。

(4)如果在CMD46数据传输期间发出CMD12,则设备将返回传输状态,并且可以认为操作已完成(QSR[i]=1→0)。如果在CMD47数据传输期间发出CMD12,设备进入编程状态,只有当所有传输的数据都已编程时,才能认为操作已完成(QSR[i]=1→0)。

 

CMD48:Discard Queued Task

(1)Bit[3-0] :CMDQ任务管理

Bit[3-0] =1时, 废除所有任务,清掉QSR; 如果队列为空, 执行该命令不会出错。

Bit[3-0] =2时, 废除bit[20-16]指定的单个任务, 如果任务ID不存在, 执行该命令不会报错。

(2)数据传输过程中CMD48不应发出。

 

Error handling

eb8bb575e5a9c88c6051b70ed1707835.png

注:Type X errors:在下一个命令的response中表现当前的错误。

       Type R errors:在当前命令的response中表现当前的错误。

 

Supported Commands

4b7c4968f35ff97a0799b82a11592104.png

(1)当命令队列已启用时,class 11命令集是可以下发数据传输任务的唯一方法,即不支持CMD18/CMD17和CMD25/CMD24。

(2)当任务队列已启用且为空时,host在Trans state仅能发送class11命令集。但是,如果设备处于Trans状态并处理一系列命令(例如,擦除序列),则主机应先完成该序列再发送class11命令。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值