UFS特性介绍内核工匠

在手机飞速发展的近10年,巨大的市场需求催生出移动存储的快速发展,人们需要越来越来越多的空间和越来越快的存储速度。下图是一个俗称存储8+256G的手机模块连接示意图。

图1手机存储连接

JEDEC在2011推出了UFS1.0协议标准,从2015开始手机厂家开始陆续商用UFS2.0的存储器件,Samsung,Toshiba,Hynix等传统存储器件率先推出自己的UFS存储器件。现在,UFS器件已经被各大手机厂商广泛采用,那么UFS具备哪些优势,有哪些特性,具体工作流程是什么,本文将逐一描述。

和传统eMMC相比,UFS采用了MPHY协议,这个是UFS底层物理信号传输协议,MPHY是一个MIPIAlliance推出的PHY协议的一种。这个MPHY的传输特点就是两个字,“快”和“稳”,MPHY通过串行+差分的形式保证了这一点,串行保证了“快”,串行信号能做到高频传输,因为没有并行信号的相互干扰,而“稳”则由差分保证,差分传输可以相互抵消共模信号干扰。

如下图所示,信号具有单向,差分的特点,TXDP和TXDN分别表示发送端TX的差分管脚的positive和negative。目前UFS采用的是2lane(但是如果因为焊点等物理断开,只剩下一个lane,lane0,UFS也可以正常工作),类似于双向4车道,但是不能变道,也不能逆行,lane之间是相互独立工作的。下图属于1.5lane。需要注意的是这里一个通道就标注为1个lane,而UFS里面通常叫法是1个lane包含两个方向的数据方向,即TX->RX,RX->TX。

图2MPHY的底层链路传输示意图

通过驱动控制TX两个差分点TXDP/TXDN的电压,以及对端RX接收机RXDP/RXDN的阻抗,形成如下的4种差分线状态:

图3差分线组成的四种状态

图4UFS采用的TypeIIM-TX状态机切换

在HS-BURST模式下,又分为1~4挡,和汽车的挡位一样,每个挡位对应不同的速度,MPHY对应的不同挡位的传输速率如下图所示。从UFS3.0增加了HS-G4,之前最高速挡只有到HS-G3。这里的传输是指1个lane的传输速率,实际上UFS有2个lane,带宽是应该是double一下的,目前各厂家基本采用rateB,那么理论上带宽11660.8Mbps*2=2915.2MB/s,这里有个细节需要注意一下,为了避免连续的高电平或低电平出现,MPHY上面传输的数字都是经过特殊处理的,目前UFS采用的是8b/10b编码的方式,所以这里的有效理论带宽需要打8折,即2915.2MB/s*0.8=2332.16MB/s。

图5MPHYHS-BURST各Gear速率

2332.16MB/s这个带宽已经很高了,不过现在UFS3.0的器件已经测出2279.8MB/s的性能,已经很接近这个理论带宽了,当然器件的性能也会推动协议的演进,比如后面可能会推出HS-G5,8b/10b的编码方式变为效率更高的128b/130b。

图6某UFS3.0器件的androbench跑分数据

MPHY是个很复杂的模拟IP,目前市场基本被synopsys公司占领,各UFS器件厂家都从它那里购买这个IP,里面涉及到串行并行转换,编解码,信号放大,CDR时钟恢复,采样,以及上面的HS-G4还是HS-G1的挡位选择,那么MPHY是怎样被控制的呢?如下3个寄存器就是MPHY私有的寄存器,分别用来控制模式,rate,挡位。

图8Unipro定义的层次关系

Unipro定义了各层package的格式,从下往上看,Medium层传输的是差分信号,PHYAdaptor(L1.5)传输的是PACPframe,LA应用层传输的就是UPIU(UFSprotocolinformationunits),我们通用的读写请求就会被打包进UPIU里面,然后自上而下层层传递,最后通过差分信号传递给UFS器件,而器件里面拥有和HOST完全对等的层次关系和协议格式,从而实现数据通信。

DME(DeviceManagementEntity)对Unipro的所有层次进行控制和管理,提供各层次所有的寄存器的访问接口。这个接口通过UIC实现,Unipro各个层次的寄存器都是通过UIC来访问的。那么统一的UIC接口是如何实现各层次寄存器路由的呢,就是通过下面的LayerID实现的,通过寄存器address的bits【14:12】做掩码。

