黑猫带你学eMMC协议第25篇:eMMC命令队列详解(CMDQ)

本文结合emmc JEDEC5.1协议规范查看,效果更佳!

1 概述/规则

  • 简介

cmdq为命令队列,就是将一些读写命令排成一个队列,进行数据传输。EMMC能够同时建立多个传输任务,并且执行当中任意一个任务。

host可以跟踪队列的状态,并且制定命令队列的执行顺序。
device将cmd44、cmd45视为队列中的一个任务,如果没有检测到错误,则会发送一个指示成功的响应。

  • 设置流程

(1)读寄存器ecsd[308]看是否支持cmdq。通过ecsd[15]进行开启cmdq。以及通过ecsd[307]获得cmdq的最大任务数量。

(2)cmd44、cmd45,然后cmd13查看对应的任务是否被置为1,也就是“ready for execution”。然后发送cmd46或者cmd47进行读写。

  • 重要规则

(1)当发送cmd6切换分区或者不使能cmdq的时候,命令队列必须为空的状态。如果发送cmd6时候命令队列不是空的,则会出现非法指令。

(2)使能命令队列前,要设置一个sector为512字节。如果一个sector的大小不是512个字节,那么cmd46、cmd47的response就会报错。

(3)设备不保证队列任务被处理的顺序。这个顺序视命令的重要性而定,由主机确定。

(4)对于读任务,最后一个数据块

你可能感兴趣的:(黑猫带你学:eMMC协议详解,emmc,芯片,嵌入式,存储,jedec)