蛋蛋读UFS之二:UFS协议栈
转自:蛋蛋读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协议栈相关推荐
- 蛋蛋读NVMe之二: 吉祥三宝
蛋蛋读NVMe之一:为什么刘备需要NVMe 上回书说道,NVMe有三宝:SQ,CQ和DB.接下来我们就详细的看看这吉祥三宝. Host往SQ中写入命令, SSD往CQ中写入命令完成结果.SQ与CQ的关 ...
- 房市静心贴:蛋蛋读NVMe之三
前情提要: 蛋蛋读NVMe之一:为什么刘备需要NVMe 蛋蛋读NVMe之二: 吉祥三宝 有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的 ...
- 蛋蛋读UFS之一:UFS简介
转载:蛋蛋读UFS之一:UFS简介 我们知道,我们电脑由三大件组成:CPU,内存和硬盘.CPU用以计算和控制,内存用以临时存储程序运行时所需的数据(掉电数据丢失),而硬盘用以长久保存数据(掉电数据不丢 ...
- 蛋蛋读UFS之三:UFS数据包UPIU
转自:蛋蛋读UFS之三:UFS数据包UPIU UFS中流淌的数据包叫做UPIU(UFS Protocol Information Unit,UFS协议信息单元),它是固定格式的数据结构,用以传输应用层 ...
- 蛋蛋读UFS之九:UFS数据安全
转自:蛋蛋读UFS之九:UFS数据安全 前面提到RPMB使用认证机制和抗重放攻击机制保障数据不被黑客攻击,除此之外,UFS还有其它一些手段来保护用户数据安全,这一章节我们来关注UFS数据安全. UFS ...
- 蛋蛋读UFS之六:UFS设备初始化和启动
转自:蛋蛋读UFS之六:UFS设备初始化和启动 这一节讲讲UFS初始化. 初始化和启动包括三个阶段:部分初始化,加载启动代码(可选)和初始化完成. 部分初始化阶段 这个阶段开始于上电或者设备重启,它涉 ...
- 蛋蛋读UFS之十:UFS电源管理
转自:蛋蛋读UFS之十:UFS电源管理 UFS是手机存储设备,因此对功耗要求很高.我们来看看UFS的电源管理. 三个供电电压,VCC,VCCQ和VCCQ2,分别给UFS设备模块供电.UFS设备主要包括 ...
- nvme命令中prp_蛋蛋读NVMe之三
有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的哲学家? 我觉得无外乎这三种结果了. 相比人的世界,这三个问题在NVMe的世界就很容易得 ...
- 哥德尔不完全性定理 关系 谓词和代入——哥德尔读后之二十
哥德尔不完全性定理 关系 谓词和代入--哥德尔读后之二十 这两天从外刊文字中了解到,人工智能AI很牛,不是一般地牛,很可能超越人的智能.但有一个事实,却不是能够轻易就被否定掉的.那就是,所谓现代机器人 ...
最新文章
- 315 · Istio1.1 功能预告,真的假不了
- 1.Rabbitmq学习记录《本质介绍,协议AMQP分析》
- 全数字实时仿真平台SkyEye的同步数据流语言可信编译器的构造
- oracle 存储过程中调用存储过程
- 多线程-ReentrantLock
- 的电路接法_基本震荡电路知多少,汇总几种震荡电路的接法!
- python 螺旋数组_人工智能首选语言是什么 究竟Python有多强大
- java 正则 pattern 线程安全_(一)Java Pattern类----java正则
- jmeter学习指南之快速玩转16个逻辑控制器
- 《网管员必读》系列丛书试读连载
- 虚拟机linux gedit,Linux系统中把gedit改造成TextMate的方法
- getopt两个模块getopt 和gun_getopt 的异同
- QQ官方单向好友删除 免软件
- QImage setPixel
- Premiere Pro CC2017软件安装资料及教程
- 学习计算机基础必读的4本经典入门书籍,自学编程必备书单!
- java异常之-Caused by: java.lang.IllegalStateException: Method has too many Body parameters
- 崩坏3桌面版怎么更换服务器,崩坏3【桌面版】安装常见问题解决办法
- linux下安装apache(详细教程)
- 物联网APP开发的好处有哪些
热门文章
- 三菱PLC之间的N:N无线通讯的常见问题汇总【1】
- linux python2.7安装pymysql
- Element UI Table表格样式调整
- 爬虫中requests模块中session的实战应用
- transitive dependencies (if any) will not be available, enable debug logging for more details
- 腾讯X5浏览器简单使用
- 图像分割之常用损失函数-Focal Loss
- java怎么连接sql_java怎么连接SQL Server
- sql使用WITH ROLLUP分组统计并求总数
- 应用层 DNS域名解析服务器 文件传送协议FTP 简单邮件传送协议SMTP 万维网 HTTP超文本协议