目录
十一、逻辑单元(Logical Unit, LU)
1、概念
2、UFS逻辑单元的独立特性
3、Well known LU
(1)Boot Logical Units(BOOT LUs)
(2)RPMB(Replay Protected Memory Block)
(3)Report LUNS LU(Logical Unit)
(4)UFS Device LU
十二、UFS设备初始化与启动流程
1、部分初始化阶段
2、加载启动代码(可选)
3、初始化完成
十三、描述符、标识和属性
1、描述符(Descriptors)
2、标识(Flags)
3、属性(Attributes)
UFS协议—新手快速入门(一)【1-4】
UFS协议—新手快速入门(二)【5-6】
UFS协议—新手快速入门(三)【7-9】
UFS协议—新手快速入门(四)【10】
十一、逻辑单元(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。
下期预告:UFS协议—新手快速入门(六)