图9Unipro各层寄存器地址路由

所以可以直接从寄存器地址来判断这个寄存器是Unipro的哪一个层次的寄存器,比如,MPHY层的寄存器地址都是0xXX,而PA层的地址是0x15xx,DME层本身的地址是0xDxxx。

当然,MPHY的寄存器地址有点特殊,是因为MPHY里面有多个lane的时候,需要通过其他的mask来进行区分,目前是通过在最低位的0x0,0x1,0x4,0x5来进行区分的,分别表示TX的lane0,lane1,RX的lane0,lane1。

Unipro层是封装在UFS这个IP里面的,其中的寄存器也是CPU不能直接访问的。UFS整个模块对外的唯一接口就是UFSHCI(UFSHostControllerInterface)。CPU通过两条总线来实现对UFS的控制和数据交互,分别是APB和AXI总线。在下图中,左边的方框就是UFSHCI,通过APB总线访问,其地址空间通过ioremap在内核申请虚拟地址空间即可被CPU直接访问,右边方框则是数据部分,由dma_alloc接口进行申请,通过AXI进行访问。

图10UFSHCI经典数据结构

这个数据结构图覆盖了如下信息:

a.左框UFSHCI寄存器分布,分为6块,hostControllerCapability~VendorSpecific

b.UTPTransferRequest这一块的寄存器提供了指向UTRD(UTPTransferRequestDescriptor)List的指针地址

c.UTRD有0~31个,即32个,意味着UFS拥有32个slot,SOC层可以同时接受32个请求

d.32个UTRD是物理连续的,这点很重要,因为连续,可以直接根据slot序号直接获取到UTRD

e.UTRD里面包含了UPIU的地址,UPIU的size是固定的,否则AXI怎么能准确的把response信息填充到对应请求的ResponseUPIU里面呢

f.同样ResponseUPIU数据格式固定

g.如果UTRD里面有数据读写需求,那么需要填充PRDT(PhysicalRegionDescriptionTable)

h.PRDT指向的Databuffer不是连续的,而是离散状,因为PRDT是个表,所以这个表里面可以存放很多不连续的Databuffer地址,对应一个个的segment

i.1个Databuffer的size最大不能超过64K,这个是由芯片内部决定的,因为这个size涉及到一个数据包单元DATAOUT/INUPIU的长度,也是一次底层数据包传输的长度,但是PRDT表的个数可以自己确定,一般软件定义为128个,那么一个UTRD也就是一个请求可以最大传输64K*128=8M

j.在实际应用中一个读写请求如果size过大,如1000M,则会被上层切割,比如1M,所以底层的size是足够的

图11UFSHCI常用寄存器

上面的HCI寄存器cpu可以通过APB总线直接读写,而Unipro的寄存器则可以通过上面的4个UICCommand寄存器完成,分别是UICCMD,UCMDARG1,UCMDARG2,UCMDARG3。寄存器就是芯片的API接口,通过这4个UIC寄存器就可以实现对Unipro各层和MPHY的所有寄存器进行读写操作。

图12UFS初始化流程

函数

主要功能

ufs_qcom_probe

platform_driverprobe,高通平台驱动入口

ufshcd_pltfrm_init

申请IO空间,获取中断号,申请hba资源

ufshcd_init

完成数据结构初始化,注册中断,申请和配置UFScontroller所需要的DMA内存,初始化并使能UFScontroller,复位器件

ufshcd_async_scan

异步初始化函数

ufshcd_probe_hba

Linkup建链,获取器件信息,注册scsi

总之,和通用的驱动初始化流程一样,ufs驱动的初始化也主要包含资源申请,controller初始化和使能,建立链接,完成中断注册,注册中断上半部和中断下半部处理函数。

申请好的两端dma内存写进UFSHCI寄存器,controller最后通过这两个内存地址完成全部的数据交互过程,其原理就是base+index*unit的索引方式:

UTRD,UCD的request,response,prdt物理地址数据结构填充:

数据传输是驱动程序的本质目的,通过数据的传输,来完成作为存储介质的使命,read&write,在read流程中,ufs向应用程序提供数据,在write流程中,应用程序向ufs存放数据。

图13sys_read->submit_bio数据流流程

