带你认识UFS:一种高速率的存储器件

原创 精选
存储 存储设备
随着智能手机的快速发展,手机已经变成了一种生活中的必需品。人们对于智能手机的要求也越来越高。卓越的手机性能可以给用户带来指尖跳舞的感觉。为了满足这种需求,各大厂家对手机的CPU,内存,存储设备都投入了大量的研发。

一、UFS简介

随着智能手机的快速发展,手机已经变成了一种生活中的必需品。人们对于智能手机的要求也越来越高。卓越的手机性能可以给用户带来指尖跳舞的感觉。为了满足这种需求,各大厂家对手机的CPU,内存,存储设备都投入了大量的研发。现在CPU和内存的发展已经是相当地迅速,运行速度在成倍增长。但是传统的存储设备运行速度已经远远落后于CPU和内存。高速的CPU和内存搭配低速的存储设备,就像是大牛拉小车发挥不出自己的优势。所以对于快速存储设备的需求尤为迫切,从而有了UFS(Universal Flash Storage)的诞生。

二、UFS与eMMC

说起UFS,必须要讲讲它的前辈eMMC。eMMC是一种嵌入式多媒体卡,是由JEDEC协会所制定的一种嵌入式非易失性存储器。它采用并行传输技术,读写必须分开执行,虽然仅提供单路读写功能,但仍具备体积小、高度集成与低复杂度的优势。目前最新的 eMMC 5.1 标准,连续读取速度约为 250MB/s。

UFS最早是由JEDEC在2011年推出的,采用全新的串行传输技术,可同时读写操作。第一代 UFS 由于与当时 eMMC 标准速度差异不大,且成本较为高昂,因此并未成功普及。直至 2014 年 UFS 2.0 标准问世后,连续读取速度约达 800MB/s,UFS 才成为 Android 旗舰手机逐渐采用的标准配置。目前最新的 UFS 3.1 标准,连续读取速度约为 1,700MB/s。这时,UFS的传输速度已远远领先于eMMC。

表1:不同协议下的理想传输速度

图1:UFS 实测速度          图2:eMMC实测速度

图1,图2分别是用AndroBench实测的UFS和eMMC的读写速率。新手机发布后,很多手机测评自媒体都会使用AndroidBench测试手机的读写速率来判断其性能。对于AndroBench所测的数据,业内也是比较认可的。从图1和图2来看,UFS的速率是eMMC的两倍,但也不难发现,这一速率和理想的数据还是有差距的。理想总归是理想,实际的速率还要结合整机的性能。

为什么UFS的速率要高于eMMC?

具体有两方面的原因:

1. 数据信号的处理方式不同

UFS是差分串行传输,与单端信号传输相比,差分信号抗干扰能力强,能提供更宽的带宽处理,速度更快。eMMC使用的是并行数据传输。并行最大的问题是速度上不去,因为一旦时钟上去,干扰就变大,信号完整性无法保证。

图3:UFS与eMMC的通讯方式不同

2.协议的不同

好的器件如果没有优良的上层软件(firmware)就相当于法拉利不加98号汽油,再好也跑不快。eMMC和UFS的协议都是由JEDEC制定的,器件厂家根据协议来设计器件。eMMC的通讯方式是半双工的,读写不能同时进行。UFS是全双工通讯,读写是可以同时进行的。简单来说,eMMC的通讯方式是一种应答式的,host发送数据给eMMC 需要等eMMC应答之后才可以继续发送数据。UFS则不一样,host只管向UFS发送数据谁先完成谁先返回状态不需要等待。所以,速度就会比eMMC要快,如图3。

三、UFS架构设计

图4:UFS协议栈

整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。下面分别介绍这三层:

1.应用层(UFS Application Layer(UAP))

  • UFS command set(UCS):使用的命令是简化的SCSI命令(SCSI Primary Command(SPC),SCSI Block Command(SBC)),如读写命令等。
  • Device Manager: 用于管理UFS设备、设备集操作(对设备的工作模式或状态进行控制),设备集配置(对设备硬件属性进行设置)。
  • Task Manager:任务管理器用于管理命令队列中的命令。比如任务管理器可以发Abort命令,终止之前发下去的命令。它也可以清空命令队列中的所有命令。

2.传输层(UFS Transport Layer(UTP))

这一层是JEDEC协议制定的,其他两层都是引用别人的协议。这一层也是UFS最重要的一层。在这一层将应用层的SCSI命令封装为 UFS可以识别的UPIU(固定格式的数据结构,用以传输应用层发来的命令或者请求),通过互联层到Devices实现端到端的数据传输。

图5:UPIU的格式

最小的UPIU是32字节,根据不同的Transaction Type这个大小也是不同的。0~11是12字节的帧头。具体的UPIU类型和12字节的帧头可以参考“JESD220D_UFS3.0”,这里就不在赘述。

3.链路层(UIC InterConnect Layer(UIC))

主要包括MIPI UniPro 数据链路层和MIPI M-PHY 物理层。其中,MIPI UniPro 数据链路层负责主机和设备的链接,它本身是一个完整的协议栈;MIPI M-PHY 物理层负责传输实实在在的物理信号,使用8/10编码、差分信号串行数据传输。数据传输分高低速模式,每种模式下又有几种不同的速度档。

四、结语

UFS的整个架构要比eMMC的复杂,有些知识点可以用晦涩难懂来形容。十分考验个人的功底。UFS的整个系统很庞大,本文只是一个入门的介绍,如果想深入去学习,建议先啃协议,后续结合协议看代码。

作者介绍

陈豪,51CTO社区编辑,具有6年工作经验的高级系统工程师。擅长技能有Linux内嵌汇编语言,Python,C,C++,Java,Linux内核分析,智能机器人软件设计等。

参考文献:JESD220D_UFS3.0

​https://blog.csdn.net/guozhidixian/article/details/112797245​

​https://blog.csdn.net/guozhidixian/article/details/100626691​


责任编辑:华轩 来源: 51CTO
相关推荐

2010-11-05 10:15:42

云计算

2021-09-23 08:32:05

C语言存储器C语言进阶

2022-04-19 17:38:58

长江存储UFS

2023-05-11 07:30:10

KV存储GC优化

2020-12-23 10:10:23

Pythonweb代码

2022-07-07 10:33:27

Python姿势代码

2022-06-22 09:44:41

Python文件代码

2020-12-09 10:15:34

Pythonweb代码

2017-10-25 08:44:03

NVMe SSD数据存储

2018-07-18 08:59:32

Redis存储模式

2021-06-29 09:53:06

神经网络数据图形

2022-09-29 12:09:40

MySQLTiDB数据库

2023-11-07 15:23:56

5GeNVM

2021-08-10 09:00:00

存储容器硬件

2009-07-01 18:39:17

JSP表单

2022-09-26 08:00:00

存储Apache Pul数据

2010-09-29 15:15:15

DHCP中继

2012-01-17 11:02:39

2017-01-22 16:35:02

iOSBlockCallback

2021-06-04 08:58:41

Linux运维Linux系统
点赞
收藏

51CTO技术栈公众号