HCI 全称是Host Controller Interface. 他和JEDEC UFS2.1 协议都是UFS的行业规范,但是约束的位置是不同的。
从Figure 1 中可以看到,HCI主要是针对主机端从驱动(软件)到controller 接口(硬件)标准的规范。再往下到UTP和UIC层都不是HCI的范围。
如果是大家在看kernel /uboot/lk等代码的时候,看到驱动最底层的代码,是可以和HCI协议的描述对应起来的。
Figure 2中我们先看右边Host Memory Space. 这里每一块都代表一段连续的内存空间。在UTP Transfer Request List中连续存放的是slot0-31共32个UTRD(UTP Transfer Request Descriptor).UTRD的格式这里不做展开,但是可以看到其中必定包含指向另一段内存的地址。可以看到每一个UTRD都指向了一个含有Command UPIU 及 Response UPIU的数据段,而有些还包含有PRDT会指向另一段data buffer. 这就会让我们联想到在学习UFS协议时的有些命令含有数据的交互,而有些命令没有。32个slot是不是也会让大家联想到UFS 命令常用的队列深度32.
而下面有8个slot的UTP Task Management Request List是不是也会让大家想到UFS协议中 Task Managemeng Request的队列深度8.
左侧的i/o memory/register space代表的是HCI的所有寄存器。software 和 controller硬件的交互就是依赖这些寄存器实现。但是软件在对这些寄存器管理和使用的过程中,实际上访问的是一段和寄存器空间已经建立对应