UFS4.0协议介绍一
打算基于UFS4.0的spec来学习下UFS的协议规范,参考spec是JESD220F。
UFS的全称是Universal Flash Storage(通用闪存存储),其内部的存储单元依然是NAND,是对eMMC设备的升级。
首先介绍下UFS spec一些常见的术语和定义
Application Client: SCSI命令和任务管理功能请求来源的实体,位于主机侧。
Command Descriptor Block: 用于应用端到设备服务端通信命令的结构,一个CDG可以是最高16字节的固定长度,或12到260字节的变化长度。
Device ID: 一个UFS设备的总线地址。
Devuce Server:位于设备端的一个实体,用来执行SCSI命令和任务管理功能。
Initiator device: 在一次传输中,向目标设备发送SCSI命令请求消息的发起者。
Logical unit: 总线设备一个内部实体,执行特定功能或寻址特定空间,或配置。
Logical Unit number:标识一个Logical unit的数值。
Segment: 指定数量的顺序寻址字节,表示数据结构或数据结构的一部分.
Segment id: 一个16bit的数值,代表一个表格的索引或一个segment 描述符的地址,或只是一个绝对地址。
SCSI Request Block: 一个包含多个字节的SCSI命令的数据包,和执行命令操作所需的附加上下文信息。一个SCSI Request Block是由host创建,并且目标是一个特定的总线设备。
Target device: 在事务中,来自发起方设备的SCSI命令请求消息的接收方
Task: 是一个SCSI命令,它包括完成所有数据传输的所有事务和满足命令所请求服务要求的状态响应。
UFS可以看做是eMMC设备的升级,很多eMMC的功能在UFS设备上都保留了下来,比如RPMB,boot part。UFS最大的改变就是在于接口总线,采用了串行总线取代并行总线,并且由半双工变全双工,大大提高了总线的速率。并且引入了类似OSI的分层通信模型。
UFS结构图
上图来自UFS spec,可以看到UFS协议采用分层的架构, 分为Applicantion layer,Transport protocol layer,interConnect layer。
最上层是Applicantion layer,由你UFS命令集,设备管理和任务管理三部分组成。其中,UCS负责处理普通的命令,比如read, write等。UFS的命令集是基于SCSI命令集。任务管理处理命令队列控制相关的命令,设备管理提供设备层控制,像Query Request和低层级的link-layer控制。
Service Access points
如上图所示,UAP和UTP是通过XXX_SAP进行交互。比如Device manage,就是通过UIO_SAP和UDM_SAP进行交互。SAP就是服务接入点。UDM_SAP是UTP暴露出来的服务接入点。比如Query Request,Device control等。
UIO_SAP是UIC层暴露的服务接入点。UIO_SAP corresponds to DME_SAP。DMS_SAP提供了服务原语,包含重置整个Unipro协议栈和重置UFS设备。
DME_RESET : It is used when the UniPro stack has to be reset.
• DME_ENDPOINTRESET: It is used when UFS host wants the UFS device to perform a reset。
其实我对SAP的概念也不太理解,不知道它究竟是如何实现的。是一个软件概念还是一个硬件接口?
UFS system Model
UFS主机由希望和UFS Device进行通信的应用程序组成。UFS driver旨在通过UFS HCI(主机控制器接口)来管理主机控制器。
UFS Interconnect (UIC) Layer由MIPI unipro,提供基本的传输能力,和MIPI M-PHY组成。对于UFS,Unipro负责管理链路,包括PHY。
对于互联层,CPort就是unipro定义的基本接口。用来传输数据,也包括控制和配置信息。