如上图所示,用户态传入fd,buf,count的参数被传入到kiocb和iov_iter里面,kiocb用来传递磁盘地址,而iov_iter用来传递buf。

iov_iter用来从用户和内核之间传递数据用,通过迭代的方式可以实现物理地址或者虚拟地址不连续的描述:

_blkdev_direct_IO函数中从iocb传递磁盘地址bio->bi_sector,同时iov_iter传递给bio的bi_iter:

bio生成后,就plug到进程的plug_list里面,如果失败,则进电梯merge,如果依然失败,则只能等待新的request被释放出来,两次蓄流的目的是为了尽可能的让bio请求得到merge,减少往磁盘驱动下发的频度,提升综合性能。

图14bio->request数据流流程

图15request->dma数据流流程

__blk_segment_map_sg实现bio到request里面的sglist的数据填充:bio里面的bv_page是将要进行读的buffer地址,这个地址被挂载到sg链表,sg操作将会对应UFS里面的PRDT,这时候的bv_page为DMA可以直接访问的物理地址。

对于存储器件的读写操作,通过传递磁盘地址和buffer,UFS根据磁盘地址读取到数据后填充到buffer,或UFS从buffer获取数据写入磁盘地址。写的流程和读原理类似,这里就不再描述了。

[1]《mipi_M-PHY_specification_v4-1_JEDEC-LIAISON-DISCLOSURE》

