UFS系列二:协议栈

时间:2024-05-31 08:36:03

原文链接:UFS协议栈 

任何一种接口或者协议,都是由一个完整的协议栈组成的。UFS也不例外。

UFS系列二:协议栈

UFS定义了一个完整的协议栈。从上到下,依次为应用层、传输层、数据链路层和物理层。UFS使用MIPI(Mobile Industry Processor Interface ,移动产业处理器接口)联盟的UniPro作为数据链路层和MIPI的M-PHY作为物理层,两者合起来称之为互连层(UFS InterConnect Layer)。与之相比,PCIe接口只定义了下三层(如下图),没有应用层。只有加上上层NVMe,才构成一个完整的SSD通讯协议。

UFS系列二:协议栈

目前UFS没有定义自己的命令(没有UFS Native Command Set),使用的命令是简化的SCSI命令(基于SBC和SPC),由INCITS T10组织定义的。关于SCSI相关协议,大家可以参看相应的spec。

四层中,只有传输层是JEDEC自己定义的。所以,UFS四层中有三层是别人的,命令层是T10的,数据链路层和物理层是MIPI的,传输层是JEDEC自己的。JEDEC移花接木的水平真是高。不由的想到一个广告:“我们不生产水,我们只是大自然的搬运工!”

UFS系列二:协议栈

UFS至今已经有五个版本,每层的版本也不尽相同。

UFS系列二:协议栈

我们依次来看看这几层。

UFS应用层

应用层包括UFS命令集、设备管理器(Device Manager)和任务管理器(Task Manager)。应用层处于整个协议栈的最高层,所有的命令或者请求都来源于该层。它是最高统帅,所有的战术和策略都是它制定的,然后真正去冲锋陷阵的是将军和士兵(应用层下面的传输层和内联层)。

命令集

如前所述,目前UFS没有定义自己的命令,使用简化的SCSI命令。

其中包括一些SPC(SCSI Primary Commands)命令:

UFS系列二:协议栈

和一些SBC(SCSI Block Commands)命令:

UFS系列二:协议栈

UFS除了定义基本的读写命令,也有trim命令(UNMAP),还有其它一些命令。我们不打算深入其中。

设备管理器

顾名思义,设备管理器用以管理UFS设备。

设备管理器有两个功能:一是处理设备级操作,二是管理设备级配置。

前者包括管理设备功耗、设置数据传输相关参数、使能/禁止设备后台操作(Background Operation)以及其它设备相关操作。

后者通过维护和存储一系列的描述符(Deor,后面有章节介绍),通过诸如Query请求修改或获取设备的配置信息。

从UFS层次架构图来看,设备管理器既可以通过下层的传输层为其服务(通过UDM_SAP):

UFS系列二:协议栈

设备管理器也可以绕过传输层(通过UIO_SAP),直接管理与控制互联层:

UFS系列二:协议栈

设备管理器可以通过互联层提供的接口(UIO_SAP),使用一系列的原语(Primitive)直接控制操作互联层(UIC)。这些原语包括重启设备、重启互联层、让物理层进入和退出休眠模式(Hibernate)等原语。

总之,设备管理器既可以走常规渠道(通过传输层,以数据包UPIU的形式),也可以走快速通道(发送UIC能理解的命令,原语的形式)管理和操作设备。

任务管理器

任务管理器用以管理命令队列中的命令。比如任务管理器可以发Abort命令,终止之前发下去的命令。它也可以清空命令队列中的所有命令。具体如下:

UFS系列二:协议栈

当某个命令超时时,系统可能发Abort命令把这个命令终止掉。

UFS传输层

传输层为它上面的应用层服务。当传输层收到应用层命令或者请求后,它会产生UPIU(UFS Protocol Information Unit),把命令块或者请求封装成固定格式的数据结构,然后交由下层传到接收端的传输层。和命令相关的数据、状态,也有相应的UPIU数据包。UPIU是主机和设备进行信息交换的基本数据单元。

UPIU,和SATA中的FIS,PCIe中的TLP,是同一层次的东西,上层命令或者数据都是通过此类数据包封装起来,然后传输到接收端。

如果说应用层是统帅的话,传输层可以认为是将军了。

下一章节为专门介绍UPIU,这里就不细讲。

UFS互联层

UFS互联层包括MIPI UniPro和M-PHY,分别充当UFS数据链路层和物理层的角色。数据链路层负责主机和设备的链接,物理层传输实实在在的物理信号。

UniPro其实不仅仅只定义了数据链路层,它本是也是一个比较完整的协议栈,如下图所示:

UFS系列二:协议栈

传输层(L4)支持多设备之间的双向连接,但UFS只支持CPort0;

网络层(L3)支持通过设备ID寻址多达128个设备,但由于UFS是点到点传输,所以无需网络层;

数据链路层(L2)支持流控、CRC生成和校验、重传机制等,UFS利用了UniPro的数据链路层为主机和设备之间通讯提供可靠的连接。

物理层(M-PHY)使用8/10编码、差分信号串行数据传输。数据传输分高低速模式,每种模式下又有几种不同的速度档。

关于MIPI UniPro和M-PHY,读者可以看相关的spec,这里不细讲。

本章对UFS协议栈做了简单介绍,下一章将会对传输层发起的UPIU进行详细的介绍。