ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UFS 3.1协议命令集--SCSI命令

2022-03-02 22:32:52  阅读:504  来源: 互联网

标签:-- 指定 LBA 命令 host 3.1 device SCSI UFS


 

目录

 

UFS 3.1协议命令集--SCSI命令

0.前言

​ 记录一下UFS 3.1相关内容。

1.UFS协议栈

​ UFS协议和网络协议类似,也包含了应用层、传输层、数据链路层、物理层。协议栈中主要涉及到三种命令集合,第一种是用于设备管理(device manager)的query命令,其中比较重要的就是用于配置device各个逻辑单元的容量及其相关属性(configuration LU)。第二种是实现UFS设备功能的命令,协议中称其为 UFS Command Set(UCS)。按照JEDEC的想法,UCS以简化版本的SCSI命令为基础的情况下,使用 UFS Native Command Set扩展UFS协议支持的命令与功能。但是到目前为止 UFS协议自定的命令集合还没有被提出,所以目前可以将UCS等价为SCSI命令集。此外还有一种用于任务管理(task manager)的命令被称为TM命令,主机使用TM命令管理已经下发的SCSI命令。

2.SCSI命令作用

2.1 查询类

INQUIRY

​ inquiry命令用于查询device的一些关键信息,例如设备制造商,产品名称,FW版本号等,通常host上电启动时会下发inquiry命令获取设备信息,针对不同厂商的器件可能会使用不同的配置项。

REPORT LUNS

​ report luns命令用于像host上报当前device中使能的normal lun的lun ID,以及device中支持的well know lun 的lun ID。

READ CAPACITY

​ 读取指定逻辑单元的容量和部分配置信息。

REQUEST SENSE

​ request sense命令用于查询指定的lun是否存在sense data,如果有的话会通过data in UPIU返回给主机。同时request sense命令可以清除device复位产生的UAC标记,并且命令不会报失败(可能这才是host发request sense的主要目的)。

TEST UNIT READY

​ test unit ready命令主要用于测试指定逻辑单元是否能够响应命令,但是实际使用场景不多。

SEND DIAGNOSTIC

​ host下发send diagnostic命令让device执行指定的自检操作。但是host并不能判断device是否真的正确的执行了自检,换句话说host无法感知自检结果,所以对于device而言此功能可有可无。

2.2 读写类

PRE-FETCH

​ 主机下发pre-fetch命令,让device将指定LBA的数据取出放在指定的buffer中。从命令的字面意思上看,host想在让device执行预取的操作,提升后续读命令的性能。但是host同样无法感知device是否真的执行的pre-fetch命令。这是因为在不考虑性能的情况下,先下发预取再下发读命令 和 直接下发读命令对于host的结果是完全相同的。同时由于UFS设备资源有限,可能并没有专用的buffer用于预取命令(空闲时device GC等后台操作仍旧会占用buffer)。

READ

​ read命令包含read(6)/read(10)/read(16),不同的read命令LBA的寻址范围存在区别。主机下发读命令读取指定LBA的数据,device FW会通过FTL映射表获得指定LBA对应的物理地址,然后读取相应数据返回给主机。

WRITE

​ write命令包含write(6)/write(10)/write(16),不同的write命令LBA的寻址范围存在区别。主机下发写命令修改指定LBA的数据,device将数据写入到flash之后需要修改FTL映射表(flash无法在有数据的地址上覆盖写)。

UNMAP

​ 主机下发unmap命令要求device清除某个LUN中指定LBA的数据,实际上只会修改映射表。根据LU中bProvisionType的不同,unmap命令被分为erasediscard两种操作。其中erase要求host读取经过unmap的LBA时返回全0,而discard则返回随机值。

FORMAT UNIT

​ 格式化指定逻辑单元,如果指定了device well know lun,则将格式化全盘。实现上与UNMAP命令相似。

SYNCHRONIZE CACHE

​ 将device中指定LBA的数据下刷到flash中,也可以将buffer中所有数据一起下刷,因为host无法预期哪些数据会缓存在device buffer中。

VERIFY

​ 下发verify命令校验指定LBA中的数据能否被正常读出。

SECURITY PROTOCOL OUT

​ 用与下发加密类的操作。例如读取/写入 RPMB LUN的数据,或者配置各个逻辑单元的安全写保护。

SECURITY PROTOCOL IN

​ 用于获取SECURITY PROTOCOL OUT命令携带指令的执行结果,与SECURITY PROTOCOL OUT组成一个完整的命令序列。写入类操作需要2个SECURITY PROTOCOL OUT 加 1个SECURITY PROTOCOL IN。读取类操作需要1个SECURITY PROTOCOL OUT和1个SECURITY PROTOCOL IN。

2.3 管理类

START STOP UNIT

​ 用于调整device的电源状态以及指定LU的启动与关闭。在调整device电源状态的场景中,start stop unit命令与硬件平台息息相关,不同的UFS设备硬件资源不同,需要执行的操作也并不相同。可以通过query配置上电启动时的电源状态。

MODE SENSE

​ 用于查询mode pages当前值/保存值/默认值/可变值,UFS协议中支持control,caching以及read write error recovery。

MODE SELECT

​ 与mode sense配合使用,用于修改mode pages的当前值或者保存值。可以用于配置指定LU的软件写保护。

2.4 杂项

READ BUFFER

​ 读取指定buffer中的数据,可以用与读取device侧的err history信息。

WRITE BUFFER

​ 向指定buffer中写入数据,可以用于FFU升级device FW。

​ 另外read buffer与write buffer通常更多的用于实现VCMD。

标签:--,指定,LBA,命令,host,3.1,device,SCSI,UFS
来源: https://www.cnblogs.com/fengdan8778/p/15957488.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有