ufs2.2 协议扫盲(九)

本文深入探讨了UFS(通用闪存)如何建立在MIPI UniPro协议之上,介绍了UFS与UniPro之间的接口和服务原语,以及寻址方案。详细解析了传输层、应用层和控制平面的交互机制。

九、UFS UIC LAYER: MIPI UNIPRO:
1、UFS 建立在 MIPI 统一协议 (UniPro) 之上,作为ufs的互连(服务交付子系统),为 UFS 传输协议 (UTP) 层提供基本的传输功能。 在数据平面上,UTP 和 UniPro 通过 UniPro 传输层 CPorts (T_CO_SAPs) 的服务原语进行通信。 UFS 和 UniPro 的高层协议功能之间的控制平面交互(例如,链路的发现、枚举和配置)是使用 UniPro 规范定义的设备管理实体服务原语来完成的。

2、传输层和应用层之间的接口被构造为 CPorts(面向连接的端口)的集合。每个 CPort 对应一个 SAP。设备中的 CPort 使用 0 到 2047 之间的整数值标识(尽管应谨慎使用 31 以上的值,因为它们会减少可寻址 L3 设备的数量)。 CPorts 可以被认为是设备内的子地址:设备由 L3 DeviceID 标识,而它的 CPorts,例如CPort 0、CPort 3 和 CPort 4 是内部子地址,用于区分不同的连接,从而区分同一设备的不同数据流。每个连接恰好将一个设备中的一个 CPort 连接到另一个设备中的一个 CPort。因此,一个连接可以将设备 2 的 CPort 1 连接到设备 7 的 CPort 3。每个 CPort 在任何时候都可以与最多一个连接相关联。换句话说,具有四个 CPort 的设备最多可以支持四个同时连接。因此,CPort 原则上是端点内的稀缺资源,因为每个 CPort 都有一个需要维护的独立状态。

3、Architectural Model:
UniPro 内部由几个子层组成,这些子层都由 MIPI UniPro 规范 [MIPI-UniPro] 很好地定义。 在 UFS 的上下文中,整个 UniPro 协议栈应尽可能地被视为一个黑盒模型。 因此,仅以下部分:
 指定 UFS 和 UniPro 之间所需接口的数量和类型
 指定 UFS 和 UniPro 寻址方案之间的映射
 选择 UniPro 规范的可选功能和可定义属性
C0指的是Cport0
4、UniPro/UFS Transport Protocol Interface
UniPro 提供 CPorts 作为 UniPro 之上的应用程序或协议层的概念接口。 CPort 可以被视为 UniPro 规范 8.8 中指定的 T_CO_SAP 的实例。 T_CO_SAP 的物理实现故意没有在 MIPI 中定义,因为实现者应该可以自由选择,例如,更高 UniPro 层的软件实现、基于每个 CPort 的缓冲或每个 CPort 的 DMA 通道的硬件实现等。服务访问点 (SAP) 提供服务原语 (SP),应用程序或协议规范可以将其用作 UniPro 之上的 UFS 来定义它们的交互。

The T_CO_SAP provides the following core data transfer service primitives (see UniPro specification, 8.8.1):
 T_CO_DATA.req( MessageFragment, EOM)

