目录
(1)Boot Logical Units(BOOT LUs)
(2)RPMB(Replay Protected Memory Block)
(3)Report LUNS LU(Logical Unit)
十一、逻辑单元(Logical Unit, LU)
1、概念
在UFS(Universal Flash Storage)标准中,逻辑单元(Logical Unit, LU)是将物理存储空间划分为多个逻辑地址空间,以便于操作系统和应用程序能够更加灵活和高效地管理数据。
首先,想象一下你有一个非常大的书架,这个书架可以存放很多书籍。但是为了方便管理,你可能会将书架分成几个区域,每个区域放一类书籍,比如科幻小说、历史书籍等。这样,当你想要找一本书的时候,你可以直接去它所属的区域,而不是在整个书架上乱翻。
在UFS这种存储技术中,"namespace"(命名空间)的概念就类似于书架上的这些区域。它们把一个大的存储设备分成了多个小的、独立的存储空间,每个空间都有自己的地址系统,可以独立地存储和管理数据。
UFS中的"LU"(Logical Unit,逻辑单元)就是这些独立的存储空间之一。每个LU都有自己的地址范围,就像书架上的一个特定区域。当你想要访问某个LU中的数据时,你需要通过一个叫做"LUN"(Logical Unit Number,逻辑单元号)的东西来指定你想要访问的是哪个LU。这就像是告诉别人:“嘿,我想要找科幻小说区域的那本书。”
在UFS设备中,每个命令或者请求都会通过一个UPIU(UFS协议信息单元)来发送,而UPIU的Header部分会包含一个LUN字段,这个字段就是用来告诉设备:“嘿,我要找的是第几个逻辑单元的数据。”这样,设备就知道该去哪个独立的存储空间中查找数据了。
总的来说,namespace和LU的概念就是为了方便管理和访问存储设备中的数据,通过将一个大的存储空间分割成多个小的、独立的部分,使得数据的组织和访问更加有序和高效。
2、UFS逻辑单元的独立特性
在UFS设备架构中,存在多个逻辑单元(LUs),它们各自独立地接收来自主机的命令和请求。这些命令和请求可能源自应用层的SCSI模块、设备管理器或任务管理器。每个逻辑单元的独立性体现在以下几个关键方面:
- 独立的逻辑地址空间:每个LU拥有自己的逻辑地址空间,且均从逻辑块地址(LBA)0开始计数,确保了地址的唯一性和独立性。
- 可变逻辑块大小:LUs可以配置不同的逻辑块大小,例如4KB或其他大小,以适应不同的存储需求和优化性能。
- 差异化的安全属性:每个LU能够设定其独特的安全属性,包括但不限于不同的写保护机制,增强数据的安全性。
- 独立的命令队列:每个LU拥有自己的命令队列,使得命令处理更加高效,减少了不同LU间的相互干扰。
- 专用的数据存储:不同的LU可以用于存储不同类型的数据。例如,某些LU可能专用于存储系统启动代码,确保快速启动;其他LU可能用于存储常规应用数据,而还有一些LU可能用于存储敏感或特殊的用户数据。
3、Well known LU
在UFS 2.1的存储架构中,除了支持多达32个普通逻辑单元(LUs)以满足多样化的数据存储需求外,还特别定义了四个"well-known LUs"。这些特殊的LUs因其独特的功能和普遍的重要性而得名,它们分别是:
(1)Boot Logical Units(BOOT LUs)
启动逻辑单元,专用于存储系统启动所需的关键代码和数据,确保设备能够快速且可靠地启动。
BOOT Logical Units (LUs) 通常被称为启动逻辑单元,它们在UFS设备中扮演着至关重要的角色。尽管它们的名字暗示它们直接存储启动代码,实际上,BOOT LUs是虚拟的概念,用于逻辑上标识存储启动代码的物理位置。
在UFS设备中,存在两个BOOT LUs,即BOOT LU A和BOOT LU B。这两个BOOT LUs的设计允许设备存储两套不同的启动代码,例如,一套是最新的启动代码,另一套可能是旧版本的备份。这种设计提供了灵活性和容错能力,确保设备即使在更新过程中遇到问题也能正常启动。
在启动过程中,只有一个BOOT LU是被设置为活跃状态的。这意味着,尽管物理上两套启动代码可能存储在不同的普通LU上,但系统只会从一个指定的活跃BOOT LU加载启动代码。这种机制允许设备在需要时切换到另一套启动代码,例如在系统升级或恢复过程中。
UFS设备中可以设置多个BOOT LUs,比如LU 1作为Boot LU A,LU 4作为Boot LU B,它们分别存储了不同的启动代码。为了确定在启动时使用哪一份启动代码,系统会遵循以下步骤:
- Query请求:在主机启动过程中,设备管理器或相应的管理软件会向UFS设备发送一个Query请求。
- 获取属性:Query请求的目的是获取UFS设备的特定属性,这里特别关注的是
bBootLunEn
属性。- 确定活跃LU:
bBootLunEn
属性指示了当前哪个BOOT LU是活跃的。这个属性告诉系统应该从Boot LU A(LU 1)还是Boot LU B(LU 4)加载启动代码。一旦系统通过Query请求得知了活跃的BOOT LU,它就会从该LU读取启动代码,并继续启动过程。这种机制确保了即使在有多个BOOT LUs的情况下,系统也能正确地识别和加载正确的启动代码,从而保证设备的顺利启动。
以下是对这一过程的简洁描述,可以作为解释这一机制的参考:
启动流程决策:
- 主机启动时,设备管理器向UFS设备发起Query请求。
- 设备响应请求,提供
bBootLunEn
属性,标识当前活跃的BOOT LU。- 系统根据
bBootLunEn
属性的指示,选择从Boot LU A(LU 1)或Boot LU B(LU 4)加载启动代码,完成启动过程。
(2)RPMB(Replay Protected Memory Block)
RPMB(Replay Protected Memory Block)LU是UFS设备中一个特殊的逻辑单元,它提供了一种安全的数据存储机制,以确保数据的完整性和真实性。以下是对RPMB LU功能的进一步解释:
RPMB LU的功能特点
数据合法性校验:当主机向RPMB LU写入数据时,UFS设备会进行校验,确保只有经过授权的主机才能成功写入数据。这防止了未授权的修改和潜在的数据篡改。
读写保护:RPMB LU的设计确保了数据在写入时受到保护,同时在读取时也能进行校验,以验证数据的来源和完整性。
防重放攻击:RPMB技术通过使用计数器来防止旧数据被重放。每次写入操作都会更新计数器,确保数据的顺序性和最新性。
数据隔离:RPMB LU通常与其他LUs隔离,这意味着存储在RPMB LU中的数据是独立的,不会与其他数据混淆,从而提高了安全性。
专用用途:RPMB LU通常用于存储敏感数据,如安全令牌、加密密钥、认证信息等,这些数据对于设备的安全性至关重要。
RPMB LU是UFS设备安全性的重要组成部分,为设备提供了一个安全的数据存储环境,保护了数据的完整性和真实性。
(3)Report LUNS LU(Logical Unit)
Report LUNS LU(Logical Unit)允许主机获取设备上所有逻辑单元的列表。
Report LUNS LU的功能:
设备LU清单汇报:Report LUNS LU的主要功能是向主机提供设备上所有逻辑单元的清单,包括普通LU和特殊LU(如BOOT LUs和RPMB LU)。
命令交互:主机通过发送特定的命令——"Report LUNS"——来请求Report LUNS LU提供当前设备上所有LU的详细信息。
信息获取:通过这个命令,主机能够了解每个LU的属性,例如LU的编号、大小、类型(普通或特殊)、以及它们是否是活跃的等。
设备管理:这种信息对于设备的管理和配置至关重要,因为它帮助主机了解如何与设备上的各个LU进行交互。
兼容性和灵活性:Report LUNS LU确保了UFS设备能够与不同主机系统兼容,无论主机系统如何变化,都能通过这个命令获取必要的信息。
Report LUNS LU是UFS设备架构中的一个关键组成部分,它为主机提供了一种机制来获取有关设备存储结构的重要信息,从而确保数据存储和管理的高效性和准确性。
(4)UFS Device LU
UFS Device LU(UFS设备逻辑单元)是UFS架构中的一个特殊逻辑单元,它代表整个UFS设备而不是单个的存储区域。以下是对UFS Device LU功能的进一步解释:
UFS Device LU的功能:
全局命令接收:当UFS主机需要对整个UFS设备执行操作,而不是针对特定LU时,UFS Device LU就是命令的接收者。
设备级操作:UFS Device LU允许执行影响整个设备的命令,例如格式化(FORMAT UNIT命令)或更改功耗模式(START STOP UNIT命令)。
设备管理:它为设备管理提供了一个集中的接口,使得主机可以轻松地对设备进行配置和管理。
兼容性:UFS Device LU确保了不同主机系统与UFS设备之间的兼容性,允许主机通过标准的命令集与设备交互。
安全性和维护:通过UFS Device LU,主机可以执行一些关键的维护任务,如安全擦除或固件更新。
UFS Device LU是UFS设备中不可或缺的一部分,它为主机提供了一种直接与整个设备交互的方式,使得设备管理更加高效和集中。
值得注意的是:在UFS设备中,写入操作的处理方式因逻辑单元(LU)的类型而异。对于Boot LU和RPMB LU,写入操作不支持缓存(cache)操作,这意味着数据必须实际写入到闪存中,写命令才会被标记为完成。这种直接写入确保了数据的安全性和完整性,特别是在需要保护启动代码或安全关键数据时。相反,对于普通的LU,写入操作通常涉及缓存操作,即主机发送的数据首先被存储在设备的内部缓冲区中,然后设备会向主机返回命令完成的状态。这种方式可以提高写入性能,但在安全性方面不如直接写入操作。
十二、UFS设备初始化与启动流程
UFS设备的初始化和启动是一个有序的过程,可以分为三个主要阶段:部分初始化、加载启动代码(如果适用),以及初始化完成。以下是对整个过程的总结:
1、部分初始化阶段
- 过程始于设备上电或重启。
- 涉及UFS栈的全面初始化。
- 完成后,物理层(M-PHY)和数据链路层(UniPro)准备就绪,传输层能够响应Read命令和“TEST UNIT READY”命令。
- 主机可以通过设备管理器访问设备描述符,获取设备配置信息。
2、加载启动代码(可选)
- 如果启动代码不存储在UFS设备上,则跳过此阶段。
- 主机通过设备描述符中的“bBootLunEn”属性判断启动代码是否存储在UFS设备上。
- 如果“bBootLunEn”属性指示启动代码存在,主机读取单元描述符以确定存储启动代码的具体LU。
- 主机向该LU发送“TEST UNIT READY”命令,确认其准备状态,然后通过READ命令加载启动代码。
3、初始化完成
- 主机设置fDeviceInit标志为1,开始初始化过程。
- UFS设备继续完成其固件的初始化。
- 当设备准备就绪,能够响应所有命令或请求时,清除fDeviceInit标志,即设置为0。
- 主机检测到fDeviceInit为0时,表明UFS设备初始化完成,此时主机可以发送UFS协议中的任何命令或请求。
启动过程总结:
- 主机对UFS设备进行上电或重启。
- 主机和设备端的物理层和数据链路层完成初始化。
- 主机通过NOP OUT UPIU ping设备,设备回送NOP IN UPIU确认连接正常。
- 如果设备描述符可访问(bDescrAccessEn不为0),主机读取描述符以确定是否需要加载启动代码。
- 主机向相应的LU发送“TEST UNIT READY”和READ命令,加载启动代码(如果需要)。
- 主机设置并轮询fDeviceInit标志,直至标志清除,表示UFS设备完全初始化。
- 完成所有步骤后,UFS设备准备就绪,可以执行主机的任何命令或请求。
这个过程确保了UFS设备在启动时能够安全、可靠地完成初始化,并准备好与主机进行数据交换。
十三、描述符、标识和属性
在UFS(Universal Flash Storage)技术中,描述符(Descriptors)、标识(Flags)和属性(Attributes)确实构成了设备管理和控制的基石。
1、描述符(Descriptors)
- 描述符提供了UFS设备的关键信息,包括设备的能力、配置和状态。
- 主机通过读取描述符来了解设备的容量、支持的功能、固件版本等信息。
- 描述符是主机与UFS设备进行有效通信的基础。
在UFS(Universal Flash Storage)技术中,描述符是设备信息和配置的主要载体。以下是对主机如何读取和写入描述符的整理,以及对不同类型描述符的解释:
主机与描述符的交互:
- 读取描述符:主机通过Query Request UPIU来读取描述符,UFS设备在接收到请求后,通过Query Response UPIU返回描述符数据。
- 写入描述符:如果需要更改配置,主机可以写入配置描述符。写入操作同样通过Query Request UPIU进行,设备更新配置后,会通过Query Response UPIU确认更改。
描述符类型:
1、设备描述符(Device Descriptor):
- 描述整个UFS设备的属性。
- 通常只读,但通过写配置描述符间接修改。
2、逻辑单元(LU)描述符:
- 描述单个LU的特性和能力,如逻辑块大小、是否存储启动代码等。
3、配置描述符(Configuration Descriptor):
- 允许用户对UFS设备或LU进行配置。
- 更新会反映到设备描述符或LU描述符上。
- 只有在
bConfigDescrLock
属性为0(未锁定)时可写。描述符的读写规则:
- 除了配置描述符外,其他描述符通常是只读的。
- 配置描述符允许主机更改UFS设备或LU的配置,但写入前需要检查是否被锁定。
示例:
- 设备描述符中的
bBootEnable
项出厂时可能设置为0(Boot功能未启用)。- 用户若要启用Boot功能,需写入配置描述符以更改
bBootEnable
为1。- 更改后,主机再次读取设备描述符时,会看到
bBootEnable
更新为1。UFS 2.1的配置描述符数量:
- UFS 2.1支持最多32个普通LU,每8个LU共享一个配置描述符,因此共有4个配置描述符。
2、标识(Flags)
在UFS(Universal Flash Storage)技术中,标志(Flags)是一种重要的控制机制,用于管理设备的多种功能和状态。
- 控制功能:标志作为开关,可以启用(1)或禁用(0)UFS设备中的特定功能。
- 管理状态:标志可以用来指示设备是否处于某种特定的状态或模式。
- 布尔类型:标志是布尔值,只有两种状态:非0(真)表示开启,0(假)表示关闭。
3、属性(Attributes)
在UFS(Universal Flash Storage)技术中,属性(Attributes)提供了一种更细致的方式来描述和控制设备的状态和行为。
- 状态表示:属性可以表示设备的多种状态,如后台任务的执行情况。
- 范围取值:与标志(Flags)不同,属性的值可以在一定范围内变化,而不仅仅是0或1。