转自:蛋蛋读UFS之二:UFS协议栈

任何一种接口或者协议,都是由一个完整的协议栈组成的。UFS也不例外。

UFS定义了一个完整的协议栈。从上到下,依次为应用层、传输层、数据链路层和物理层。UFS使用MIPI(Mobile Industry Processor Interface ,移动产业处理器接口)联盟的UniPro作为数据链路层和MIPI的M-PHY作为物理层,两者合起来称之为互连层(UFS InterConnect Layer)。与之相比,PCIe接口只定义了下三层(如下图),没有应用层。只有加上上层NVMe,才构成一个完整的SSD通讯协议。

目前UFS没有定义自己的命令(没有UFS Native Command Set),使用的命令是简化的SCSI命令(基于SBC和SPC),由INCITS T10组织定义的。关于SCSI相关协议,大家可以参看相应的spec。

四层中,只有传输层是JEDEC自己定义的。所以,UFS四层中有三层是别人的,命令层是T10的,数据链路层和物理层是MIPI的,传输层是JEDEC自己的。JEDEC移花接木的水平真是高。不由的想到一个广告:“我们不生产水,我们只是大自然的搬运工!”

UFS至今已经有五个版本,每层的版本也不尽相同。

我们依次来看看这几层。

UFS应用层

应用层包括UFS命令集、设备管理器(Device Manager)和任务管理器(Task Manager)。应用层处于整个协议栈的最高层,所有的命令或者请求都来源于该层。它是最高统帅,所有的战术和策略都是它制定的,然后真正去冲锋陷阵的是将军和士兵(应用层下面的传输层和内联层)。

命令集

如前所述,目前UFS没有定义自己的命令,使用简化的SCSI命令。

其中包括一些SPC(SCSI Primary Commands)命令:

和一些SBC(SCSI Block Commands)命令:

UFS除了定义基本的读写命令,也有trim命令(UNMAP),还有其它一些命令。我们不打算深入其中。

设备管理器

顾名思义,设备管理器用以管理UFS设备。

设备管理器有两个功能:一是处理设备级操作,二是管理设备级配置。

前者包括管理设备功耗、设置数据传输相关参数、使能/禁止设备后台操作(Background Operation)以及其它设备相关操作。

后者通过维护和存储一系列的描述符(Descriptor,后面有章节介绍),通过诸如Query请求修改或获取设备的配置信息。

从UFS层次架构图来看,设备管理器既可以通过下层的传输层为其服务(通过UDM_SAP):

设备管理器也可以绕过传输层(通过UIO_SAP),直接管理与控制互联层:

设备管理器可以通过互联层提供的接口(UIO_SAP),使用一系列的原语(Primitive)直接控制操作互联层(UIC)。这些原语包括重启设备、重启互联层、让物理层进入和退出休眠模式(Hibernate)等原语。

总之,设备管理器既可以走常规渠道(通过传输层,以数据包UPIU的形式),也可以走快速通道(发送UIC能理解的命令,原语的形式)管理和操作设备。

任务管理器

任务管理器用以管理命令队列中的命令。比如任务管理器可以发Abort命令,终止之前发下去的命令。它也可以清空命令队列中的所有命令。具体如下:

当某个命令超时时,系统可能发Abort命令把这个命令终止掉。

UFS传输层

传输层为它上面的应用层服务。当传输层收到应用层命令或者请求后,它会产生UPIU(UFS Protocol Information Unit),把命令块或者请求封装成固定格式的数据结构,然后交由下层传到接收端的传输层。和命令相关的数据、状态,也有相应的UPIU数据包。UPIU是主机和设备进行信息交换的基本数据单元。

UPIU,和SATA中的FIS,PCIe中的TLP,是同一层次的东西,上层命令或者数据都是通过此类数据包封装起来,然后传输到接收端。

如果说应用层是统帅的话,传输层可以认为是将军了。

下一章节为专门介绍UPIU,这里就不细讲。

UFS互联层

UFS互联层包括MIPI UniPro和M-PHY,分别充当UFS数据链路层和物理层的角色。数据链路层负责主机和设备的链接,物理层传输实实在在的物理信号。

UniPro其实不仅仅只定义了数据链路层,它本是也是一个比较完整的协议栈,如下图所示:

传输层(L4)支持多设备之间的双向连接,但UFS只支持CPort0;

网络层(L3)支持通过设备ID寻址多达128个设备,但由于UFS是点到点传输,所以无需网络层;

数据链路层(L2)支持流控、CRC生成和校验、重传机制等,UFS利用了UniPro的数据链路层为主机和设备之间通讯提供可靠的连接。

物理层(M-PHY)使用8/10编码、差分信号串行数据传输。数据传输分高低速模式,每种模式下又有几种不同的速度档。

关于MIPI UniPro和M-PHY,读者可以看相关的spec,这里不细讲。

本章对UFS协议栈做了简单介绍,下一章将会对传输层发起的UPIU进行详细的介绍。

