UFS 启动步骤

把UFS启动起来总共分几步?回答:七步!


第一步:上电

需要给UFS供三路电VCC、VCCQ和VCCQ2,这三路电的供电是需要满足特定的时序要求。

UFS供电


第二步:M-PHY层初始化

M-PHY层初始化是在正确上电之后自动做的,UFS的两端(Host端和Device端)会同时做M-PHY层的初始化。初始化完成后,M-PHY进入到Hibern8状态。

M-PHY层初始化


第三步:UniPro层初始化

UniPro层的初始化也是在Host和Device两端同时进行的,但需要Host Controller发送DME_LINKSTARTUP指令。


第四步:UTP层初始化

首先,Host会发NOP OUT UPIU来询问Device的UTP层是否已经初始化完成。当然,Device因为内部要做很多处理一般不会这么快就完成UTP的初始化。于是Host会一直等,直到Device把UTP初始化完成后,回NOP IN UPIU给Host表明UTP已经初始化完成,可以进行到下一步初始化。


第五步:Host读取设备描述符

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


第六步:加载启动代码

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


第七步:UFS设备继续完成初始化

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


下图具体展示了UFS初始化和启动过程(Opt,可选的):

最后,再把设备初始化过程中,双方交互的内容做个总结:


参考文档:

  1. 蛋蛋读UFS之六:UFS设备初始化和启动

  2. JESD220E -> 13.1 UFS Boot

  3. JESD223D -> 7.1 Host Controller Configuration and Control

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjzw1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值