CPU与UFS(Universal Flash Storage)设备通信的过程涉及多个层次,硬件、固件以及软件协议相互配合。
1. 硬件层面
CPU与UFS设备通过硬件总线进行通信,具体的总线通常是MIPI(Mobile Industry Processor Interface)*联盟定义的*MIPI M-PHY。UFS协议在硬件上使用MIPI M-PHY作为物理层,提供高速串行通信。
2. UFS主机控制器
在CPU和UFS设备之间,存在一个称为UFS主机控制器(UFS Host Controller)*的模块。这个控制器管理通信,并且通常通过*PCIe(PCI Express)或AHB/APB(Advanced High-performance Bus/Advanced Peripheral Bus)与CPU连接。
主机控制器的主要任务是处理传输请求、响应命令,并将这些操作转换为UFS协议中定义的低级通信格式。UFS协议是基于SCSI命令集的。
3. 协议栈
在软件层面,UFS使用了一组协议栈,帮助CPU以标准化的方式与存储设备进行通信。
a. UFS协议层
UFS设备使用的是一种专有的协议,遵循UFS协议层(Unipro和SCSI协议集)。这套协议定义了如何在主机(CPU)和设备(存储)之间发送命令和数据。UFS的通信协议主要包括以下几部分:
- Unipro协议:用于数据链路层和物理层的通信。
- UFS Transport Protocol (UTP):用于传输数据包(如命令、状态、数据传输请求等)。
- SCSI命令集:UFS使用SCSI命令集来处理数据读写请求等操作。
CPU通过操作系统的驱动程序,发出SCSI命令,这些命令被封装在UFS的传输协议中,通过UFS主机控制器发送到设备。设备处理这些命令后,返回相应的结果。
b. SCSI协议
UFS设备在更高层次上使用了SCSI协议。UFS主机控制器和设备使用SCSI命令(如READ、WRITE、INQUIRY)来请求数据读写操作。CPU通过操作系统发出这些命令,通过UFS主机控制器将它们转发到UFS设备上。
- SCSI命令:这些命令定义了存储设备如何响应主机的请求。例如,
READ
命令会请求从存储设备中读取数据,而WRITE
命令会将数据写入存储设备。
4. 操作系统层面
在操作系统(如Linux或Android)中,UFS设备的通信通常是通过设备驱动程序来处理的。操作系统通过驱动程序与UFS主机控制器通信,然后主机控制器与UFS设备进行低级通信。
a. UFS驱动程序
在Linux内核中,UFS驱动程序负责管理CPU与UFS设备之间的通信。驱动程序实现了上层的SCSI协议,并处理命令的发送、数据传输以及错误处理等。
驱动程序通过标准的文件I/O接口(如read()
、write()
等)与应用程序交互。用户或应用程序发出的读写请求,会被转换成SCSI命令,并通过UFS协议发送到UFS设备。
b. UFS的文件系统接口
在大多数情况下,用户与UFS设备的交互是通过文件系统实现的。当你通过文件系统进行文件读写时,操作系统会将这些高层次的文件系统操作转换为块设备读写操作,最终通过UFS协议传送到UFS存储设备。
5. UFS设备的初始化和通信过程
以下是UFS设备与CPU通信的典型过程:
- 初始化阶段:当系统启动时,UFS主机控制器会初始化并检测到UFS设备。主机控制器通过MIPI M-PHY接口与UFS设备建立连接。
- 配置阶段:系统检测到UFS设备后,会通过SCSI命令集(如
INQUIRY
命令)获取设备的描述信息。UFS驱动程序会根据设备信息进行配置。 - 数据传输阶段:应用程序请求读取或写入数据时,操作系统会将这些请求传递给UFS主机控制器。主机控制器将请求转换为UFS协议的传输命令(如
READ
或WRITE
),并通过MIPI M-PHY接口发送到UFS设备。 - 设备响应:UFS设备处理传输请求后,返回响应数据或状态,主机控制器接收后,反馈给操作系统,最后传递给应用程序。
总结:
- 物理层:CPU通过MIPI M-PHY与UFS设备通信。
- 控制层:UFS主机控制器负责管理通信。
- 协议层:使用SCSI和UFS传输协议封装命令和数据。
- 操作系统层:操作系统通过UFS驱动程序和文件系统接口与UFS设备进行交互。
CPU最终通过这些分层的通信协议与UFS设备实现数据的读写和控制。
标签:控制器,主机,通信,SCSI,UFS,CPU,设备 From: https://www.cnblogs.com/haungmang/p/18438981