UFS概览
UFS(Universal Flash Storage)的出现就是为了取代eMMC和SD cards,它兼具eMMC优点(low power)和SCSI SSD优点(high performance),因而是基于SCSI架构的,称它mobile SSD最合适。如果是可移除(removable)的就是UFS card了。
SCSI architectural model
SCSI devices之间关系是一个client-server model:
如上图,client是SCSI Initiator,server是SCSI Target,client负责发起request,server则respond这个请求,他们通过Service Delivery Subsystem连接起来。
另外,SCSI Target由一到多个LU组成,用LUN来识别:
LU包含Device Server和Task Manager,分别处理client发来的相应request。用well know LU定义只包含特定的功能的LU。
看下C/S通信使用的三层协议模型:
Interconnect layer就是C/S模型里提到的Service Delivery Subsystem,还提供了一些服务和信号机制供物理层数据传输用, 缩成SIL。
最后还有个SCSI domain model:
可见,SCSI domain由SCSI devices和a servce delivery subsystem组成。
UFS architectural overview
ok,UFS arch是基于SCSI arch的,来看spec里的arch图:
三层架构,来详细点:
Application Layer: UCS(处理r/w等normal cmds) + device manager(device level控制) + task manager(command queue控制)三大块组成。
UTP: 提供服务给上层用,UTP架构采用了SCSI的C/S model,其中UFS Host是client,UFS device是server。它们之间的交流使用一个叫做UPIU(UFS Protocol Information Unit)的东东。
UIC: 处理连接,由MIPI UniPro和MIPI M-PHY组成。UniPro就是Unified Protocol,mobile领域使用的一种高速互连接口。通常都和物理层(如M-PHY)一道完成通讯。
UniPro还有子层:
UniPro提供给DME(Device Management Entity)访问。
UFS LUs
先看下spec的UFS domain图:
这个图很清楚,提下UFS最大支持N个LU,除了well-known LUs。Device server处理cmd,Task set是一组cmds,Task manager控制cmd顺序。
4个Well-Known LU(W-LU) in UFS:
SCSI REPORT LUNS + UFS Device + Boot(启动相关) + RPMB(安全有关)
一般买来的UFS没有LUN,需要create,这个行为叫做provisioning,也叫Logical block provisioning。
UFS的UPIU有个Query function,定义了Query Request UPIU和Query Response UPIU。Query查询用来在C/S间读写数据,这些数据包含了system data,配置,descriptor,flags等。
这些关于device的descriptors分成好多种,比如有GEOMETRY描述符,里面定义了UFS大小:
UFSHCI
来看下Host侧的相关定义,UFSHCI是Host Controller Interface,它的目标就是定义一个统一的访问HW的接口,这样的好处是可以提供一个通用的driver,这个driver可以和不同vendor的HCI一起工作。
我们看下从HCI角度的UFS架构图:
这个接口位于Host driver和HW之间,由Host controller管理。
UFSHCI定义了两个接口空间(interface spaces):MMIO space + Host memory space,看下这个interface架构:
MMIO space/IO Memory就是各种Registers,结合Host memory中的Transfer Request Descriptors完成和HW通信。
Linux kernel support
- Documentation/scsi/ufs.txt
- Documentation/ABI/testing/sysfs-driver-ufs
- ufs device drv: drivers/scsi/ufs
- ufs phy drv: drivers/phy/phy-core.c + drivers/phy/qualcomm
Done.
ps: 以上参考UFS和SCSI相关free spec。
版权声明:本站所有文章均采用 CC BY-NC-SA 4.0 CN 许可协议。转载请注明原文链接!