eMMC command queue

原文链接: https://blog.csdn.net/ibanezjem/article/details/78519607

Command Queuing:命令队列。Host可以发送多条指令到Device,Device FW(Firmware,固件)可以通过优化指令的顺序、提前准备数据,从而可以提高性能和降低损耗。队列长度最多为32条,由Device指定。

命令命令默认是空的。Host初始化一条有效的命令后,此命令状态为待处理(Pending)。eMMC FW可以通过设置命令状态为"准备执行(Ready for Execution)",代表Device准备好执行此条命令,Host可以发起执行请求。

Host通过CMD13(参数Bit15置为1)检查队列状态寄存器(QSR:Queuing Status Register),选择处于"准备执行"状态的命令,通过CMD46/CMD47指定命令的ID,然后发起执行命令的请求,并且进行数据传输。CMD44、CMD45、CMD13 Check CQ状态可以在数据传输过程中、Device Busy过程进行发送。

例如:Host通过CMD44指定命令的参数,Device响应后,发CMD45命令的起始地址。Device收到CMD44和CMD45后,检测命令没有异常后,认为是一个有效的命令。Host可以在没有数据传输的时候,发CMD46/CMD47带上有效的任务ID,执行此命令。

注意:

1. 如果Host需要访问RPMB分区,那么需要停止使能命令队列的功能。

2. CMD6切换分区的时候,命令队列必须为空,否则会认为是非法命令。

3. 使能命令队列的时候,块大小必须为512Bytes,否则Device在收到CMD46/CMD47后,会返回错误。

4. Device不保证命令队列的执行顺序,如果某些命令有先后执行的需求,Host需要想办法解决这个问题。

PS:

CMD44:指定命令的参数

CMD45:指定命令的地址

CMD46:执行一个读的命令

CMD47:执行一个写的命令

CMD48:命令队列管理,删除某条或者全部命令

猜你喜欢

转载自blog.csdn.net/qq_35675731/article/details/101023974