UFS 启动步骤

把UFS启动起来总共分几步?

回答:七步!请结合下面的流程图和文字说明加以理解。

第一步:需要给UFS供三路电VCC,VCCQ和VCCQ2。这三路电的供电是需要满足一定时序要求的,就不详细说了,如果用到就翻Spec吧。

第二步:M-PHY层初始化,这个初始化是在正确上电之后自动做的,不光在UFS这端作,同时Host controller那里也需要作M-PHY层的初始化。初始化完成后,M-PHY进入到Hibern8状态。

第三步:UniPro层的初始化,这层的初始化也是在host和UFS两端同时进行的。

第四步:UTP层的初始化。首先Host会发NOP OUT UPIU来询问UFS的UTP层是否已经初始化完成了。当然,UFS因为内部要做很多处理一般不会这么痛快就完成UTP的初始化。于是Host会一直等,直到UFS把UTP初始化完成后,回NOP IN UPIU给Host,通知UFS UTP已经初始化完成,可以进行到下一步初始化,第四步才算结束。(这就好比两口子出门,老公问老婆,收拾好了没,可以走了吗?你懂的,一般女士出门前会有很多很多事情要做,虽然对老公来说完全不知道老婆都忙些啥,但是你必须在旁边等着。直到老婆把事情做完下懿旨可以起銮驾的时候,你俩这才能高高兴兴的一起出门。)

第五步:Host需要从UFS Device Descriptor读取的一些关键信息(比如DeviceClass, Subclass, Boot Enable, Boot LUs size等)来为后面的操作打基础。但对于boot的过程这步不是必须的,可作可不作。
这里写图片描述

第六步:最关键的一步,这也是为什么在第四步Host不离不弃等UFS一起完成初始化的原因。因为这一步UFS要给整个系统提供Bootloader开机代码。首先Host发TEST UNIT READY命令到Boot LU(LU非常重要的概念,后面会讲)来询问是否Boot LU可以被访问。如果访问请求被允许,那么Host会继续发SCSI READ命令来请求读取Bootloader代码,UFS收到命令后就会从boot LU中把bootloader搬运到系统的RAM中,直到把所有的bootloader代码搬移完毕,才会开始最后一步。

第七步:bootloader搬移完成后,host会置标志位fDeviceInit为1来通知UFS可以完成最后的初始化收尾工作,并开始轮询这个标志位。UFS完成所有的初始化工作之后,UFS会reset fDeviceInit为0,来回应host端UFS已经完成所有的初始化工作。至此,UFS已经准备好接受host端的任何读写命令。

很简单清晰的吧O(∩_∩)O~

猜你喜欢

转载自blog.csdn.net/shenjin_s/article/details/79761485
今日推荐