THE END
1.粒子物理学发展的历史考察山西大学科学技术史研究所, 太原 030006 作者简介: 乔笑斐,副教授,研究方向为物理学哲学、物理学史,电子信箱:qxf@sxu.edu.cn;路昊明(共同第一作者),硕士研究生,研究方向为物理学史,电子信箱:luhaoming1997@163.com A historical investigation of the particle physics development ...http://www.kjdb.org/CN/10.3981/j.issn.1000-7857.2022.09.001
2.天平的发展史物理上常用的学生天平。 小学生的简易天平。 大学时的天平,大家都用过电光分析天平,怎么用,早还给大学老师了。反正更精确! 下面简介一下天平的发展史:迄今发现的最古老的天平杠杆’出自上埃及第三王朝!它是带有红颜色的石灰石横梁!长约8.5厘米!中间和两端都有钻孔,这一天平杠杆距今已有4500年了!如今保存在伦敦科...https://www.meipian.cn/1prb3m8s
3.SDN的起源和发展历程在本文中,我们首先来看“为什么需要SDN”,然后分析网络业务的发展趋势,最后引入SDN和网络虚拟化的诞生和发展历程。 1 为什么需要SDN 在人类的发展史上,推动人类进步的最重要的学科是什么? 这个答案一定五花八门。有的人说是物理学,随着物理学的发展,蒸汽机、电灯得以发明,进而又有了火车、飞机,因此物理学推动了人类...http://mc64e8402.ptpress.cn/articleDetails?id=C7E3EF9370100001F07680C083E07AA0
4.物理发展史物理发展史 物理学是研究物质运动最一般规律和物质基本结构的学科。作为自然科学的带头学科,物理学研究大至宇宙,小至基本粒子等一切物质最基本的运动形式和规律,因此成为其他各自然科学学科的研究基础。它的理论结构充分地运用数学作为自己的工作语言,以实验作为检验理论正确性的唯一标准,它是当今最精密的一门自然科学学科...https://www.jianshu.com/p/c78c4810eeb2
1.《物理学史》(弗·卡约里)简介书评在线阅读当当网图书频道在线销售正版《物理学史》,作者:弗·卡约里,出版社:中国人民大学出版社。最新《物理学史》简介、书评、试读、价格、图片等相关信息,尽在DangDang.com,网购《物理学史》,就上当当网。http://product.dangdang.com/20825980.html
2.物理学发展史(豆瓣)物理学发展史的创作者 ··· 乔治·伽莫夫 作者 作者简介 ··· 作者乔治·伽莫夫,美籍俄人。曾在乔治·华盛顿大学任教,从1956年期担任博尔德的科罗拉多大学物理学教授。1968年去世。 喜欢读"物理学发展史"的人也喜欢 ··· 19世纪物理学概念的发展 7.2 星系动力学 8.8 基本粒子物理学史 8.8 ...https://book.douban.com/subject/3594801/
3.校本课程简介校本课程校本课程简介 常州市武进区湖塘实验中学 ◇办学宗旨: 立德树人,为学生的终身发展奠基。 ◇办学理念: 以人为本,诚信育才,文化立校,和谐发展。 ◇校 训: 笃志·明德。 ◇愿景目标: 把学校建设成为设施一流、管理精致、内涵丰富、文化深厚、 优质高效、特色鲜明的,引领师生共同成长的现代学校。http://www.htsyzx.wj.czedu.cn/html/article688078.html
4.解剖学发展史简介全球发展简介 大家知道,殷商时代医学有所发展,甲骨文中有多种疾病的记载。而且当时人殉、人祭之风盛行,奠基、丧葬、祭祀杀人最多一次超过2000,而且砍头、断肢、剖腹……手段极为残忍,而殉难者的遗体大多随意弃置,奴隶的几乎没有任何社会地位,与牲畜无异。这种情况下,对这些尸体进行解剖研究不会有任何舆论阻力,甚至...https://www.med66.com/jiepouxue/zx1903124213.shtml
5.我国分析仪器及其应用发展梗概资讯中心我国分析仪器萌芽于20世纪30年代,据我国仪器仪表行业的老前辈荣仁本先生和史久泰先生回顾,30年代的上海劳动仪表厂,就是我国最早的仪器仪表厂。解放后,我国老一辈领导人对科学和科学仪器的发展是有比较深远的认识的,早在1956年就领导制定了20年科学发展长远规划,并在第一个五年计划启动的156项重大建设项目中列入了分析...https://www.instrument.com.cn/news/20210303/573931.shtml
6.物理学简介(三)物理八重法本文概述了物理学的多个分支,包括磁学、集成光学、声学、非平衡态热力学、光学、高斯光学、光谱学、固体物理学等。详细介绍了各分支的发展历史、关键人物的贡献以及重要理论,如库仑定律、电磁感应、光的波动说、量子论等。 摘要由CSDN通过智能技术生成 (三) 物理学分支 1.磁学 磁学是研究静磁和电磁现象,以及物质...https://blog.csdn.net/pilifeng1/article/details/90111276
7.钛简介钛发现历史钛物理性质→MAIGOO百科国外发展历程 1940年卢森堡科学家W.J.Kroll用镁还原TiCl4制得了纯钛。从此,镁还原法(又称为克劳尔法)和钠还原法(又称为亨特法)成为生产海绵钛的工业方法。美国在1948年用镁还原法制出2吨海绵钛,从此开始了钛的工业化生产。 1947年,人们才开始在工厂里冶炼钛。当年,产量只有2吨。1955年产量激增到2万吨。1972...https://www.maigoo.com/citiao/1096694.html
8.图像传感器原理介绍(史上最详细的CCD和CMOS介绍)CCD图像传感器简介 CCD(Charge Coupled Device ,感光耦合组件简称)是摄像系统中可记录光线变化的半导体,通常以百万像素〈megapixel〉 为单位CCD发展史 1969年,由美国的贝尔研究室所开发出来的。同年,日本的SONY公司也开始研究CCD。 1973年1月,SONY中研所发表第一个以96个图素并以线性感知的二次元影像传感器〝8H*8...https://www.microdemo.com/technical-data/1267/
9.SPC:统计过程控制腾讯云开发者社区1、质量发展历史的简介 质量学的三位大佬:休哈特、朱兰、戴明 日本质量集大成者:石川馨 2、QC七大手法的运用解析 1)QC查检表之解析 查检表定义及制作要点 探讨:罗列出部门的Top3的表格,探讨其改善? 2)QC层别法之解析 层别法用法及层别项目选择 https://cloud.tencent.com/developer/news/231310
10.物理学发展史(精选十篇)物理学发展史 篇1 物理学作为一切自然科学的基础已经渗透到了社会生活的各个领域, 哪里有人类活动, 哪里就有物理学文化气息。百年来物理学的发展一次次的推动了世界经济的发展。 一、经典物理学推动了第一次工业革命, 带给人类第一次经济飞跃。 1687年牛顿“自然哲学的数学原理”的发表, 标志着经典物理学的诞生,...https://www.360wenmi.com/f/cnkeyrf3i7xw.html