UFS3.1协议中文学习讲解(5) 事先声明本文不用于任何商业行为仅用于本人学习与记录。欢迎点赞、收藏、转发分享给朋友禁止未经书面授权的复制、搬运、二次剪辑。如有引用请注明出处。标准规范仍然以《JESD220E-UFS3.1》为准写在最前往后个人见解部分均用实线框出来。5 UFS Architecture Overview UFS 架构概述5.1 UFS Top Level Architecture UFS 顶层架构图 5.1 展示了通用闪存存储UFS的顶层架构。UFS 通信是一种分层通信架构基于 SCSI SAM 架构模型 [SAM]。5.1.1 Application Layer应用层应用层由 UFS 命令集UCS、设备管理器Device Manager和任务管理器Task Manager组成。UCSUFS 命令集处理读、写等常规命令。UFS 可以支持多种命令集UCS 的设计目标是与协议无关protocol agnostic。本版本 UFS 标准的命令集基于 SCSI 命令集具体而言选择了简化的 SCSI 命令集。当需要扩展 UFS 功能时可以支持 UFS 原生命令集。任务管理器Task Manager处理用于命令队列控制的命令。设备管理器Device Manager提供设备级控制例如查询请求Query Request和更底层的链路层控制。SCSI命令支持例如WRITE(6 10 16),READ(6 10 16),INQUIRY,READ CAPACITY(10)等命令括号内代表CDB格式的长度。writeread之所以支持6 10 16最大的不同就是读或写的LBA长度不同可以想象很久以前的设备容量比较小比如2G,8G所以需要表示的最大LBA比较小所以可以用WRITE(6),当设备越来越大,我们当然需要更大多的字节数去表示地址因此慢慢的WRITE 10 16就出现了。更多的UFS所包含的SCSI命令均在11章有所体现这里简单介绍不过多赘述。分享一个最简单抓SCSI命令的方法使用BUSHOUND软件(免费开源使用方法可以自行查询)然后插个U盘电脑会一直发命令确保U盘还在然后往U盘里创个文件夹你会看到基础的写读命令。任务管理器和设备管理器顾名思义在后面的章节中也军有所体现。5.1.2 UFS Device Manager UFS 设备管理器设备管理器承担以下两项职责处理设备级操作Handling device level operations管理设备级配置Managing device level configurations设备级操作包括设备电源管理、与数据传输相关的设置、后台操作使能以及其他设备特定操作等功能。设备级配置由设备管理器通过维护和存储一组描述符descriptors来进行管理。设备管理器处理诸如查询请求Query Request之类的命令这些命令允许修改或检索设备的配置信息。Query Request是UFS自定义的UPIU在11章中有体现这里要与SCSI的INQUIRY有所区别SCSI命令在应用层发送接着在UTP层封装进CMD UPIU中而Query Request则是直接通过QUERY REQUEST UPIU发送。5.1.3 Service Access Points 服务访问点如图所示设备管理器通过以下两个服务访问点与下层进行交互UDM_SAPUIO_SAPUDM_SAP 是 UTP 层为设备管理器暴露的服务访问点用于允许处理设备级操作和配置。例如对描述符descriptors的查询请求Query Request的处理将通过此服务访问点完成。图 5.2 描述了该服务访问点的使用方式。UIO_SAP 是 UIC 层为设备管理器暴露的服务访问点用于触发 UIC 层的复位以及传输与 UIC 管理功能相关的请求和响应。图 5.3 描述了该服务访问点的使用方式。简单来说UDM_SAP交互内容为查询请求Query Request、设备控制等UIO_SAP交互内容为UIC 复位、设备复位、UIC 管理功能的请求 / 响应5.1.4 UIO_SAPUIO_SAP 是 UIC 层暴露的服务访问点。在 UniPro 中UIO_SAP 对应于 DME_SAP。DME_SAP 提供服务原语包括用于复位整个 UniPro 协议栈的原语以及一个用于 UFS 设备复位的原语DME_RESET当需要复位 UniPro 协议栈时使用。DME_ENDPOINRESET当 UFS 主机希望 UFS 设备执行复位时使用。有关详细的内部机制请参阅 MIPIMIPI 是移动行业处理器接口发布的 UniPro 规范 [MIPI-UniPro]。5.1.5 UDM_SAPUDM_SAP 是 UTP 层为 UFS 设备级功能暴露给设备管理器的服务访问点。UDM_SAP 对应于 UFS UTP 层为进一步细节定义的查询请求Query Request和查询响应Query Response传输功能。更多详细信息请参考以下子条款10.9.9 查询功能传输协议服务Query Function transport protocol services10.7.8 查询请求 UPIUQUERY REQUEST UPIU10.7.9 查询响应 UPIUQUERY RESPONSE UPIU5.1.6 UFS 传输协议层UFS Transport Protocol LayerUTPUFS 传输协议UTP层为上层提供服务。UPIU 是 UFS 协议信息单元UFS Protocol Information Unit在 UFS 主机和 UFS 设备的 UTP 层之间交换。例如如果主机侧 UTP 收到来自应用层或设备管理器的请求它会为该请求生成一个 UPIU并将生成的 UPIU 传输至 UFS 设备侧的对端 UTP。UTP 层提供以下三个服务访问点UFS 设备管理器服务访问点UDM_SAP执行设备级管理如描述符访问。UTP 命令管理服务访问点UTP_CMD_SAP传输命令。UTP 任务管理服务访问点UTP_TM_SAP传输任务管理功能如 中止任务abort task 功能。5.1.7 UFS 互连层UFS Interconnect LayerUIC最底层是 UFS 互连层UIC负责处理 UFS 主机与 UFS 设备之间的连接。UIC 由 MIPI UniPro 和 MIPI M-PHY 组成。本人看到这里的时候其实晕晕的到底哪里属于主机哪里属于设备貌似说到现在并没有一个明确的划分。目前我会这样理解主机和设备之间的关系就像层层结构比如说HOST发送会通过其UTP层形成UPIU-经过L4传输层(端到端)-L3网络层(寻址)-L2数据链路层(加校验 封装成帧)-L1.5-M-PHY物理层OK这些统统属于HOST层层封装包越来越大。接着到Device接收端层层解包M-PHY-L1.5-L2 Frame-L3-L4-UPIU那么这些又属于设备了。所以个人认为应该是HOST和DEVICE都需要有相应的结构。(如果这个想法有错误请指正我)具体数据传输结构在协议中也存在后文中会说到。UIC 为上层提供两个服务访问点UIC 服务访问点UIC_SAP在 UFS 主机和 UFS 设备之间传输 UPIU。UIC_SAP 对应于 UniPro 中的 T_SAP。UIO 控制服务访问点UIO_SAP管理 UIC。UIO_SAP 对应于 UniPro 中的 DME_SAP。5.1.8 UFS 拓扑UFS Topology本版本标准假定一个 UFS 端口仅连接一个设备。其他拓扑结构可能在本标准的未来版本中定义。5.2 UFS System Model UFS 系统模型图 5.4 展示了一个 UFS 系统的示例。它展示了 UFS 主机如何连接到 UFS 设备、UFS 主机控制器的位置以及相关的 UFS HCI 接口。UFS 主机由希望与 UFS 设备通信的应用程序组成。它通过 UFS 驱动程序与设备通信。UFS 驱动程序用于通过 UFS 主机控制器接口UFS Host Controller InterfaceHCI来管理 UFS 主机控制器。UFS HCI 本质上是主机控制器暴露的一组寄存器。图 5.4 还展示了 UFS 主机与 UFS 设备之间的 UFS 接口。UFS 互连层UIC由 MIPI UniPro 和 MIPI M-PHY 组成。物理层 M-PHY 是差分双路简单 PHY包括 TX 和 RX 对。注意这里包含收、发各一对差分所以总共 4 根高速差分信号线。这是最基础的M-PHY 规定可以增加收发对不仅仅这一单lane潜在的 UFS 设备可以是存储卡全尺寸和微型尺寸、嵌入式可启动大容量存储设备、I/O 设备等。UFS 设备由多个逻辑单元logical units、一个设备管理器device manager和描述符descriptors组成。设备管理器执行设备级功能而逻辑单元执行读、写等功能。描述符用于存储配置相关信息。5.3 System Boot and Enumeration系统启动和枚举UFS 系统从可启动 UFS 设备的启动将在上电后、UFS 互连层MIPI M-PHY 和 UniPro完成启动序列后发起。Boot code可以从适当的Boot LU读取或者根据需要ROM code可以在读取Boot code之前重新配置 MIPI M-PHY 和 UniPro。(ROM Code通常只跑一些简单code然后引导加载boot code上正式加载固件系统代码)UFS 设备中可能存在多个Boot LU。但是在启动时只有一个Boot LU处于活动状态。可以使用适当的descriptors来配置启动过程。Boot时对Boot LU的访问仅支持通过 SCSI 命令。5.4 UFS Interconnect (UIC) Layer UFS 互连层UFS 互连层由 MIPI UniPro为上层UTP层提供基本传输能力和 MIPI M-PHY用作 UFS 物理层组成。5.4.1 UFS Physical Layer SignalsUFS 物理层定义了连接 UFS 设备和 UFS 主机的 UFS 接口的物理部分。这基于 MIPI M-PHY 规范。UFS 接口在每个方向上可以支持多个 lane。每个 lane 由一对差分线组成。基本配置基于一个发送 lane 和一个接收 lane。可选地UFS 设备可以支持两个下行 lane 和两个上行 lane。每条链路中应提供相等数量的下行和上行 lane。表 5.1 总结了 UFS 设备所需的信号。仅显示了每个方向、每个链路的单 lane 配置。有关 UFS 信号的详细信息请参见第 6 节 UFS 电气时钟、复位、信号和电源以及第 8 节 UFS UIC 层MIPI M-PHY。5.4.2 MIPI UniPro在 UFS 中UniPro 负责链路的管理包括 PHY注设备管理不在互连层范围内由上层负责。互连层的基本接口是 UniPro 定义的 CPort。CPort 用于所有数据传输以及所有控制和配置消息。一般来说一个设备上可以支持多个 CPort而 CPort 的数量取决于具体实现。本版本 UFS 链路上的流量可以分为 TC0 或 TC1 流量其中 TC1具有更高的优先级。本版本的 UFS 标准仅使用单个 CPort 和 TC0 流量类。UFS 利用了 UniPro 服务的基本类型包括数据传输服务和配置 / 控制 / 状态服务。更多详细信息请参考第 9 节 UIC 层MIPI UniPro 和 MIPI UniPro 规范 [MIPI-UniPro]。浅浅画个表UniPro层的定义在5.4章中也已经说了UniProMIPI 联盟定义的通用数据链路层协议UFS 只是 借用 它来做可靠传输它在 UTP 下面把 UPIU 拆成数据包通过 M-PHY 发出去。所以 UniPro 不是 UTP 层它是 UIC 层的一部分在 UTP 和 M-PHY 之间。UAP 应用层─ UCSSCSI命令集─ Device Manager设备管理器─ Task Manager任务管理器UTP 传输协议层← 负责打包 UPIU管命令/任务队列UIC 互连层─ MIPI UniPro数据链路层 ← 负责可靠传输、流量控制、链路管理─ MIPI M-PHY物理层← 负责差分信号、高速/低速模式接着UniPro 本身又是一个分层协议UniPro 分层作用应用层CPort给上层提供服务接口就是 UTP 用的那个 CPort传输层分段 / 重组、端到端流量控制、流量类TC0/TC1网络层多设备路由寻址数据链路层链路建立 / 复位、错误检测CRC、重传、流量控制PHY 适配层对接 M-PHY把字节流送给 M-PHY 发出去这里你把PHY适配层和数据链路层合起来看成是物理层那么就是妥妥的TCP/IP 4层模型了基本上一一对应。5.4.3 MIPI UniPro Related Attributes一般来说UniPro 相关属性、值和用途均在 MIPI UniPro 规范中定义。这些属性可能对所有 UniPro 应用都是通用的因此不在本文档的范围内。本标准中专门为 UFS 应用定义了以下属性如表 5.2 所示。5.5 UFS Transport Protocol (UTP) Layer如前所述传输协议层负责将协议封装为适合互连层的帧结构。UFS 与协议无关因此任何协议都需要相应的协议转换层。对于本版本的 UFS 标准这就是 UTPUFS 传输协议层。在本版本标准中所有访问仅通过 SCSI 支持。不过未来版本可能会添加 API / 服务 / 扩展以引入新功能或满足特定要求。UTP 的一个显著特性是提供灵活的数据包架构帮助 UFS 控制器将封装的命令command、数据data和状态status包直接传入和传出系统内存。其目的是允许主机系统内存与 UFS 设备之间进行快速数据传输且处理器介入最少。一旦数据结构在主机内存和设备中建立整个命令的事务就可以由 UFS 设备和主机控制器通过硬件和 / 或固件机制接管这超出了本文档的范围。有关 UFS 控制器标准的更多信息请参考进一步的信息。UTP 设计的第二个特性是一旦设备收到来自主机的命令请求通知设备就可以控制分页和状态转换以满足数据传输的需要并在完成时请求状态完成status completion。其核心思想是设备最了解自身的内部条件和状态因此最清楚如何最好地传输构成请求的数据。主机系统和控制器无需持续轮询设备的 就绪 状态也无需由主机估算何时开始传输数据包。当设备确定满足完成条件和状态时设备会启动总线事务。这种方法减少了固件和逻辑与主机通信所需的工作量这是可选的。它还以最少的总线事务次数提供了最大可能的吞吐量以完成操作。5.5.1 Architectural Model 架构模型SCSI 架构模型 [SAM] 被用作 UTP 的通用架构模型。SAM 架构是一种客户端 - 服务器模型或更常见地称为请求 - 响应架构。5.5.1.1 Client-Server Model客户端 - 服务器模型在客户端 - 服务器模型中过程表示为由应用客户端发起、带有输入并由服务器提供输出的过程调用。客户端 - 服务器关系是不对称的客户端仅发起服务请求服务器仅响应此类请求。发起设备Initiator device和目标设备Target device映射到 UFS 物理网络设备。发起设备可以请求处理命令或任务管理功能通过向目标设备发送请求来实现。目标设备是处理命令请求的 UFS 设备任务管理器用于请求处理任务管理功能。目标设备Target device是一个 UFS 设备。一个 UFS 设备将包含一个或多个逻辑单元Logical Unit。逻辑单元是设备内一个独立的处理实体。一个发起请求被引导至目标设备内的单个逻辑单元。逻辑单元将接收并处理客户端命令或请求。每个逻辑单元在目标设备内都有一个地址称为逻辑单元号Logical Unit NumberLUN。发起设备与目标设备之间的通信被划分为一系列消息。这些消息被格式化为本标准定义的UFS 协议信息单元UFS Protocol Information UnitUPIU。有多种 UPIU 类型。所有 UPIU 结构在数据结构的开头最低地址包含一个公共头区域。结构的剩余字段根据 UPIU 的类型而有所不同。任务Task是执行一个或多个请求服务的命令或操作序列。逻辑单元包含一个将支持同时处理一个或多个任务的任务队列。任务队列由逻辑单元管理。任务标签Task Tag是发起设备在构建任务时生成的唯一标签目标设备和发起设备使用该标签来区分多个任务。所有与包含任务标签的事务相关联的事务和数据结构都包含该任务标签。命令结构由命令描述符块Command Descriptor BlockCDB组成其中包含命令操作码command opcode和相关参数、标志和属性。CDB 内容和结构的描述在相关的 [SAM]、[SBC] 和 [SPC] INCITS T10 标准中定义。5.5.1.2 CDB, Status, Task Management CDB、状态、任务管理UTP 采用 [SAM] 中描述的命令描述符块CDB格式、设备状态数据层次结构和报告方法以及未完成命令的任务管理功能。无论 UTP 传递的通用协议是什么SCSI CDB、状态和任务管理功能都应在 UFS 设备中统一采用。5.5.1.3 Nexus 连接关系(光是纽带纽死一代又一代摘自Ultraman Nexus)Nexus 表示发起设备Initiator、目标设备Target、逻辑单元Logical Unit和命令Command/Task之间的关系。Nexus 表示法I_T_L_Q nexus其中 I Initiator发起设备T Target目标设备L Logical Unit逻辑单元Q Command命令在 UFS 定义中应至少有一个发起设备。一个目标设备即 UFS 设备中应有一个或多个逻辑单元。命令标识符Q在 I_T_L nexus 的上下文中由发起设备分配用于唯一标识一个命令从而允许多个命令在同一时间在 I_T_L nexus 上处于未完成状态。这个如何使用在10.9章节讲述应用层的时候会具体写到感兴趣可以提前看一下5.5.1.4 SCSI Command Model SCSI 命令模型所有命令请求都来自发起设备中的应用客户端。应用客户端通过以下过程调用来请求处理命令服务响应 Execute Command输入参数IN[Nexus]、[CDB]、[任务属性Task Attribute]、[数据输入缓冲区大小Data-In Buffer Size]、[数据输出缓冲区Data-Out Buffer]、[数据输出缓冲区大小Data-Out Buffer Size]、[CRN]、[命令优先级Command Priority]输出参数OUT[数据输入缓冲区Data-In Buffer]、[感知数据Sense Data]、[感知数据长度Sense Data Length]、[状态Status]、[状态限定符Status Qualifier]UTP 命令、响应、就绪传输Ready-to-Transfer、数据输出、数据输入 UPIU 头中的参数字段包含符合 [SAM] 的 Execute Command 过程调用的输入和输出参数所需的信息。5.5.1.5 SCSI Task Management Functions SCSI 任务管理功能应用客户端通过以下过程调用来请求处理任务管理功能服务响应 Function name输入参数IN[Nexus]输出参数OUT[附加响应信息Additional Response Information]UTP 任务管理请求和 UTP 任务管理响应头中的参数字段包含符合 [SAM] 的任务管理功能过程调用的输入和输出参数所需的信息。5.6 UFS Application and Command Layer UFS 应用和命令层UFS 接口被设计为与协议无关的接口。然而如前所述本标准选择 SCSI 作为基础协议层。可以通过描述符Descriptors来识别和选择适合 UFS 接口的协议。命令集层Command Set Layer的主要功能是作为 UFS 主机和 UFS 设备之间的数据交换方法并提供基本的设备管理能力。UFS 使用 SCSI SBC 和 SPC 命令作为基线UFS 不会修改符合 SBC 和 SPC 的命令。其目标是最大限度地重用和利用平台PC、笔记本、MID上已有的支持 SCSI 的软件代码库。可以根据需要定义 UFS 原生命令和扩展。SBC(SCSI BLOCK COMMAND)指的是对BLOCK操作的一类命令SPC(SCSI PRIMARY COMMAND)值得是一类获取查询谁被状态的一类命令具体指令如下UFS SCSI 命令集包括1. 符合 SBC 的命令 [SBC]FORMAT UNIT格式化单元READ (6)和READ (10)读命令6 字节 / 10 字节 CDBREAD CAPACITY (10)读取容量10 字节 CDBREQUEST SENSE请求感知数据SEND DIAGNOSTIC发送诊断UNMAP取消映射 / TrimWRITE (6)和WRITE (10)写命令6 字节 / 10 字节 CDB2. 符合 SPC 的命令 [SPC]INQUIRY查询REPORT LUNS报告逻辑单元号READ BUFFER读缓冲区TEST UNIT READY测试单元就绪WRITE BUFFER写缓冲区SECURITY PROTOCOL IN和SECURITY PROTOCOL OUT安全协议输入 / 输出3. 面向 UFS 应用且与现有 SCSI 驱动兼容的 SCSI 操作命令MODE SELECT (10)和MODE SENSE (10)模式选择 / 模式感知10 字节 CDBPRE-FETCH (10)预取10 字节 CDBSTART STOP UNIT启动 / 停止单元SYNCHRONIZE CACHE (10)同步缓存10 字节 CDBVERIFY (10)校验10 字节 CDB4. UFS 的增值可选命令READ (16)、WRITE (16)、PRE-FETCH (16)、SYNCHRONIZE CACHE (16)和READ CAPACITY (16)注这些命令支持具有 8 字节 LBA 字段的更大容量的逻辑单元。更多详细信息请参考第 11 节 UFS 应用UAP层 — SCSI 命令。5.7 Mechanical机械 / 封装UFS 嵌入式设备的封装和要求应尽可能遵循以下准则复位和数据传输引脚应位于封装从边缘数起的第二行PoP 封装或第三行MCP 封装以防止被误接触。