转自:蛋蛋读UFS之六:UFS设备初始化和启动

这一节讲讲UFS初始化。

初始化和启动包括三个阶段:部分初始化,加载启动代码(可选)和初始化完成。

  • 部分初始化阶段

这个阶段开始于上电或者设备重启,它涉及到整个UFS栈的初始化。

这个初始化阶段完成后,整个物理层(M-PHY)和数据链路层(UniPro)应该被初始化好,传输层可以和主机交互Read命令和“TEST UNIT READY”命令(主机发该命令给设备,查询设备是否准备好),主机也可以通过设备管理器访问设备描述符(Device Descriptor),获取设备配置信息。

  • 加载启动代码

如果启动代码不是存储在UFS设备上,则没有这一阶段。主机怎么知道启动代码是不是存储在UFS设备上呢?

经过前一阶段的初始化,主机可以访问设备描述符,获得“bBootLunEn ”属性,读取该属性可以知道启动代码是否在UFS设备上,以及具体在哪个Boot LU 上面。

如果bBootLunEn = 01h或者02h,说明启动代码存储在UFS设备上。由于Boot LU是映射到普通的LU上的,要读取启动代码,还需要知道Boot LU和存储启动代码LU的映射。主机可以通过读取单元描述符(Unit Descriptor)知道,比如:

查找到具体存储代码的LU,主机就可以读取该LU获得启动代码。

  • 初始化完成

当主机完成前面两个阶段,主机会通过设备管理器,给设备设置fDeviceInit = 1,这是一个标志(flag),用以初始化。 主机设置了该标志后,然后就一直在那查询该标志的值。

与此同时,UFS设备的固件继续完成自己的初始化,当设备完成初始化,认为可以响应主机任何命令或者请求时,就清掉fDeviceInit,即fDeviceInit = 0。

当主机查询到fDeviceInit =0,就可以发任何UFS协议中的任何命令或请求给UFS设备。

至此,整个UFS初始化和启动完成。

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

再解释一下这个启动过程:

主机给设备上电或者重启设备,然后主机和设备端的物理层和数据链路层完成初始化,之后主机ping设备(通过NOP OUT UPIU),确认设备双方连接正常。设备收到NOP OUT UPIU,应该回NOP IN UPIU,表明双方连接没有问题。

加载启动代码可选(上图蓝色方框中的步骤)。主机读取UFS设备描述符,如果bDescrAccessEn = 0,设备描述符不可访问,那么,即使启动代码存储在UFS设备上,我们也无法在该阶段加载启动代码,因为诸如bBootEnable和bBootLunEn之类的信息无法获取,主机就无法知道存储代码存储在哪个LU上。因此,如果bDescrAccessEn = 0,加载启动代码阶段不应该放在这里,而是在设备彻底初始化好后。

加载启动代码阶段,主机通过读取设备描述符,获得启动代码在哪个LU上,然后发个试探性命令“TEST UNIT READY”给该LU,查看该LU是否准备好。如果Boot LU准备好,主机就通过发READ命令给设备,加载启动代码。

然后,主机设置fDeviceInit = 1,然后一直轮询该标志,一旦fDeviceInit 变成0,标志UFS设备初始化完成。

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

