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