任何一种接口或者协议,都是由一个完整的协议栈组成的。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。 UFS至今已经有五个版本,每层的版本也不尽相同。 我们依次来看看这几层。 UFS应用层 和一些SBC(SCSI Block Commands)命令: UFS除了定义基本的读写命令,也有trim命令(UNMAP),还有其它一些命令。我们不打算深入其中。 设备管理器 设备管理器也可以绕过传输层(通过UIO_SAP),直接管理与控制互联层: 设备管理器可以通过互联层提供的接口(UIO_SAP),使用一系列的原语(Primitive)直接控制操作互联层(UIC)。这些原语包括重启设备、重启互联层、让物理层进入和退出休眠模式(Hibernate)等原语。 任务管理器 当某个命令超时时,系统可能发Abort命令把这个命令终止掉。 传输层为它上面的应用层服务。当传输层收到应用层命令或者请求后,它会产生UPIU(UFS Protocol Information Unit),把命令块或者请求封装成固定格式的数据结构,然后交由下层传到接收端的传输层。和命令相关的数据、状态,也有相应的UPIU数据包。UPIU是主机和设备进行信息交换的基本数据单元。 UFS互联层包括MIPI UniPro和M-PHY,分别充当UFS数据链路层和物理层的角色。数据链路层负责主机和设备的链接,物理层传输实实在在的物理信号。 传输层(L4)支持多设备之间的双向连接,但UFS只支持CPort0; 物理层(M-PHY)使用8/10编码、差分信号串行数据传输。数据传输分高低速模式,每种模式下又有几种不同的速度档。 本章对UFS协议栈做了简单介绍,下一章将会对传输层发起的UPIU进行详细的介绍。 |
|