由 UniPro 的服务用户发出以发送消息(Fragment
注:每当 UFS 层请求 UIC 层传输数据时,该 UFS 层应确保所述数据的最后一个片段将在设置了 EOM 标志的情况下传输。 确保这种行为的一种方法是让 UFS 层在每个原子协议数据单元(例如,每个 UFS 传输层“UPIU”一次)调用此 UIC 数据传输服务原语一次,并且 EOM 标志始终设置为“真”。
T_CO_DATA.cnf_L( L4CPortResultCode )
由 UniPro 发布,用于报告 Message (Fragment) 传输请求的结果
T_CO_DATA.ind( MessageFragment, EOM, SOM, MsgStatus )
o 由 UniPro 发布以向服务用户传递收到的消息(片段)
o EOM 通知服务用户这是最后一个消息片段 (EndOfMessage)
o SOM 通知服务用户这是第一个消息片段 (StartOfMessage)
T_CO_DATA.rsp_L( )
o 由 UniPro 的服务用户发布以报告准备接收下一个消息(片段)
5、Flow control(L4 还提供端到端流量控制 (E2E FC) 功能。 这种机制确保传输 CPort 永远不会通过连接发送的数据超过目标 CPort 缓冲区可以吸收的数据。):
UFS 不会利用 UniPro 的端到端流量控制功能进行数据通信,因为 UFS 传输层已经通过严格的客户端-服务器通信模型、标记命令队列和设备端数据传输节流避免了任何溢出。 因此 UFS 不会使用 UniPro 的 T_CO_FLOWCONTROL 服务原语,因此不需要它的实现。
6、Object size:
UniPro 消息可以是任意大小,UniPro 不会以任何方式解释其内容。 消息可以作为多个消息片段从 UniPro 发送/发送到 UniPro。
消息片段是消息的一部分,可以传递给 CPort 或由 CPort 接收。 接收的片段通常与传输的片段不同。 消息片段可能带有也可能不带有消息结束 (EoM) 标志。
消息片段应具有最大 T_MTU 字节以避免在较低层中进一步拆分。
UniPro 通过服务访问点 (DME SAP) 提供对其设备管理实体 (DME) 的访问,其中向 UFS 公开以下服务,允许控制 UniPro 的属性和行为:
DME Configuration Primitives
         DME_GET / DME_SET
        o 提供对本地 UniPort (第五篇有提到)的所有 UniPro 和 M-PHY 属性的读/写访问
         DME_PEER_GET (optional) / DME_PEER_SET (optional)
        o 提供对对等 UniPort 的所有 UniPro 和 M-PHY 属性的读/写访问
注意 在某些情况下,设置属性的顺序与 UniPro 的正确操作有关。 因此,更高的 UFS 层应保留 UFS 应用程序调用 DME 配置原语的顺序。 如果由 UFS 自身内部生成(固件生成),则 DME 配置原语应按照 UniPro 规范的定义正确发布。
DME Control Primitives
         DME_POWERON (optional) / DME_POWEROFF (optional)
        o 允许打开或关闭所有 UniPro 层(L1.5 到 L4)
         DME_ENABLE
        o 允许启用整个本地 UniPro 堆栈 (UniPro L1.5 -L4)
         DME_RESET
        o 允许重置整个本地 UniPro 堆栈 (UniPro L1.5-L4)
         DME_ENDPOINTRESET
        o 允许向链路端点发送端点复位请求命令。
         DME_LINKSTARTUP
        o Allows locally to startup the Link and informs about remote link startup invocation
         DME_HIBERNATE_ENTER / DME_HIBERNATE_EXIT
        o 允许将整个 Link 置于 HIBERNATE 电源模式并唤醒 Link
                 Affects the local and the peer UniPort (UniPro L1.5-L4 and M-PHY)
                
注意 退出休眠状态后,所有 UniPro 传输层属性(包括 L4 T_PeerDeviceID、L4                 T_PeerCPortID、L4 T_ConnectionState 等)将重置为其重置值。 必须在两端正确恢复                  所有必需的属性,然后才能恢复通信。
        
         DME_POWERMODE
        o 允许更改 M-PHY Link 的一个或两个方向的电源模式
         DME_TEST_MODE (optional)
        o 允许在特定测试模式下设置链路上的对等 UniPro 设备
         DME_LINKLOST()
        o UniPro 堆栈向更高层指示链路已丢失,当链路处于 LinkUp 状态或休眠状态并且 DME 从本地PA 层接收到 PA_LM_LINKSTARTUP.ind 原语时,会生成该原语。 这表示对等体正在尝试重          新建立链路并且链路丢失的情况。
         DME_ERROR

        o  UniPro 堆栈朝向更高层的指示,在 UniPro 层之一中遇到错误情况

7、UniPro/UFS Transport Protocol Address Mapping:
UniPro 基本上有两个级别的寻址来控制远程 UniPro 实体之间的信息交换
Network Layer (L3): Device ID, lowest level of addressability
o 为
未来的 UniPro 设备网络提供。 在连接建立期间,创建连接的一侧使用该值来选择连接远程端的物理实体。 在此连接的生命周期内,它应被视为静态的。

Transport Layer (L4): CPort ID, highest level of end-to-end addressability
o 在连接建立期间,创建连接的一侧使用该值来选择连接远程端的目标 UniPro 设备内的逻辑实体。 在此连接的生命周期内,它应被视为静态的。
UFS 采用基于 Nexus 定义的 SCSI 架构模型 [SAM] 的寻址符号 由ITLQ确定一个独立的上下文
The Nexus (I_T_L_Q) is composed of:
Initiator Port Identifier (I)
Target Port Identifier (T)
Logical Unit Number (L)
Command Identifier (Q).
I_T_L_Q Nexus 唯一地定义了特定逻辑单元 (L) 内的特定命令槽 (Q)(存在命令队列,对于一个LU),该逻辑单元 (L) 连接到通过特定主机启动器端口 (I) 访问的特定设备目标端口 (T)。 UFS 互连层地址(Device ID 和 CPort ID)仅与 Nexus 的 I_T 部分相关。 该标准在设备端和主机端只需要并使用一个 UniPro CPort。
 
Mapping Rules
UFS 发起方端口标识符 (I) 和 UFS 目标端口标识符 (T) 应为 16 位宽,并且 UFS 发起方/目标端口标识符应包含包含所述 UFS 端口的实体(主机或设备)的 UniPro 网络层设备 ID
主机的 UniPro 网络层设备 ID 重置值应为 0
设备的 UniPro 网络层设备 ID 重置值应为 1
o UFS 发起方/目标端口标识符包含 UniPro 传输层 CPort ID,所述 UFS 端口用于与远程实体通信
 主机UniPro 传输层 CPort ID 重置值应为 0
 设备UniPro 传输层 CPort ID 重置值应为 0
UFS 发起方端口标识符应包含发起方 ID (IID)。
Table 9-1 defines the Initiator Port Identifier (I) and Target Port Identifier (T) for UFS.

UFS 主机的 UTP 层和 UFS 设备的 UTP 层之间的单个 UniPro 连接可以由上面的 UFS I_T Nexus 唯一标识。
o 主机可以使用 DME_SET 原语修改“I”元素
o 主机可以使用 DME_PEER_SET 原语修改“T”元素

主机端的 CPort 的所有属性(包括,例如,“T_ConnectionState”)可以在复位后由主机使用 DME_GET 和 DME_SET 原语检查和修改。
设备端的 CPort 的所有属性(包括,例如,“T_ConnectionState”)可以在复位后由主机使用 DME_PEER_GET 和 DME_PEER_SET 原语检查和修改。

8、Options and Tunable Parameters of UniPro:
MIPI UniPro 被设计为通用协议规范,因此具有多个选项和参数,UFS 等应用程序应为其专门的 UniPro 使用场景指定这些选项和参数。 UniPro 规范的附录 E 详细说明了所有可能的选择。
本章的其余部分定义了针对此版本 UFS 标准的这些选项和参数的具体要求。 如果下面没有明确说明,它们适用于 UFS 主机端的 UniPro 实现以及 UFS 设备端的 UniPro 实现。

9.1、UniPro PHY Adapter
对于 UFS 定义的 MIPI M-PHY 相关属性值和实现选项,请参阅上一篇文章中的M-PHY的配置表。详情见ufs2.2协议

9.2 UniPro Data Link Layer
 应实施数据链路层流量类别““Best Effort”(TC 0)
 不需要数据链路层流量等级 1(TC1:“低延迟”)
 不需要 TX 抢占能力
 应提供至少 DL_MTU 字节的数据链路层 RX 和 TX 缓冲
 应支持最大大小的 L2 帧 (DL_MTU) 的传输和接收
9.3 UniPro Network Layer
 应支持最大大小的 L3 数据包 (N_MTU) 的传输和接收
9.4 UniPro Transport Layer
 UFS 主机和 UFS 设备应实施至少 1 个 CPort 注意本标准仅需要并使用链路任一侧的单个 CPort。
 如果实施了多个 CPort,UFS 不会强制要求任何超出 UniPro 默认的 CPort 仲裁方案
 应支持 UniPro 测试功能
 UFS 不需要 UniPro 端到端流量控制机制
        o UFS 不会使用“Controlled Segment Dropping”(CSD)
                 因此 CSD 应被禁用
 UFS 不会使用“CPort 安全阀”(CSV)。 因此,应禁用 CSV。
 应支持最大大小的 L4 段 (T_MTU) 的传输和接收。
9.5 UniPro Device Management Entity Transport Layer
DME service primitives provide the means to
retrieve or set attributes,
控制整个 UniPro 协议栈的复位和运行模式
UFS Hosts and UFS Devices shall implement the following DME service primitives:
DME_GET, DME_SET,
DME_ENABLE,
DME_RESET, DME_ENDPOINTRESET,
DME_LINKSTARTUP, DME_LINKLOST,
DME_HIBERNATE_ENTER, DME_HIBERNATE_EXIT,
DME_POWERMODE,
 DME_ERROR. 
UFS 主机
 应实现 DME_PEER_GET 原语和 DME_PEER_SET 原语,它们在[MIPI-UniPro]中是可选的。
UFS 设备
 不得使用 DME_SET 原语修改本地 PA_PWRMode 属性,
 应仅在以下情况下使用 DME_RESET:上电或硬件复位时,或在 DME_LINKLOST.ind,
 不得使用以下原语
o DME_PEER_GET.req、DME_PEER_SET.req、
o DME_POWERON.req、DME_POWEROFF.req、
o DME_ENDPOINTRESET.req,
o DME_HIBERNATE_ENTER.req、DME_HIBERNATE_EXIT.req、
o DME_POWERMODE.req、DME_TEST_MODE.req。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心无杂念可否?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值