共计 2346 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 随着智能手机的快速发展,手机已经变成了一种生活中的必需品。人们对于智能手机的要求也越来越高。卓越的手机性能可以给用户带来指尖跳舞的感觉。为了满足这种需求,各大厂家对手机的 CPU,内存,存储设备都投入了大量的研发。 |
随着智能手机的快速发展,手机已经变成了一种生活中的必需品。人们对于智能手机的要求也越来越高。卓越的手机性能可以给用户带来指尖跳舞的感觉。为了满足这种需求,各大厂家对手机的 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。
上图分别是用 AndroBench 实测的 UFS 和 eMMC 的读写速率。新手机发布后,很多手机测评自媒体都会使用 AndroidBench 测试手机的读写速率来判断其性能。对于 AndroBench 所测的数据,业内也是比较认可的。从图 1 和图 2 来看,UFS 的速率是 eMMC 的两倍,但也不难发现,这一速率和理想的数据还是有差距的。理想总归是理想,实际的速率还要结合整机的性能。
为什么 UFS 的速率要高于 eMMC? 具体有两方面的原因:
UFS 是差分串行传输,与单端信号传输相比,差分信号抗干扰能力强,能提供更宽的带宽处理,速度更快。eMMC 使用的是并行数据传输。并行最大的问题是速度上不去,因为一旦时钟上去,干扰就变大,信号完整性无法保证。
好的器件如果没有优良的上层软件 (firmware) 就相当于法拉利不加 98 号汽油,再好也跑不快。eMMC 和 UFS 的协议都是由 JEDEC 制定的,器件厂家根据协议来设计器件。eMMC 的通讯方式是半双工的,读写不能同时进行。UFS 是全双工通讯,读写是可以同时进行的。简单来说,eMMC 的通讯方式是一种应答式的,host 发送数据给 eMMC 需要等 eMMC 应答之后才可以继续发送数据。UFS 则不一样,host 只管向 UFS 发送数据谁先完成谁先返回状态不需要等待。所以, 速度就会比 eMMC 要快,如图 3。
整个 UFS 协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出 SCSI 命令(UFS 没有自己的命令使用的是简化的 SCSI 命令),在传输层将 SCSI 分装为 UPIU,再经过链路层将命令发送给 Devices。下面分别介绍这三层:
- UFS command set(UCS):使用的命令是简化的 SCSI 命令(SCSI Primary Command(SPC),SCSI Block Command(SBC)),如读写命令等。
- Device Manager: 用于管理 UFS 设备、设备集操作(对设备的工作模式或状态进行控制),设备集配置(对设备硬件属性进行设置)。
- Task Manager:任务管理器用于管理命令队列中的命令。比如任务管理器可以发 Abort 命令,终止之前发下去的命令。它也可以清空命令队列中的所有命令。
这一层是 JEDEC 协议制定的,其他两层都是引用别人的协议。这一层也是 UFS 最重要的一层。在这一层将应用层的 SCSI 命令封装为 UFS 可以识别的 UPIU(固定格式的数据结构,用以传输应用层发来的命令或者请求),通过互联层到 Devices 实现端到端的数据传输。
最小的 UPIU 是 32 字节,根据不同的 Transaction Type 这个大小也是不同的。0~11 是 12 字节的帧头。具体的 UPIU 类型和 12 字节的帧头可以参考“JESD220D_UFS3.0”,这里就不在赘述。
主要包括 MIPI UniPro 数据链路层和 MIPI M-PHY 物理层。其中,MIPI UniPro 数据链路层负责主机和设备的链接,它本身是一个完整的协议栈;MIPI M-PHY 物理层负责传输实实在在的物理信号,使用 8 /10 编码、差分信号串行数据传输。数据传输分高低速模式,每种模式下又有几种不同的速度档。
UFS 的整个架构要比 eMMC 的复杂,有些知识点可以用晦涩难懂来形容。十分考验个人的功底。UFS 的整个系统很庞大,本文只是一个入门的介绍,如果想深入去学习,建议先啃协议,后续结合协议看代码。
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)