MMC子系统

【CMDQ】

Command queue是三星和高通在eMMC V5.1上联合提出来的一个提案(joint proposal)。它允许host可以

发出一个队列包含32个data-transfer command。CMDQ可能对random read/write性能提升更明显。

Ex

  • host queue task
    • 每个task都由cmd44来编码block count,direct,Prio,taksID... CMD45编码address;
    • 在收到cmd45之后,device把task存在queue里;
    • host询问taskID,避免使用重复的ID。
  • QSR
    • 32bit register,由taskID对应映射;
    • host可以在任何时刻发送cmd13,来查询QSR;
    • 每个bit表示对应的task的状态,“0-->pending or no task, "1-->ready for execution"
    • 每次host想execute,都需要先查询QSR。
  • 如果task ready for execution,使用cmd46/47来执行read /write 。direction需要和CMD44发出一致
  • 在data transfer阶段
    • host可以发出新task(cmd44/45)
    • 发出cmd13在任何时刻。

  以上的CMD都是有硬件来发送,软件需要做的是维护两个位于memory的(task/transfer)descriptor list,然后利用doorbell register去trigger task。

Task descriptor主要指示task的具体参数,而transfer descriptor是指示data buffer在memory的位置。DCMD task只能发给slot31。

对于QBR bit set的task,它会等待在它之前的task都完成之后,才会发给device。而在它之后的task则必须等待它完成QBR查询。

 

上一篇:自动化测试平台的搭建(一)


下一篇:django登录与注销学习笔记