蛋蛋读UFS之二:UFS协议栈相关推荐

  1. 蛋蛋读NVMe之二: 吉祥三宝

    蛋蛋读NVMe之一:为什么刘备需要NVMe 上回书说道,NVMe有三宝:SQ,CQ和DB.接下来我们就详细的看看这吉祥三宝. Host往SQ中写入命令, SSD往CQ中写入命令完成结果.SQ与CQ的关 ...

  2. 房市静心贴:蛋蛋读NVMe之三

    前情提要: 蛋蛋读NVMe之一:为什么刘备需要NVMe 蛋蛋读NVMe之二: 吉祥三宝 有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的 ...

  3. 蛋蛋读UFS之一:UFS简介

    转载:蛋蛋读UFS之一:UFS简介 我们知道,我们电脑由三大件组成:CPU,内存和硬盘.CPU用以计算和控制,内存用以临时存储程序运行时所需的数据(掉电数据丢失),而硬盘用以长久保存数据(掉电数据不丢 ...

  4. 蛋蛋读UFS之三:UFS数据包UPIU

    转自:蛋蛋读UFS之三:UFS数据包UPIU UFS中流淌的数据包叫做UPIU(UFS Protocol Information Unit,UFS协议信息单元),它是固定格式的数据结构,用以传输应用层 ...

  5. 蛋蛋读UFS之九:UFS数据安全

    转自:蛋蛋读UFS之九:UFS数据安全 前面提到RPMB使用认证机制和抗重放攻击机制保障数据不被黑客攻击,除此之外,UFS还有其它一些手段来保护用户数据安全,这一章节我们来关注UFS数据安全. UFS ...

  6. 蛋蛋读UFS之六:UFS设备初始化和启动

    转自:蛋蛋读UFS之六:UFS设备初始化和启动 这一节讲讲UFS初始化. 初始化和启动包括三个阶段:部分初始化,加载启动代码(可选)和初始化完成. 部分初始化阶段 这个阶段开始于上电或者设备重启,它涉 ...

  7. 蛋蛋读UFS之十:UFS电源管理

    转自:蛋蛋读UFS之十:UFS电源管理 UFS是手机存储设备,因此对功耗要求很高.我们来看看UFS的电源管理. 三个供电电压,VCC,VCCQ和VCCQ2,分别给UFS设备模块供电.UFS设备主要包括 ...

  8. nvme命令中prp_蛋蛋读NVMe之三

    有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的哲学家? 我觉得无外乎这三种结果了. 相比人的世界,这三个问题在NVMe的世界就很容易得 ...

  9. 哥德尔不完全性定理 关系 谓词和代入——哥德尔读后之二十

    哥德尔不完全性定理 关系 谓词和代入--哥德尔读后之二十 这两天从外刊文字中了解到,人工智能AI很牛,不是一般地牛,很可能超越人的智能.但有一个事实,却不是能够轻易就被否定掉的.那就是,所谓现代机器人 ...

最新文章

  1. 315 · Istio1.1 功能预告,真的假不了
  2. 1.Rabbitmq学习记录《本质介绍,协议AMQP分析》
  3. 全数字实时仿真平台SkyEye的同步数据流语言可信编译器的构造
  4. oracle 存储过程中调用存储过程
  5. 多线程-ReentrantLock
  6. 的电路接法_基本震荡电路知多少,汇总几种震荡电路的接法!
  7. python 螺旋数组_人工智能首选语言是什么 究竟Python有多强大
  8. java 正则 pattern 线程安全_(一)Java Pattern类----java正则
  9. jmeter学习指南之快速玩转16个逻辑控制器
  10. 《网管员必读》系列丛书试读连载
  11. 虚拟机linux gedit,Linux系统中把gedit改造成TextMate的方法
  12. getopt两个模块getopt 和gun_getopt 的异同
  13. QQ官方单向好友删除 免软件
  14. QImage setPixel
  15. Premiere Pro CC2017软件安装资料及教程
  16. 学习计算机基础必读的4本经典入门书籍,自学编程必备书单!
  17. java异常之-Caused by: java.lang.IllegalStateException: Method has too many Body parameters
  18. 崩坏3桌面版怎么更换服务器,崩坏3【桌面版】安装常见问题解决办法
  19. linux下安装apache(详细教程)
  20. 物联网APP开发的好处有哪些

热门文章

  1. 三菱PLC之间的N:N无线通讯的常见问题汇总【1】
  2. linux python2.7安装pymysql
  3. Element UI Table表格样式调整
  4. 爬虫中requests模块中session的实战应用
  5. transitive dependencies (if any) will not be available, enable debug logging for more details
  6. 腾讯X5浏览器简单使用
  7. 图像分割之常用损失函数-Focal Loss
  8. java怎么连接sql_java怎么连接SQL Server
  9. sql使用WITH ROLLUP分组统计并求总数
  10. 应用层 DNS域名解析服务器 文件传送协议FTP 简单邮件传送协议SMTP 万维网 HTTP超文本协议