作者:望月闲人
不说再见的大结局,致飞鱼。
想要和望月闲人还有全世界的大牛讨论SSD及存储相关技术?加nanoarch为微信好友,拉你进ssdfans微信群 。
今天是2月5日飞鱼秀的最后一期,在车里听到11点才下车算是对飞鱼的告别。从老大半岁的时候开始到今天老二半岁听了5年,喜欢小飞才华横溢的幽默和喻舟嬉笑怒骂的性情。就像歌里唱的“为了拥抱那一个人,笑着哭着拥抱了整个班“,这个喜欢小飞而坚持做了这么多年节目的喻舟最后泣不成声的倒计时还有一如既往的笑声给飞鱼画了个最圆满的句号,最完美的人生也不过就是破涕为笑的过程罢了。
正题结束了,歌也听完了O(∩_∩)O,下面就是纯技术贴了,大家可以散了,哈哈…
这篇文章也是闲人羊年UFS大结局,主要把前三篇文章没有讲到的重要概念总结一下,作为我这次学习阶段的收官,并向飞鱼致敬。开始了…
首先要看一下UFS的接口信号,M-PHY接口可以支持多条Lane,我们只拿下图一条Lane的情况举例。
RESET_n:复位信号
REF_CLK: PLL锁相环参考时钟
DIN_t/c:下行Lane差分信道
DOUT_t/c:上行Lane差分信道
如果你有仔细看会发现为什么上面的图里会有个小飞鱼,它其实就是下面要介绍的重要概念LU。
Logical Unit(LU):一个UFS设备中会包含一个或多个Logical Unit(LU)用来存放boot代码、系统文件或者是用户数据等,按照UFS的标准最大可以支持到8个LU。每个LU都有它独立的地址空间,并且每个LU都有task manager来各自处理SCSI命令。而且我们给每个LU都起了名字Logical Unit Number (LUN),分别是老大LU0,老二LU1,老三LU2等等。
如果我们再往LU的里面看,就会发现每个LU是由Memory Area,Device Service,Task Manager和Task Set组成。除了memory area是用来存数据的以外,
Task Set:一个或者几个SCSI命令,它们组成一个队列就叫TaskSet;
Task Manager:来控制命令的执行的顺序起到任务管理的作用;
Device Service:是真正解析、执行SCSI命令的模块;
LU中有一些是执行特殊任务的,比如用来作Boot,或者作RPMB保护的,我们叫它们Well-Known Logical Unit (WLU),并用W-LUN来给它们命名。每个UFS可以配置一个或两个LU用来作boot,给RPMB最多一个。我们需要通过写Configuration Descriptor来配置LU,并且必须执行一次上下电操作才会是使配置生效。需要注意的是,每个LU只能作一次配置,配好后就不能修改。下面是一个典型的UFS配置方案,具有两个用作Boot的LU,一个RPMB,三个用来作存储数据的普通LU。
UFS Power Mode:之前文章提到过为了省电,UFS有多种省电模式。那我们结合下图看看具体有哪些?一共是7种power mode,其中4种basic power mode:Active,Idle,sleep和Power Down,另外还有3种过渡模式:Pre-Active,Pre-sleep和Pre-PowerDown。过渡模式作为基本模式的临时状态没必要在详细解释,具体说说4种基本Power Mode:
Active Mode:UFS在执行命令或者作background操作的时候就工作在这种模式下。
Idle Mode:UFS空闲下来进入到这种模式,一旦收到命令就会立刻跳转到Active mode。
Sleep Mode:睡眠模式下可以把VCC1.8V(给memory array供电的电源)关闭,如果想切换到Active或PowerDown模式首先要给VCC上电,然后才能发命令作切换。
Power Down Mode:最省电的一种模式,we can remove every power supply(听着就过瘾),但是(别忘了还有但是),所有buffer,cache中的数据都会丢掉。
关于UFS安全的Feature:
Secure Mode:这种方法可以使数据彻底被擦除,并且不能通过反向工程恢复。具体做法是在作完正常擦除之后,还要在被擦除的区域写随机或者非随机的pattern,起到了把原来数据覆盖的作用。
Device Data Protection:LU层面的一种保护机制。它有两种:1. Permanent Write Protection,一旦配置就不能再改回去。2.Power On Write Protection,经过一个上下电周期或者硬件复位之后,保护效果就会失效。
RPMB:Replay Protect Memory Block和eMMC的RPMB区的工作原理是一样的,都是要通过鉴权的方式才可以访问,该区域的大小是以128KB的倍数来计算的。
Malware Protection:防错的一种机制,对于关键的数据如boot代码,总线配置或者设备其他的一些重要参数,我们可以用这种机制把它们保护起来,拒绝被修改。
Command Queue:
什么是Command Queue?来看下下面这个搬箱子的例子,前两种方式邮寄人必须要顾及接收人的感受,接收人如果没做完工作,发件人是不可以再发箱子的。Command Queue这种方式邮寄人只管往传送带上放箱子,不用顾及接收人是不是完成了工作。即使接收人还在处理上一个箱子,发送人还是可以发其他的箱子。而且别忘了,传送带是双向的,全双工工作方式。对我们的UFS就是这么牛,不需要host管我是不是已经完成了上一个任务,你只要给我发命令就好了。
其实Command Queue并不是什么新鲜事物,早在eMMC5.1已经就有这个feature了。但是UFS的Command Queue要比eMMC的更给力些,强在命令可并发执行,乱序操作而且是全双工的(相比eMMC5.1是半双工的)。
下图是个很好的例子,左图的eMMC和右图的UFS都是接到host发送的4条相同的命令,在UFS多任务操作的支持下,完成所有的命令只花费了相当于eMMC一半的时间。
具体在操作层面上的不同闲人就不作具体阐述了,大家看下下图就明白了。
至此,UFS的学习总结就告一段落了,闲人要好好陪家人过年并开始新topic的学习了,期待节后再跟大家分享学习成果,我们不说再见……
不想错过望月闲人的后续精彩文章?长按或扫描下面二维码关注ssdfans就可以了!
公司招聘:
深圳大普微电子招聘,SSD芯片设计,固件开发,机器学习相关人才!
上海飞斯招聘: 存储开发工程师,RAID、USB、SATA、AHCI、NVME、FTL、文件系统的开发及调试
记忆科技上海UFS FW内推机会,UFS FW开发