CPU与UFS设备的通信

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命令(如READWRITEINQUIRY)来请求数据读写操作。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通信的典型过程:

  1. 初始化阶段:当系统启动时,UFS主机控制器会初始化并检测到UFS设备。主机控制器通过MIPI M-PHY接口与UFS设备建立连接。
  2. 配置阶段:系统检测到UFS设备后,会通过SCSI命令集(如INQUIRY命令)获取设备的描述信息。UFS驱动程序会根据设备信息进行配置。
  3. 数据传输阶段:应用程序请求读取或写入数据时,操作系统会将这些请求传递给UFS主机控制器。主机控制器将请求转换为UFS协议的传输命令(如READWRITE),并通过MIPI M-PHY接口发送到UFS设备。
  4. 设备响应:UFS设备处理传输请求后,返回响应数据或状态,主机控制器接收后,反馈给操作系统,最后传递给应用程序。

总结:

  • 物理层:CPU通过MIPI M-PHY与UFS设备通信。
  • 控制层:UFS主机控制器负责管理通信。
  • 协议层:使用SCSI和UFS传输协议封装命令和数据。
  • 操作系统层:操作系统通过UFS驱动程序和文件系统接口与UFS设备进行交互。

CPU最终通过这些分层的通信协议与UFS设备实现数据的读写和控制。

posted @ 2024-09-29 10:05  深度学习渣  阅读(374)  评论(0)    收藏  举报