> ## Content Index
> Fetch the complete content index at: https://xiangfufu.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# UFS[UAP-UTP-UIC]-协议信息单元 & SCSI 命令
- URL: https://xiangfufu.com/learning-ufs-scsi/
- Published: 2026-09-21T08:53:23.000Z
- Updated: 2026-09-21T09:50:41.000Z
- Author: 小象
- Tags: 学习记录

​

# 0 前言概览

上一篇文章中我们介绍Hibernate模式时有提到UIC层的MIPI Unipro和M-PHY， 那么UFS的整体架构参考下图，本文会进入到UTP层和UCS层，依据JESD220F内容来介绍一下UFS设备和主机之间的信息传输是什么样的。

## 1 UFS整体结构概览

我们本篇文章主要学习讲述的部分就是下图中圈出部分，知道UFS内的信息传输的结构之前需要先了解一下，UFS的整体架构。

![](https://xiangfufu.com/content/images/2026/09/image-1.png)

## 1.1 UIC 内联层

UIC：UFS InterConnect Layer，

这是UFS的最底层，他的作用是掌管UFS host和UFS device之间的连接，UIC层包含MIPI Unipro和MIPI M-PHY ，如下图两侧的UIC所示，它是一个物理层，形象的可以把他理解为Host和device之前的桥梁吧。

![](https://xiangfufu.com/content/images/2026/09/image-2.png)

## 1.2 UTP 协议传输层

UTP：UFS Transport Protocol Layer

他的作用就是提供灵活的数据包结构，协助UFS控制器封装指令，通过这种命令单元在UFS host和UFS device的UTP层之间传输，这个单元他就是 **UPIU（UFS Protocol Information Unit）**。如果继续前面桥梁的寓意的话，UTP就相当于桥上运输的一个个包裹，并且有一定的运输规则，例如我从一端传输过去一个请求类型的包裹，那么另一端需要给我这一端返回一个“我已经准备就绪”的包裹，诸如此类，具体有什么运输规则我这里不做展开，这里只做概念性介绍。

## 1.3 UAP应用层

UAP：UFS Application Layer

它处于UFS协议栈的最顶层所有的命令或者请求都来自于这里，这一层包含**UCS**和Task manager。其中UCS：UFS Command Set是命令集层负责命令的生成，UFS使用的是简化的SCSI命令，它使用了SCSI的SBC（SCSI Block Commands）和SPC（SCSI Primary Commands）命令，这两种类型命令都共享着相似的CDB（command descriptor block）格式。所以UAP层可以理解为生成包裹中的内容并管理包裹的角色。

## 1.4 小结

本节简单进行UAP, UTP, UIC层的概念描述，大致了解假如host想要从UAP->UTP->UIC传输一个命令给device,总体上三步：第一UAP层生成一个命令，第二UTP层打包命令，第三UIC层传输命令给到device侧的UIC。

---

# 2 UPIU & UCS

上面我们大致了解了UFS架构中都有哪些层，下面我们了解UPIU作为信息传递的单元都有哪些种类型，以及UFS使用的命令集都有什么，以及这两者之间的关系。

## 2.1 UPIU介绍

UPIU都有一定的结构格式固定的大小：basic header+额外字段（用于支持不同的传输类型）

UPIU的basic header格式如下：

![](https://xiangfufu.com/content/images/2026/09/image-3-1.png)

 如下图所示UPIU一共有12种不同的类型，不同的类型就具体体现在basic header中，每个类型都有一个特定的transaction code，transaction code的bit 5表示传输方向，简单来记忆下面12种类型的UPIU传输方向的话，所有xxx OUT、COMMAND、xxx REQUEST都是host到device的,其他的都是device到host的。

![](https://xiangfufu.com/content/images/2026/09/image-4.png)

 每一种UPIU的不同basic header中的详细内容请查阅JESD 220F 10.7章节

UPIU就像一个框架，搭好了框架，往每个部分中放入不同的内容，这些内容就是UFS SCSI commands。

## 2.2 UCS介绍

### 2.2.1 UFS SCSI commands内容

JEDEC中介绍说UFS command包含native command和SCSI command但是一直到最新的JEDEC也没有更新native command的内容，因此目前UFS使用的命令就是部分SCSI命令，

包含SPC & SBC，如下图所示为当前UFS使用的所有的SCSI命令：

![](https://xiangfufu.com/content/images/2026/09/image-5.png)

当然所有上述UFS SCSI command都有各自一定的格式，具体每一种command的结构可以在JESD220F 11.3章中查找到，在此选择一个command来展示其格式，如下为READ(6) command。

![](https://xiangfufu.com/content/images/2026/09/image-6.png)

### 2.2.2 UFS SCSI command与UPIU的关系

每一个command都会有一个command CDB, 这个CDB会通过一个COMMAND UPIU来发送，还是以READ(6) command为例子，如下图所示每一个READ command 的CDB内容与结构就对应UPIU中的CDB部分，UPIU包着SCSI command。

![](https://xiangfufu.com/content/images/2026/09/image-7.png)

## 2.3 小结 

本小节主要讲了UPIU个类型、结构体，UFS SCSI 命令的类型结构，以及这两者之间的关系，下篇文章将从host controller的角度来看一下driver驱动中怎么打包一个上述的命令并传递给UFS设备的。

​