目录
十、UPIU数据包格式详解
1、Transaction Type(类型)
2、Flags(附加信息)
其它
3、LUN(逻辑单元号):
4、Task Tag(任务标签):
5、Command Type(命令类型):
6、Initiator ID(发起者ID):
7、Response(响应):
8、Status(状态):
9、Query Function(查询功能)、Task Management Function(任务管理功能)
(1)任务管理功能值及其描述
(2)设备管理器功能字段值及其描述
(3)函数操作码值及其描述
10、Device Information(设备信息)
UFS协议—新手快速入门(一)【1-4】
UFS协议—新手快速入门(二)【5-6】
UFS协议—新手快速入门(三)【7-9】
十、UPIU数据包格式详解
UPIU(UFS Protocol Information Unit,UFS协议信息单元)是UFS(Universal Flash Storage,通用闪存存储)协议中用于传输命令、数据和状态信息的数据包。它具有固定的格式,是UFS协议的核心组成部分。每个UPIU都有一个Header,再加上跟每个UPIU相关的域。我们可以了解到以下关于UPIU数据包格式的信息:
- Header(头部):每个UPIU都有一个12字节的Header,这是UPIU数据包的开始部分,包含了UPIU的基本信息。
- 最小和最大:一个UPIU(包括Header)的最小大小为32字节,最大可以达到65600字节24。
- 命令或请求的执行:UFS采用“客户-服务器”架构,主机(Client)发送命令或请求给UFS设备(Target),然后设备执行命令并返回状态信息。命令的执行包括命令阶段、数据阶段和状态阶段3。
- 命令类型:UFS主机通过不同类型的UPIU来发送命令请求、传输数据或返回命令状态信息。例如,COMMAND UPIU用于封装UFS命令模块发送的命令,TASK MANAGEMENT REQUEST UPIU用于封装任务管理器的请求,QUERY REQUEST UPIU用于封装设备管理器的请求。
UPIU(UFS Protocol Information Unit)基础头部格式的描述
1、Transaction Type(类型)
Transaction Type”字段。这个字段在UPIU(UFS Protocol Information Unit)的Header中用来标识该UPIU的类型。
- 事务代码的第5位表示UPIU的流向和发起者:当为'0'时,发起者是发起者设备;当为'1'时,发起者是目标设备。
2、Flags(附加信息)
只对命令和其响应的UPIU有用,指定命令的属性。
- "-" 表示该位是保留的或在该UPIU类型中未使用。
- "R" 和 "W" 在Command UPIU中分别表示读和写操作。
- "Cp(2)" 在Command UPIU的Bit 2位置表示命令优先级。
- "ATTR" 命令属性域。UFS命令有simple ,ordered 和Head of Queue命令。
- "O", "U", "D" 在Response UPIU中分别表示操作类型、是否为未请求的响应和数据传输方向。
其它
1、Simple Command(简单命令)
- 特点:不需要特别处理,按照接收顺序执行。
- 执行策略:通常遵循先到先服务(FCFS)的原则。
2、Ordered Command(有序命令)
- 特点:必须在该命令之前的所有命令完成后才能执行。
- 执行策略:确保命令的顺序性,类似于“明星出场前清场”,即前面的命令(“观众”)需要先被处理。
3、Head of Queue Command(队列头部命令)
- 特点:接收到后立即放置于命令队列的头部并执行。
- 执行策略:具有高优先级,类似于“插队”,打破了常规的排队顺序,需要立即被处理。
4、CP(Command Priority,命令优先级)
- 含义:表示命令的优先级,1表示高优先级,0表示低优先级。
- 适用范围:仅适用于简单命令。高优先级的简单命令可能会在命令队列中优先于其他简单命令执行。
3、LUN(逻辑单元号):
- 概念来源:UFS协议继承自SCSI,采用了逻辑单元的概念。
- 作用:将存储设备的物理空间划分为多个逻辑空间,每个逻辑空间都是独立的,并且从LBA(Logical Block Addressing,逻辑块寻址)0开始。
- 标识:每个逻辑空间通过LUN进行标识。
- 寻址:主机在发送命令或请求时,通过指定LUN来确定命令的目标逻辑空间。
- 与NVMe的关系:UFS的LU概念与NVMe中的Namespace概念相似,都是用来标识存储设备的逻辑分区。
4、Task Tag(任务标签):
- 支持:UFS支持命令队列,允许主机同时发送多个命令给设备。
- 目的:为了区分不同的命令或请求,主机需要为每个命令分配一个唯一的标签。
- 关联:与特定命令UPIU相关的数据UPIU和状态UPIU会具有相同的Tag,确保数据和状态信息与原始命令正确关联。
- 处理:设备使用这个Tag来识别和管理命令的执行顺序,以及与命令相关的数据和状态的匹配。
- 一致性:在上图读命令的整个过程中,从命令发起到数据传输,再到最终的命令状态响应,所有的UPIU都使用相同的Task Tag,确保整个命令处理过程的连贯性和可追踪性。
- 命令执行:设备接收到读命令后,执行操作,并将数据通过DATA IN UPIU发送回主机,最后通过RESPONSE UPIU发送命令执行的状态。
- 错误处理:如果命令执行过程中出现问题,RESPONSE UPIU将携带相应的错误状态信息,主机可以通过Task Tag将此状态与原始命令关联起来。
- LUN和Task Tag是UFS协议中用于确保命令正确寻址和区分的关键机制。
- LUN允许对存储设备的逻辑空间进行寻址,而Task Tag则允许在复杂的命令队列中跟踪和管理每个命令的状态
5、Command Type(命令类型):
- 分类:
- 简化的SCSI命令:UFS目前使用的命令大多来源于SCSI。
- UFS原生命令:UFS协议特有的命令,目前尚未制定。
- 用户自定义命令:根据用户需求定制的命令。
- 默认值:如果没有用户自定义命令,该域通常设置为0,表示使用的是SCSI命令。
6、Initiator ID(发起者ID):
- 用途:标识发送命令的主机。
- 常见值:在大多数手机系统中,一个主机连接一个UFS设备,因此主机ID通常为0。
7、Response(响应):
- 功能:设备使用该字段告知主机命令或请求的执行情况。
8、Status(状态):
- 功能:设备返回命令执行的状态信息。
- SCSI命令状态:UFS协议定义了几种状态,用于指示SCSI命令的执行结果。
9、Query Function(查询功能)、Task Management Function(任务管理功能)
查询功能(Query Function):
- 状态报告:提供文件系统的整体状态,包括使用情况、性能指标等。
- 元数据查询:检索文件的元数据,这可能包括文件的创建者、标签、注释等。
- 文件属性查看:查看文件的详细信息,如大小、类型、权限、所有者等。
- 目录列表:列出指定目录下的所有文件和子目录。
- 文件检索:允许用户根据文件名、扩展名、大小、创建日期、修改日期等属性来搜索文件。
任务管理功能(Task Management Function):
- 任务调度:允许用户或系统自动安排任务在特定时间执行,例如备份、索引更新等。
- 任务监控:实时监控正在进行的任务,包括它们的状态、进度和可能的错误。
- 任务日志:记录任务的执行历史,包括成功、失败和警告信息。
- 任务优先级管理:设置任务的优先级,以确保关键任务能够优先执行。
- 任务依赖性管理:管理任务之间的依赖关系,确保任务按正确的顺序执行。
(1)任务管理功能值及其描述
(2)设备管理器功能字段值及其描述
(3)函数操作码值及其描述
10、Device Information(设备信息)
- 设备信息域通常与命令或请求无关,它属于设备附带的信息。
- 在UFS主从架构中,设备不能主动向主机报告其状态,除非主机发出了命令或请求。
- 如果设备有特殊事件,它可以在返回RESPONSE UPIU时,将这些事件信息顺带通知主机。
- 设备信息域仅对RESPONSE UPIU有效。
下期预告:UFS协议—新手快速入门(五)