0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

我们看看UFS中命令或请求是怎么执行的

SSDFans 来源:未知 作者:李倩 2018-06-08 15:29 次阅读

UFS中流淌的数据包叫做UPIU(UFS Protocol Information Unit,UFS协议信息单元),它是固定格式的数据结构,用以传输应用层发来的命令或者请求,以及跟它们相关的数据或者状态信息。它就是SATA中的FIS,PCIe中的TLP。我们看看UFS中命令或请求是怎么执行的。

UFS采用“客户-服务器”或者说主从的命令架构,UFS主机(Client,命令发起者,Initiator,他们都是一个意思)发送命令或者请求(Request)给UFS设备(服务器,Target),然后UFS设备执行命令并返回命令状态(Response)。

一个命令或者请求的执行包含下面几个阶段:

命令阶段:主机发起命令或请求给设备,这是“因”;

数据阶段:传输跟命令相关的数据,比如读写命令,都涉及到数据的传输;有些命令不涉及数据的传输,所以这个阶段并不是总是存在的,跟具体命令和请求相关。

状态阶段:设备执行完命令,必须给主机返回命令执行状态信息。这个是“果”,必不可少的。在PCIe中,有Posted和Non-posted的TLP。对前者,命令执行者无需返回命令执行状态给命令发起者,对后者,命令执行者必须返回状态给命令发起者。对UFS来说,它的命令总是non-posted,即设备必须返回命令状态给主机。

在命令执行过程中,无论是处在哪个阶段,UFS主机和设备间都是通过UPIU进行信息的交互。

1. UFS主机通过命令或者请求UPIU发命令请求给设备;

2. UFS主机或者设备通过UPIU传输数据;

3. UFS设备通过UPIU返回命令状态信息给主机。

下面我们看看UFS当中都有哪些UPIU。

命令或者请求UPIU

前一章看到,应用层包括UFS命令、设备管理器和任务管理器三个模块,传输层根据不同模块发来的命令或者请求,分别产生不同类型的UPIU。

UFS命令模块发送简化版本的SCSI命令,当传输层收到命令请求后,它会生成:COMMAND UPIU,把命令封装起来。

应用层通过任务管理器来管理任务队列,比如终止(Abort)和查询命令队列中的命令。当传输层收到来自任务管理器中的请求后,它会生成:TASK MANAGEMENT REQUEST UPIU,把请求封装起来。

UFS通过设备管理器来管理UFS设备,比如设置和查询UFS设备的配置(Configuration)。当传输层收到来自设备管理器发来的请求后,它会生成:QUERY REQUEST UPIU,把请求封装起来。

数据传输相关UPIU

当主机发送了类似读命令给设备之后,设备需要返回数据给主机,设备通过DATA IN UPIU向主机传输数据。

当主机发送了类似写命令给设备之后,主机需要往设备写数据,主机通过DATA OUT UPIU向设备传输数据。

UFS的主机是个暖男,它在向设备写数据的时候,会考虑到设备这个时候能不能接收数据(因为设备可能这个时候没有足够的空间接收主机数据),它在向设备发了写命令之后,不会立刻把数据传输给设备,而是在那里等设备的通知。当设备准备好接收数据,以及接收多少数据,设备通过READY TO TRANSFER UPIU (RTT)告知主机。当主机接收到该RTT后,才开始按照RTT的信息传输数据。至于每次传输数据的多少,RTT中包含这信息,主机根据RTT进行传输。

所以,主机只有在收到设备的RTT,才能发DATA OUT UPIU!

注意,读命令无需这种机制。因为设备从闪存中获得数据后,是设备控制数据的传输。对主机来说,它在发读命令之前,已经准备好足够的空间用以接收数据,所以不存在主机没有空间接收数据的情况。

状态UPIU

前面看到,主机有三种请求:SCSI命令,任务管理器发出的Task Management Request,以及设备管理器发出的Query request。针对不同的命令或者请求,设备在执行完相应的任务后,分别返回对应的状态UPIU给主机。

其它UPIU

除了以上常规的UPIU,还有其它一些UPIU作为他用。

设备上电后,主机检测是否与之连接,会发NOP OUT UPIU给设备。我们平时想看看跟某个电脑或者网站能否连接上,会发一个ping命令。NOP OUT UPIU跟ping命令作用类似。

当设备收到NOP OUT UPIU后,会返回NOP IN UPIU。主机收到该UPIU后,确认与设备连接,然后可以进行后续操作。

最后一个UPIU就是REJECT UPIU。当设备收到一个无效的UPIU时,它会发REJECT UPIU拒绝无效的UPIU。

UPIU汇总

偷个懒,我就直接把UFS spec这张表贴这里。数了数,一共12个UPIU。经过我之前的解释,读者现在应该清楚每个UPIU的作用了。

读写命令中UPIU交互例子

前面我们都是单个来看UPIU,现在我们以读写命令为例,看看他们是如何组合完成命令处理的。

首先是一个“主机往设备读取96KB数据”的例子。

首先,主机发送读96KB数据的命令给设备,然后设备执行命令,分了三批把数据返回给主机,最后返回命令执行状态给主机。

然后是一个“主机往设备写64KB数据”的例子。

