九、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 来定义它们的交互。
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)
o 由 UniPro 的服务用户发布以报告准备接收下一个消息(片段)
UniPro 消息可以是任意大小,UniPro 不会以任何方式解释其内容。 消息可以作为多个消息片段从 UniPro 发送/发送到 UniPro。
消息片段是消息的一部分,可以传递给 CPort 或由 CPort 接收。 接收的片段通常与传输的片段不同。 消息片段可能带有也可能不带有消息结束 (EoM) 标志。
消息片段应具有最大 T_MTU 字节以避免在较低层中进一步拆分。
DME Configuration Primitives
DME_GET / DME_SET
注意 在某些情况下,设置属性的顺序与 UniPro 的正确操作有关。 因此,更高的 UFS 层应保留 UFS 应用程序调用 DME 配置原语的顺序。 如果由 UFS 自身内部生成(固件生成),则 DME 配置原语应按照 UniPro 规范的定义正确发布。
注意 退出休眠状态后,所有 UniPro 传输层属性(包括 L4 T_PeerDeviceID、L4 T_PeerCPortID、L4 T_ConnectionState 等)将重置为其重置值。 必须在两端正确恢复 所有必需的属性,然后才能恢复通信。
o UniPro 堆栈朝向更高层的指示,在 UniPro 层之一中遇到错误情况
7、UniPro/UFS Transport Protocol Address Mapping:
UniPro 基本上有两个级别的寻址来控制远程 UniPro 实体之间的信息交换
Network Layer (L3): Device ID, lowest level of addressability
o 为未来的 UniPro 设备网络提供。 在连接建立期间,创建连接的一侧使用该值来选择连接远程端的物理实体。 在此连接的生命周期内,它应被视为静态的。

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协议
应实施数据链路层流量类别““Best Effort”(TC 0)
不需要数据链路层流量等级 1(TC1:“低延迟”)
不需要 TX 抢占能力
应提供至少 DL_MTU 字节的数据链路层 RX 和 TX 缓冲
应支持最大大小的 L2 帧 (DL_MTU) 的传输和接收
应支持最大大小的 L3 数据包 (N_MTU) 的传输和接收
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) 的传输和接收。
UFS 主机
应实现 DME_PEER_GET 原语和 DME_PEER_SET 原语,它们在[MIPI-UniPro]中是可选的。
不得使用 DME_SET 原语修改本地 PA_PWRMode 属性,
应仅在以下情况下使用 DME_RESET:上电或硬件复位时,或在 DME_LINKLOST.ind,
不得使用以下原语
o DME_PEER_GET.req、DME_PEER_SET.req、
o DME_ENDPOINTRESET.req,
o DME_HIBERNATE_ENTER.req、DME_HIBERNATE_EXIT.req、
o DME_POWERMODE.req、DME_TEST_MODE.req。
本文深入探讨了UFS(通用闪存)如何建立在MIPI UniPro协议之上,介绍了UFS与UniPro之间的接口和服务原语,以及寻址方案。详细解析了传输层、应用层和控制平面的交互机制。

3574

被折叠的 条评论
为什么被折叠?



