蛋蛋读UFS之二:UFS协议栈
任何一种接口或者协议,都是由一个完整的协议栈组成的。UFS也不例外。
UFS定义了一个完整的协议栈。从上到下,依次为应用层、传输层、数据链路层和物理层。UFS使用MIPI(Mobile Industry Processor Interface ,移动产业处理器接口)联盟的UniPro作为数据链路层和MIPI的M-PHY作为物理层,两者合起来称之为互连层(UFS InterConnect Layer)。与之相比,PCIe接口只定义了下三层(如下图),没有应用层。只有加上上层NVMe,才构成一个完整的SSD通讯协议。
目前UFS没有定义自己的命令(没有UFS Native Command Set),使用的命令是简化的SCSI命令(基于SBC和SPC),由INCITS T10组织定义的。关于SCSI相关协议,大家可以参看相应的spec。
四层中,只有传输层是JEDEC自己定义的。所以,UFS四层中有三层是别人的,命令层是T10的,数据链路层和物理层是MIPI的,传输层是JEDEC自己的。JEDEC移花接木的水平真是高。不由的想到一个广告:“我们不生产水,我们只是大自然的搬运工!”
UFS至今已经有五个版本,每层的版本也不尽相同。
我们依次来看看这几层。
UFS应用层
应用层包括UFS命令集、设备管理器(Device Manager)和任务管理器(Task Manager)。应用层处于整个协议栈的最高层,所有的命令或者请求都来源于该层。它是最高统帅,所有的战术和策略都是它制定的,然后真正去冲锋陷阵的是将军和士兵(应用层下面的传输层和内联层)。
命令集
如前所述,目前UFS没有定义自己的命令,使用简化的SCSI命令。
其中包括一些SPC(SCSI Primary Commands)命令:
和一些SBC(SCSI Block Commands)命令:
UFS除了定义基本的读写命令,也有trim命令(UNMAP),还有其它一些命令。我们不打算深入其中。
设备管理器
顾名思义,设备管理器用以管理UFS设备。
设备管理器有两个功能:一是处理设备级操作,二是管理设备级配置。
前者包括管理设备功耗、设置数据传输相关参数、使能/禁止设备后台操作(Background Operation)以及其它设备相关操作。
后者通过维护和存储一系列的描述符(Descriptor,后面有章节介绍),通过诸如Query请求修改或获取设备的配置信息。
从UFS层次架构图来看,设备管理器既可以通过下层的传输层为其服务(通过UDM_SAP):
设备管理器也可以绕过传输层(通过UIO_SAP),直接管理与控制互联层:
设备管理器可以通过互联层提供的接口(UIO_SAP),使用一系列的原语(Primitive)直接控制操作互联层(UIC)。这些原语包括重启设备、重启互联层、让物理层进入和退出休眠模式(Hibernate)等原语。
总之,设备管理器既可以走常规渠道(通过传输层,以数据包UPIU的形式),也可以走快速通道(发送UIC能理解的命令,原语的形式)管理和操作设备。
任务管理器
任务管理器用以管理命令队列中的命令。比如任务管理器可以发Abort命令,终止之前发下去的命令。它也可以清空命令队列中的所有命令。具体如下:
当某个命令超时时,系统可能发Abort命令把这个命令终止掉。
UFS传输层
传输层为它上面的应用层服务。当传输层收到应用层命令或者请求后,它会产生UPIU(UFS Protocol Information Unit),把命令块或者请求封装成固定格式的数据结构,然后交由下层传到接收端的传输层。和命令相关的数据、状态,也有相应的UPIU数据包。UPIU是主机和设备进行信息交换的基本数据单元。
UPIU,和SATA中的FIS,PCIe中的TLP,是同一层次的东西,上层命令或者数据都是通过此类数据包封装起来,然后传输到接收端。
如果说应用层是统帅的话,传输层可以认为是将军了。
下一章节为专门介绍UPIU,这里就不细讲。
UFS互联层
UFS互联层包括MIPI UniPro和M-PHY,分别充当UFS数据链路层和物理层的角色。数据链路层负责主机和设备的链接,物理层传输实实在在的物理信号。
UniPro其实不仅仅只定义了数据链路层,它本是也是一个比较完整的协议栈,如下图所示:
传输层(L4)支持多设备之间的双向连接,但UFS只支持CPort0;
网络层(L3)支持通过设备ID寻址多达128个设备,但由于UFS是点到点传输,所以无需网络层;
数据链路层(L2)支持流控、CRC生成和校验、重传机制等,UFS利用了UniPro的数据链路层为主机和设备之间通讯提供可靠的连接。
物理层(M-PHY)使用8/10编码、差分信号串行数据传输。数据传输分高低速模式,每种模式下又有几种不同的速度档。
关于MIPI UniPro和M-PHY,读者可以看相关的spec,这里不细讲。
本章对UFS协议栈做了简单介绍,下一章将会对传输层发起的UPIU进行详细的介绍。
田园诗人之园: The RPMB is contained in a unique well known logical unit whose size is defined in the RPMB Unit 4645 Descriptor. RPMB well known logical unit size shall be a multiple of 128 Kbytes, therefore its minimum 4646 size is 128 Kbytes. The contents of the RPMB well known logical unit can only be read or written via 4647 successfully authenticated read and write accesses. The data may be overwritten by the host but can never 4648 be erased. 您好,咱们RPMB LU的介绍是不是存在点问题?