UCSI 全称 USB Type-C Connector System Software Interface。
它定义了OS(特指Windows系统)针对 PC 上 Type-C 口的管理规范,主要是寄存器和数据包结构,以及通讯规则的描述。
事实上,OS 作为 OPM 管理 Type-C 接口,主要是和 Type-C 接口管理芯片 PD 通讯完成的。
01
UCSI 框架
UCSI 设计的初衷就是方便 OS 端管理 Type-C 接口。那么从上至下,可以分为 OPM、PPM、LPM 三个层面。
OPM:OS Policy Manager,主要是 OS 发起一些管理。
PPM:Platform Policy Manager,主要是 BIOS、EC 在中间完成一些管理。
LPM:Local Policy Manager,主要是 PD Controller 完成一些管控策略。
那 UCSI 就是 OPM 和 PPM 之间的通讯、管理规范。
实际上,UCSI 的实现涉及了 OS、BIOS、EC 和 PD 四部分。
OS 端作为 OPM,已经由 Microsoft 实现了标准的 UCSI Driver。所以也可以认为 OPM 指的就是 UCSI Driver。
BIOS 端除了声明 UCSI 设备外,就是向 OPM 提供一个和 EC 通讯的接口。
EC 端主要的功能就是处理 OPM 发送的命令,转给 PD Controller。
02
UCSI 规范
UCSI 规范的核心就是定义了 19 条命令用以管理 Type-C 接口。
UCSI 管理 Type-C 接口就需要交换数据,因此定义了一个32字节的数据包。
UCSI Data Struct,包含 48个Byte。
- BIOS 首先向 OS 声明一个虚拟的Device,即 UCSI device。
- OS 会根据存在的 Device 加载对应的Driver,即 UCSI driver。
- BIOS 需要实现一些 Method 和 Notify Function。
A. UCSI Driver 会调用 BIOS Method 访问 UCSI Data Struct。
B. 一般 Notebook PD COntroller 通过 I2C 接在 EC 上,EC 会承担 PPM 的角色,完成 USB-C Port 的状态监控,同时维护 UCSI Data Struct 中 PPM->OPM 的数据。
总的来说,UCSI Data Struct 是 UCSI Driver 和 PD Controller 用来交换数据的。EC 和 PCH 通过 I2C、LPC、eSPI 等接口连接,因此 Data Package 也通过这些接口来回传递。
针对 CCI 和 Control 的数据结构如下
CCI 是 PPM 或 OPM 用以通知对方 Command 的执行状态。
注意:OPM 的不同命令是需要 PPM 根据实际状态及时返回对应 bit。如果 OPM 没有及时拿到正确的数据,可能会导致 hang机,UCSI driver reset 等异常。
Control 就是 OPM 向 PPM 发送的 command 以及必要参数。
02
BIOS 端
BIOS 不需要针对 UCSI 做过多处理。仅声明 UCSI Device,然后提供访问
EC 的 Method 即可。BIOS 需要做的一共三步:
需要注意的是,这个数据交换区域,可以用 IO 也可以用 ShareMemory。由于 OPM 对
命令执行有时间要求,推荐使用 ShareMemory,这样可以做到快速传递数据。另外,
BIOS 和 EC 还得商量一个数据通知的机制。一般方法如下:
- OPM 调用 BIOS 接口向 EC 写入数据后,BIOS 需要额外再向EC写一个值通知 EC 有数据来了。EC 需要轮询这个值,以判断是否有数据过来。
- PD Controller 端有事件更新后,EC 获取到需要发 Q_Event 以通知
BIOS 有事件发生了,以便通知到 OPM。
03
EC 端
EC 需要实现的就是,轮询指定位置的值,以判断 OPM 是否有命令写入。一旦发现有命令写入,EC 必须按不同 PD Controller 的规范通过 I2C 把
OPM 的命令传递给 PD Controller。
当 Type-C 接口有动作时,PD Controller 会通知 EC。EC 需要发 SCI 事件
以通知 OPM。
UCSI 中,OPM 和 EC 之间的通讯流程如下图。
04
PD 端
针对 PD Controller 端,需要接收 EC 转发过来的 UCSI 命令,然后按规范处理命令。如果有需要回复的数据,必须按照规范准备好数据被 EC 回读。
当然,不排除某些 PD Controller 并没有实现 UCSI 命令。此时就需要 EC 自行控制 PD Controller 以完成 UCSI 命令。针对某些命令,EC 还得根据需要读取 PD Controller 一些数据,组合成 UCSI Driver 需要读取的数据包。
显然这对 EC 并不友好,大量琐碎的数据在拼接时也会耗时,极易导致 UCSI Driver 未能按时获取必要数据,从而引起 UCSI Driver 异常或者系统异常。
04
HLK 测试
UCSI 仅仅是 OS 的一个附件功能,是否实现都不影响 Type-C 接口的任何功能。但是 UCSI 在系统下是一个虚拟设备,只要实现必须经过 HLK 测试。
UCSI HLK Test 有 55项测试,其中 50项测试需要替换 Test Driver。
一定要根据 Server 版本、DUT OS 版本选择正确的 Test Driver 版本。
Test Driver 替换步骤如下
如下 5 项测试,需要切换为 OS 自带的 UCSI Driver。
打开设备管理器,选择 Uninstall Device,勾选删除设备软件。然后重启即可恢复至 OS 自带 Driver。
然后按如下修改注册表:
修改注册表后,重启或者 Disable/Enable UCM-UCSI ACPI Device。然后即可开始测试上述 5项。
HLK 测试中,经常会有测试失败的项。大多情况都是 OPM 没有及时读取到正确的数据。一般 EC 端记录返回的数据,加以分析即可。
-
寄存器
+关注
关注
31文章
5310浏览量
119983 -
OPM
+关注
关注
0文章
4浏览量
7424 -
BIOS语言
+关注
关注
0文章
4浏览量
5032 -
DUT
+关注
关注
0文章
189浏览量
12336 -
Type-C接口
+关注
关注
1文章
144浏览量
20615
发布评论请先 登录
相关推荐
评论