【玩机教程】UFS3.1协议中文学习讲解(5)

事先声明本文不用于任何商业行为,仅用于本人学习与记录。
欢迎点赞、收藏、转发分享给朋友,禁止未经书面授权的复制、搬运、二次剪辑。
如有引用请注明出处。
标准规范仍然以《JESD220E-UFS3.1》为准
写在最前:往后个人见解部分均用实线框出来。
5 UFS Architecture Overview UFS 架构概述
5.1 UFS Top Level Architecture UFS 顶层架构
图 5.1 展示了通用闪存存储(UFS)的顶层架构。

【玩机教程】UFS3.1协议中文学习讲解(5)插图

UFS 通信是一种分层通信架构,基于 SCSI SAM 架构模型 [SAM]。
5.1.1 Application Layer应用层
应用层由 UFS 命令集(UCS)、设备管理器(Device Manager)和任务管理器(Task Manager)组成。
UCS(UFS 命令集):处理读、写等常规命令。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格式的长度。write,read之所以支持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_SAP
UIO_SAP
UDM_SAP 是 UTP 层为设备管理器暴露的服务访问点,用于允许处理设备级操作和配置。例如,对描述符descriptors的查询请求(Query Request)的处理将通过此服务访问点完成。图 5.2 描述了该服务访问点的使用方式。

【玩机教程】UFS3.1协议中文学习讲解(5)插图1

UIO_SAP 是 UIC 层为设备管理器暴露的服务访问点,用于触发 UIC 层的复位,以及传输与 UIC 管理功能相关的请求和响应。图 5.3 描述了该服务访问点的使用方式。

【玩机教程】UFS3.1协议中文学习讲解(5)插图2

简单来说,UDM_SAP交互内容为查询请求(Query Request)、设备控制等,UIO_SAP交互内容为UIC 复位、设备复位、UIC 管理功能的请求 / 响应
5.1.4 UIO_SAP
UIO_SAP 是 UIC 层暴露的服务访问点。在 UniPro 中,UIO_SAP 对应于 DME_SAP。DME_SAP 提供服务原语,包括用于复位整个 UniPro 协议栈的原语,以及一个用于 UFS 设备复位的原语:
DME_RESET:当需要复位 UniPro 协议栈时使用。
DME_ENDPOINRESET:当 UFS 主机希望 UFS 设备执行复位时使用。
有关详细的内部机制,请参阅 MIPI(MIPI 是移动行业处理器接口)发布的 UniPro 规范 [MIPI-UniPro]。
5.1.5 UDM_SAP
UDM_SAP 是 UTP 层为 UFS 设备级功能暴露给设备管理器的服务访问点。UDM_SAP 对应于 UFS UTP 层为进一步细节定义的查询请求(Query Request)和查询响应(Query Response)传输功能。
更多详细信息请参考以下子条款:
10.9.9 查询功能传输协议服务(Query Function transport protocol services)
10.7.8 查询请求 UPIU(QUERY REQUEST UPIU)
10.7.9 查询响应 UPIU(QUERY RESPONSE UPIU)
5.1.6 UFS 传输协议层(UFS Transport Protocol Layer,UTP)
UFS 传输协议(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 Layer,UIC)
最底层是 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 接口。

【玩机教程】UFS3.1协议中文学习讲解(5)插图3

UFS 主机由希望与 UFS 设备通信的应用程序组成。它通过 UFS 驱动程序与设备通信。UFS 驱动程序用于通过 UFS 主机控制器接口(UFS Host Controller Interface,HCI)来管理 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 Signals
UFS 物理层定义了连接 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”。

【玩机教程】UFS3.1协议中文学习讲解(5)插图4

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章中也已经说了:UniPro:MIPI 联盟定义的通用数据链路层协议,UFS 只是 “借用” 它来做可靠传输,它在 UTP 下面,把 UPIU 拆成数据包通过 M-PHY 发出去。所以 UniPro 不是 UTP 层,它是 UIC 层的一部分,在 UTP 和 M-PHY 之间。
UAP 应用层
─ UCS(SCSI命令集)
─ 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 所示。

【玩机教程】UFS3.1协议中文学习讲解(5)插图5

5.5 UFS Transport Protocol (UTP) Layer
如前所述,传输协议层负责将协议封装为适合互连层的帧结构。UFS 与协议无关,因此任何协议都需要相应的协议转换层。对于本版本的 UFS 标准,这就是 UTP(UFS 传输协议)层。
在本版本标准中,所有访问仅通过 SCSI 支持。不过,未来版本可能会添加 API / 服务 / 扩展,以引入新功能或满足特定要求。
UTP 的一个显著特性是提供
灵活的数据包架构
,帮助 UFS 控制器将封装的
命令(command)、数据(data)和状态(status)
包直接传入和传出系统内存。其目的是允许主机系统内存与 UFS 设备之间进行快速数据传输,且处理器介入最少。一旦数据结构在主机内存和设备中建立,整个命令的事务就可以由 UFS 设备和主机控制器通过硬件和 / 或固件机制接管,这超出了本文档的范围。有关 UFS 控制器标准的更多信息,请参考进一步的信息。
UTP

© 版权声明
THE END
喜欢就支持以下吧
点赞20赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容