本文关键字:Nand Flash、eMMC、CMDQ。
CMD44+CMD45:Queuing a Transaction
CMD13:Checking the Queue Status
CMD46/CMD47:Execution of a Queued Task
概述
(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的排队任务已准备好执行。
相关命令
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响应后,该任务将被视为在设备中排队。只要队列未满,主机就可以使用cmd44+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
注:Type X errors:在下一个命令的response中表现当前的错误。
Type R errors:在当前命令的response中表现当前的错误。
Supported Commands
(1)当命令队列已启用时,class 11命令集是可以下发数据传输任务的唯一方法,即不支持CMD18/CMD17和CMD25/CMD24。
(2)当任务队列已启用且为空时,host在Trans state仅能发送class11命令集。但是,如果设备处于Trans状态并处理一系列命令(例如,擦除序列),则主机应先完成该序列再发送class11命令。