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

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

3天内不再提示

更深的理解UPIU数据包的格式

SSDFans 来源:未知 作者:李倩 2018-06-11 09:43 次阅读

最佳留言者将获得《深入浅出SSD电子书一本

UPIU是命令、数据和状态信息传输的载体,是UFS协议栈的灵魂。UPIU是有固定格式的数据包,我们分析数据包格式,有助于我们更深的理解UPIU以及整个UFS协议。这一章我们看看UPIU数据包的格式。

每个UPIU都有一个12字节的Header,再加上跟每个UPIU相关的域。一个UPIU(包括Header)最小为32字节,最大为65600字节。

我们看通用的Header,具体如下:

我们看看其中的一些域。

1. Transaction Type:就是指定该UPIU是前面12个UPIU中的哪一个,具体如下:

2. Flags:只对命令和其响应的UPIU有用,指定命令的属性。

R: 如果该比特置起来,说明该命令是读命令;

W: 如果该比特置起来,说明该命令是写命令;

ATTR: 命令属性域。UFS命令有simple ,ordered 和Head of Queue命令。

那么,这些命令有什么不一样呢。

Simple command:就是一般的命令,设备收到这样的命令无需特别处理,一般谁先到谁先执行。

Ordered command:设备收到这样的命令,应该把该命令之前的命令都处理完,才能处理该命令。(明星出场,先清个场。)

Head of Queue command:设备收到该命令后,放到命令队列的头部,立刻执行。(又见插队,这个没有上过幼儿园吧,连基本的排队意识都没有。)

CP: 表示命令的优先级。1为高优先级,0为低优先级。注意,该比特只适合简单命令(simple command)。

3. LUN: Logical Unit Number。UFS上层协议来自SCSI,它继承了LU的概念,即把存储物理空间划分成若干个逻辑空间,每个逻辑空间都是从LBA 0开始,用LUN标识。主机在发命令或者请求时,应该在命令中指定该命令是发给哪个LU。LUN用以寻址。UFS的LU和NVMe中的Namespace一个概念。

4. Task Tag:UFS支持命令队列,主机可以同时发送很多个命令给设备。为区分这些命令或者请求,主机需要为每个命令贴上标签Tag。然后跟这个命令或者请求相关的数据UPIU和状态UPIU,都具有跟这个命令UPIU一样的Tag。

举例:

对这个读命令来说,COMMAND UPIU、所有的DATA IN UPIU和RESPONSE UPIU都具有同一个task tag。

5. Command Type:命令类型。UFS预期有三类命令:一是简化的SCSI命令,二是UFS自己原生的命令,三就是用户自定义命令。目前UFS的命令都是从别人家(SCSI)借来的,自己一个命令也没有制定。如用户无自定义命令,该域就是0(SCSI命令)。

6. Initiator ID: 主机的ID,手机系统中一般一个主机连接一个UFS设备,所以主机ID一般为0。

7. Response:设备告知主机命令或请求执行是否成功。

8. Status:设备返回命令执行状态。对SCSI命令的状态信息,UFS有如下状态:

9. Query Function, Task Manag. Function:指定具体Query和Task Management功能。

任务管理器有如下功能(Function):

设备管理器有如下功能:

总的来说,就是读写设备属性(Attributes)、标识(flags)和描述符(descriptors)。

关于设备属性、标识和描述符,后面有专门章节讲述。

10. Device Information:设备信息。该域往往跟该命令或者请求无关,属于设备夹带私货。因为UFS主机和设备是主从关系,如果UFS主机没有向设备发命令或者请求,UFS设备是不能主动向主机报告设备状况的。如果UFS设备有特殊事件发生,它可以趁返回RESPONSE UPIU的时候把事件顺带告诉主机。所以该域只对RESPONSE UPIU有效。

以上是UPIU头的基本信息,这个是所有UPIU都具有的。除此之外,每个UPIU有它独有的其它信息,UFS spec上都有介绍,读者可以自行阅读。

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

    关注

    0

    文章

    248

    浏览量

    24338
  • UFS
    UFS
    +关注

    关注

    6

    文章

    103

    浏览量

    23833

原文标题:蛋蛋读UFS之四:UPIU数据包格式

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