主机发送写64KB数据的命令给设备,然后在那里等设备响应。很快,设备说,你可以传24KB数据下来了,于是主机写24KB数据给设备;接着,设备又来通知说可以继续传32KB数据,主机照做。最后,设备通知说可以把最后8KB数据也传过来,主机于是写最后8KB数据。最后,主机收到设备命令执行完成的响应。

我们看到,主机必须等收到RTT后才能启动数据传输!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 管理器
    +关注

    关注

    0

    文章

    246

    浏览量

    18511
  • 数据包
    +关注

    关注

    0

    文章

    261

    浏览量

    24396
  • UFS
    UFS
    +关注

    关注

    6

    文章

    104

    浏览量

    24058

原文标题:蛋蛋读UFS之三:UFS数据包UPIU

文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linuxxargs命令的使用方法

    xargs命令从标准输入另一个命令的输出读取文本行,并将其转换为命令执行
    发表于 11-25 15:14 7080次阅读
    Linux<b class='flag-5'>中</b>xargs<b class='flag-5'>命令</b>的使用方法

    请问Z-Stack Home中发送端的命令请求是如何对应接收端的回调函数的?

    本帖最后由 一只耳朵怪 于 2018-5-24 14:26 编辑 我在学习Z-Stack Home1.2.1协议栈时,有如下两个问题,望各位指教,谢谢!1. 不太明白发送端的命令请求是
    发表于 05-22 07:59

    UFS Card是什么?

    SD UHS-II Card在高階手機的應用, CPU 大都已支援 UFS Interface, 可以直接接 eUFS 顆粒. 另外 UFS Card的介面可以透過 USB 的介面實現, 隨然受限於
    发表于 09-17 09:05

    扫描请求是否在中央(TX)外围(RX)模块上产生任何事件?

    扫描请求是否在中央(TX)外围(RX)模块上产生任何事件?有人能告诉我更多关于扫描请求格式的信息吗?除了“它存在”以外,我一直在寻找更多的信息。
    发表于 09-23 09:19

    UFS电源管理的相关资料推荐

    转载:蛋蛋读UFS之十:UFS电源管理 FS是手机存储设备,因此对功耗要求很高。我们看看UFS的电源管理。三个供电电压,VCC,VCCQ和
    发表于 11-12 06:16

    手机研发必须了解的UFS相关知识

    。  再形象一点,我们以搬运货物的例子来比较一下eMMC和UFS命令执行方式:  现在的手机,应用非常丰富,你要一边斗地主,一边听歌,还要聊微信,多线程操作。由于全双工和
    发表于 03-29 11:08

    USB主机如何识别USB设备及请求命令

    标准的USB设备请求命令是用在控制传输的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成),请看回问答四的内容。标准USB设备请求命令
    发表于 07-16 10:36 7752次阅读

    什么是UFS?为什么说UFS是手机存储的未来?

    UFS支持命令队列,就是主机一下可以发很多个命令下去,然后UFS设备支持并行和乱序执行,谁先完成谁先返回状态。这种
    的头像 发表于 06-04 15:38 6.4w次阅读

    看看UFS的电源管理

    除此之外,M-PHY还有一种更加省电的状态,那就是HIBERN8 (Hibernate,休眠状态),这种状态下,M-PHY极为省电。UFS主机和UFS设备不可能一直交互数据,总有闲下来的时候。当
    的头像 发表于 07-05 16:53 9363次阅读
    来<b class='flag-5'>看看</b><b class='flag-5'>UFS</b>的电源管理

    UFS系列十:UFS电源管理

    转载:蛋蛋读UFS之十:UFS电源管理 FS是手机存储设备,因此对功耗要求很高。我们看看UFS的电源管理。三个供电电压,VCC,VCCQ和
    发表于 11-07 09:06 22次下载
    <b class='flag-5'>UFS</b>系列十:<b class='flag-5'>UFS</b>电源管理

    LabVIEW执行系统命令VI介绍

    LabVIEW自带一个执行系统命令VI(System Exec.vi),位于函数选板的“互连接口”>>“库与可执行程序”>>“执行系统命令
    的头像 发表于 04-25 11:47 9383次阅读
    LabVIEW<b class='flag-5'>中</b><b class='flag-5'>执行</b>系统<b class='flag-5'>命令</b>VI介绍

    为什么shell脚本执行命令要加exec?这个exec有什么作用呢?

    正常情况下,如果我们想要在shell脚本执行一个命令我们只用将该命令原样写到这个shell脚
    的头像 发表于 08-21 09:10 3148次阅读
    为什么shell脚本<b class='flag-5'>中</b><b class='flag-5'>执行命令</b>要加exec?这个exec有什么作用呢?

    linuxsource命令的用法

    配置文件执行脚本。 source命令的语法为: source filename . filename 其中,filename是脚本文件的路径。 当source
    的头像 发表于 11-08 14:35 2343次阅读

    uboot命令执行过程是什么

    U-boot是通过执行u-boot提供的命令来加载Linux内核的,其中 命令bootm的功能 即为从memory启动Linux内核映像文件。 在讲解bootm加载内核之前,先来看看u
    的头像 发表于 12-04 17:31 812次阅读

    bootm命令执行流程

    Bootm命令用来从memory启动内核,bootm命令执行流程如下图所示。 在串口终端输入bootm命令后,执行do_bootm函数来完
    的头像 发表于 12-04 17:33 1170次阅读
    bootm<b class='flag-5'>命令</b>的<b class='flag-5'>执行</b>流程