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

这一节讲讲UFS初始化。

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

部分初始化阶段

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

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

加载启动代码

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

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

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

查找到具体存储代码的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设备初始化和启动

    转自:蛋蛋读UFS之六:UFS设备初始化和启动 这一节讲讲UFS初始化. 初始化和启动包括三个阶段:部分初始化,加载启动代码(可选)和初始化完成. 部分初始化阶段 这个阶段开始于上电或者设备重启,它涉 ...

  2. UFS系列7:描述符、标识和属性

    UFS中也有吉祥三宝,那就是描述符(Descriptors).标识(Flags)和属性(Attributes),主机通过这三宝,来控制与管理UFS设备. 描述符 描述符是一块或者一页参数用以描述一个U ...

  3. UFS系列9:UFS数据安全

    前面提到RPMB使用认证机制和抗重放攻击机制保障数据不被黑客攻击,除此之外,UFS还有其它一些手段来保护用户数据安全,这一章节我们来关注UFS数据安全. UFS设备用来存储个人或者企业的数据信息,UF ...

  4. 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  5. JAVA面试常考系列六

    转载自 JAVA面试常考系列六 题目一 一个Applet有哪些生命周期? 一个Applet的生命周期分为以下四个阶段: Init 每次加载时都会初始化一个小程序.此方法通知Applet,方法已经被装入 ...

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

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

  7. GPU初始化和启动流程(r600)

    本文是分析了显卡初始化和启动的函数调用以及每个函数的功能. 初始化显卡 int r600_init(struct radeon_device *rdev)//debuffsr600_debugfs_m ...

  8. Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

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

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

  10. Nucleus SE RTOS初始化和启动

    Nucleus SE RTOS初始化和启动 Nucleus SE RTOS initialization and start-up 对于任何类型的操作系统,都有某种类型的启动机制.具体的工作方式因系统 ...

最新文章

  1. 【 Linux 】Vim的基本配置以及出现问题解决(su认证失败)
  2. java判断对象已死_Java的JVM判断对象已死的基本算法分析
  3. java中判断undefined_Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
  4. 从零开始理解JAVA事件处理机制(3)
  5. 机器 学习中的方差和偏差
  6. “你”“我”“他”在Unicode表中的位置。
  7. 第一次的爬虫小试(爬取网页文本)
  8. 国讯之MTK Ralink方案GPIO驱动介绍
  9. 隐私计算--21--分布式机器学习
  10. 软媒定时关机,电脑无法启动
  11. 200以内的质数(python)
  12. SpringCloud项目启动
  13. linux微内核,开源微内核seL4microkernel
  14. 网络工程师必备技术汇总
  15. 使用Python采集京东商品详情数据,并上传到拼多多商城中
  16. 无向简单图怎么判断_无向图基础
  17. java license机制dll_(转)使用truelicense实现用于JAVA工程license机制(包括license生成和验证)...
  18. 计算机机房建设标准.doc,计算机机房建设标准.doc
  19. Lua string字符串相关操作
  20. 【报告分享】阿里研究院:2020中国淘宝村研究报告(附下载)

热门文章

  1. 苹果将在WWDC首日举行“现场特别活动” 邀请函抽签决定
  2. 将Linux 标准输出,错误输出重定向到文件
  3. 毕业第一站 | 北京游
  4. html5 3d场景设计,三维场景设计是什么_三维场景设计的介绍
  5. 为什么线程崩溃不会导致 JVM 崩溃
  6. 2021年中国非接触式传感设备市场趋势报告、技术动态创新及2027年市场预测
  7. Echarts中国地图json文件,去除诸岛
  8. 阿里云安全恶意程序检测冠军经验分享(万字长文)
  9. 华为服务器设置raid0为系统盘,服务器设置raid0
  10. android隐藏其他应用图标,【Android】隐藏app图标以及隐式启动其他APP