收藏 人收藏

    评论

    相关推荐

    华纳云:服务器平均响应时间和数据包大小之间的影响

    服务器的平均响应时间与数据包大小有一定的关系,但这只是影响响应时间的众多因素之一。具体来说,数据包大小对服务器响应时间的影响可以从以下几个方面来理解: 1.数据传输时间 影响: 较大的
    的头像 发表于 10-10 14:01 135次阅读

    请问DCTCP与DCUDP 的登录数据包和心跳数据包与服务器端是如何交互的?

    DCTCP与DCUDP的登录数据包和心跳数据包与服务器端是如何交互的?
    发表于 07-25 06:37

    esp8266怎么做才能每秒发送更多的数据包呢?

    数据包的速度,即每秒大约 50 个 UDP 数据包。高波特率唯一改变的是,在数据包较大的情况下,我可以以与轻量级数据包相同的速度发送数据包
    发表于 07-22 08:00

    使用AT SAVETRANSLINK时UDP数据包丢失怎么解决?

    Android 发送一个小 UDP 数据包(5 字节)。这个小数据包被我的微控制器在UART上接收到。微控制器将更大的数据包(可变长度,约 100 字节)发送回 UART。ESP在UART上接
    发表于 07-18 07:17

    能否在ESP结束之前通过串行端口停止传入的UDP数据包的传输以解析下一个UDP数据包

    我正在做一个artnet节点, 它收到几个 UDP 广播数据包,工作正常,但是: 其中一些必须使用,其中一些必须丢弃, mi问题是:所有传入的数据包都出现在带有IPD命令的串行端口上, 并且我需要
    发表于 07-16 06:18

    请问如何使用AT CIPSEND或AT CIPSENDBUF发送多个数据包

    我可以使用 AT CIPSEND 发送单个数据包。但是我必须发送一系列二进制数据包。如何使用AT CISEND或AT CIPSENDBUF发送多个数据包,什么是正确的算法? 到目前为止,我尝试
    发表于 07-15 07:37

    NONOS如何检查是否实际发送了UDP数据包

    我发现进入深度睡眠通常无法传输发送的最后一个 UDP 数据包。我现在将睡眠延迟 30 毫秒,这是一个黑客。 我宁愿有一种方法来检查是否可以休眠,或者以其他方式能够注册指示数据包已发送的回调(无线电发送缓冲区为空)。 说清楚:我需要知道是 ESP 发送了它,而不是像 U
    发表于 07-12 06:14

    在AN65974中短数据包和零长数据包是什么意思?

    在 AN65974 中,短数据包和零长数据包是什么意思? 非常感谢!
    发表于 05-30 07:41

    如何在AIROC GUI上获取良好数据包和总数据包

    使用 IQxel-MW LifePoint 作为发生器并发送波形BT_1DH5_00001111_Fs80M.iqvsg,但无法在 AIROC 工具中接收数据包。 以下是从 IQxel 发送
    发表于 05-22 06:39

    请问高端网络芯片如何处理数据包呢?

    随着网络芯片带宽的持续提升,其内部数据包处理单元的工作负载也随之增加。然而,如果处理单元无法与网络接口的传入速率相匹配,将无法及时处理数据包,这不仅会导致数据包随机丢失,更会降低网络的吞吐量。
    的头像 发表于 04-02 16:36 555次阅读
    请问高端网络芯片如何处理<b class='flag-5'>数据包</b>呢?

    STM32H7接收数据包异常,一接收的数据出现两发送的内容怎么解决?

    );__HAL_UART_DISABLE_IT( huart1, DMA_IT_HT); 2、发送数据包1
    发表于 03-08 08:05

    DPDK在AI驱动的高效数据包处理应用

    传统的数据包处理方式是数据包先到内核最后再到用户层进行处理。这种方式会增加额外的延迟和CPU开销,严重影响数据包处理的性能。 DPDK 绕过内核,在用户空间中实现快速数据包处理。
    的头像 发表于 02-25 11:28 824次阅读
    DPDK在AI驱动的高效<b class='flag-5'>数据包</b>处理应用

    使用P4和Vivado工具简化数据包处理设计

    电子发烧友网站提供《使用P4和Vivado工具简化数据包处理设计.pdf》资料免费下载
    发表于 01-26 17:49 0次下载
    使用P4和Vivado工具简化<b class='flag-5'>数据包</b>处理设计

    eMMC响应的格式和类型

    eMMC响应有两种长度的数据包,分别为48 Bits和136 Bits,eMMC响应的格式如下图所示。
    的头像 发表于 12-12 13:38 1914次阅读
    eMMC响应的<b class='flag-5'>格式</b>和类型

    Linux场景下数据包是如何在协议层传输的

    所有互联网服务,均依赖于TCP/IP协议栈。懂得数据是如何在协议栈传输的,将会帮助你提升互联网程序的性能和解决TCP相关问题的能力。 我们讲述在Linux场景下数据包是如何在协议层传输的。 1、发送
    的头像 发表于 11-11 11:33 1053次阅读
    Linux场景下<b class='flag-5'>数据包</b>是如何在协议层传输的