蛋蛋读UFS之六:UFS设备初始化和启动相关推荐

  1. 蛋蛋读UFS之三:UFS数据包UPIU

    转自:蛋蛋读UFS之三:UFS数据包UPIU UFS中流淌的数据包叫做UPIU(UFS Protocol Information Unit,UFS协议信息单元),它是固定格式的数据结构,用以传输应用层 ...

  2. 蛋蛋读UFS之二:UFS协议栈

    转自:蛋蛋读UFS之二:UFS协议栈 任何一种接口或者协议,都是由一个完整的协议栈组成的.UFS也不例外. UFS定义了一个完整的协议栈.从上到下,依次为应用层.传输层.数据链路层和物理层.UFS使用 ...

  3. 蛋蛋读UFS之九:UFS数据安全

    转自:蛋蛋读UFS之九:UFS数据安全 前面提到RPMB使用认证机制和抗重放攻击机制保障数据不被黑客攻击,除此之外,UFS还有其它一些手段来保护用户数据安全,这一章节我们来关注UFS数据安全. UFS ...

  4. 蛋蛋读UFS之一:UFS简介

    转载:蛋蛋读UFS之一:UFS简介 我们知道,我们电脑由三大件组成:CPU,内存和硬盘.CPU用以计算和控制,内存用以临时存储程序运行时所需的数据(掉电数据丢失),而硬盘用以长久保存数据(掉电数据不丢 ...

  5. 蛋蛋读UFS之十:UFS电源管理

    转自:蛋蛋读UFS之十:UFS电源管理 UFS是手机存储设备,因此对功耗要求很高.我们来看看UFS的电源管理. 三个供电电压,VCC,VCCQ和VCCQ2,分别给UFS设备模块供电.UFS设备主要包括 ...

  6. dpdk pci设备初始化

    一.pci设备背景知识 传统的sata,是一种 半双工设备, 同一时间只能有一个方向在传输数据,传输速率就比较慢了.pci设备是一种全双工设备, 同一时间可以发送数据到其他pci设备,也可以接收来自其 ...

  7. UFS 3 - UFS RPMB

    UFS 1-UFS RPMB 1 RPMB介绍 2 RPMB Well Known Logical Unit Description 3 Requirements 3.1 RPMB Resources ...

  8. UFS 5 - UFS UIC Layer: MIPI M-PHY

    UFS 5 - UFS UIC Layer: MIPI M-PHY 1 Termination 2 Drive Levels 3 PHY State machine 4 HS Burst 4.1 HS ...

  9. UFS 11 - UFS RPMB分区功能验证

    UFS 11 - UFS RPMB分区功能验证 1 ufs-utils下载和编译 1.1 ufs-utils开源代码下载 1.2 编译 2 ufs-utils工具使用 2.1 ufs-utils -- ...

最新文章

  1. 踩坑 :vue2 ajax异步请求数据,层数太多,页面无法渲染
  2. LA3971组装电脑
  3. Windows上安装Mysql解压缩版教程
  4. linux c语言定位显示字符,Linux c语言实现修改文本字符串
  5. 初学者如何选择合适的机器学习算法(附算法速查表)
  6. maven清理缓存_mybatis源码初探【二】缓存的实现
  7. 软件保护技术--- 常见保护技巧
  8. .net平台借助第三方推送服务在推送Android消息(极光推送) 转
  9. 多元梯度下降法--machine learning
  10. webservice 参数太大_webservice大数据
  11. 有趣的计算机黑科技,6个让你欲罢不能的电脑黑科技软件,我一定要分享出来!...
  12. 冬奥会开幕式震撼刷屏,这些黑科技立了大功!
  13. 《蛙》杂记------莫言
  14. 网络爬虫——前程无忧网数据获取及MYSQL存储
  15. 如何避免自己写的代码成为别人眼中的一坨屎 (摘自微信公众号,顶级程序员)...
  16. PostgreSQL,MongoDB,Neo4j,OrientDB和ArangoDB比较
  17. JSFL批量删除fla文件中超出某个宽度的原件
  18. android 关机消息广播,Android开机、关机播音监听
  19. 斐波那契序列递归方法_斐波那契和卢卡斯序列
  20. STM32的HAL库及其使用

热门文章

  1. [高可用系列|LVS]LVS详解
  2. android Motion Senor API 简介
  3. 互联网晚报 | 一季度全国居民人均可支配收入10870元;郑渊洁称维权艰难将不再发表作品;苹果版余额宝上线,年利率4.15%...
  4. DP——状态压缩dp
  5. 2019中国计算机高引学者榜单出炉,164人入选,周志华位列第二
  6. 4行Python代码实时获取股市数据
  7. P6771 [USACO05MAR]Space Elevator 太空电梯 题解
  8. Aspose.Cell组件,实现图表的插入(每一行都有注释+效果图)
  9. tar.xz文件如何解压
  10. 将系统ISO文件上传至linux 系统内 方式二