windows USB 设备驱动开发- USB Type-C支持(二)

Microsoft 提供 USB Type-C® 连接器系统软件接口 (UCSI) 符合规范的 ACPI 传输驱动程序。 如果你的设计包含带有 ACPI 传输的嵌入式控制器,请在系统的 BIOS/EC 中实现 UCSI,并加载随机 UCSI 驱动程序(UcmUcsiCx.sys 和 UcmUcsiAcpiClient.sys)。

如果与 UCSI 兼容的硬件使用的是非 ACPI 传输,则需要写入 UCSI 客户端驱动程序。

用于支持带嵌入式控制器的系统的 USB Type C 组件的驱动程序

下面是具有嵌入式控制器的系统示例。

在前面的示例中,USB 角色切换在系统的固件中处理,USB 角色切换驱动程序堆栈未加载。 在另一个系统中,驱动程序堆栈可能无法加载,因为不支持双重角色。

在上图中,

  • USB 设备端驱动程序

USB 设备端驱动程序为功能/设备/外设提供服务。 USB 功能控制器类扩展支持 MTP(媒体传输协议),并使用 BC 1.2 充电器进行充电。 Microsoft 为 Synopsys USB 3.0 和 ChipIdea USB 2.0 控制器提供随机客户端驱动程序。 可以通过使用 USB 功能控制器客户端驱动程序编程接口,为功能控制器编写自定义客户端驱动程序。

SoC 供应商可能会为你提供用于进行充电器检测的 USB 功能下层筛选器驱动程序。 如果使用内置 Synopsys USB 3.0 或 ChipIdea USB 2.0 客户端驱动程序,则可以实现自己的筛选器驱动程序。

  • USB 主机端驱动程序

USB 主机端驱动程序是适用于与 EHCI 或 XHCI 兼容的 USB 主机控制器的一组驱动程序。 如果角色切换驱动程序枚举主机角色,则会加载驱动程序。 如果主机控制器不符合规范,则可以使用 USB 主机控制器扩展 (UCX) 编程接口编写自定义驱动程序。 

Windows 10 移动版不支持所有 USB 设备类。

  • USB 连接器管理器

Microsoft 提供带有 Windows (UcmUcsiCx.sys) 的 UCSI 随机驱动程序,它实现了在 USB Type-C 连接器系统软件接口规范中定义的功能。 该规范介绍了 UCSI 的功能,并说明了硬件组件设计师、系统组装商和设备驱动程序开发人员的寄存器和数据结构。

此驱动程序适用于具有嵌入式控制器的系统。 此驱动程序是 Microsoft 提供的 USB 连接器管理器类扩展驱动程序 (Ucmcx.sys) 的客户端。 驱动程序处理任务(例如,启动对固件的请求)以更改数据或电源角色,并获取向用户提供故障排除消息所需的信息。

Windows 所需的 UCSI 命令

有关所有 UCSI 实现中所需的命令,请参阅 UCSI 规范。除了标记为“ 必需”的命令外,Windows 还需要以下命令:

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE:系统或控制器必须支持SET_NOTIFICATION_ENABLE中的以下通知:
  • 1. 支持的提供程序功能更改:协商的电源级别更改;
  • 2. GET_CONNECTOR_STATUS:系统或控制器必须在GET_CONNECTOR_STATUS内支持以下连接器状态更改:支持的提供程序功能更改和协商的电源级别更改;
     
适用于 UCSI 2.0 及更高级别的 UCM-UCSI ACPI 设备

从 Windows 11 版本 22H2 9 月更新开始,Windows UCM-UCSI ACPI 设备驱动程序支持 UCSI 规范版本 2.0 和 2.1。 UCSI 规范 2.0 对其数据结构的内存映射进行了中断性变更,如 UCSI 规范表 3-1 数据结构所定义。 为了保持向后兼容性,Windows 要求规范版本 2.0 或更高版本的 UCSI PPM 在 ACPI 固件中的 UCM-UCSI ACPI 设备 下实现以下_DSM函数,并返回非零值以指示 UCSI OPM 应遵循报告的 UCSI 规范版本。

  • Arg0:UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1:修订 ID = 0
  • Arg2:函数索引 = 5
  • Arg3: (未使用空包)

返回值:

 备注 对于 UCM-UCSI ACPI 设备,这是现有 _DSM 方法中的一个新函数。 此_DSM方法的其他功能应已根据 UCSI 文档的 Intel BIOS 实现实现 。 函数 0(返回所有受支持函数的位掩码)也应相应地更新。

UCSI 的示例流

本部分中给出的示例描述了 USBType C 硬件/固件、UCSI 驱动程序和操作系统之间的交互。

DRP 角色检测

1.USB Type C 硬件/固件检测到设备附加事件,Windows 10 系统 DRP 系统最初成为 UFP 角色。
a.该固件发送指示连接器中的更改的通知。
b.UCSI 驱动程序发送GET_CONNECTOR_STATUS请求。
c.固件响应其连接状态 = 1,连接器合作伙伴类型 = DFP。 
2.USB 函数堆栈中的驱动程序响应枚举。
3.USB 连接器管理器类扩展可识别 USB 功能堆栈已加载,因此系统处于错误状态。 它通知 UCSI 驱动程序向固件发送“设置 USB 操作角色”和“设置电源方向角色”请求。
4.USB Type-C 硬件/固件使用 DFP 启动角色交换操作。

检测充电器不匹配错误条件

1.USB TypeC 硬件/固件检测到已连接充电器,并协商默认电源协定。 它还观察到充电器没有为系统提供足够的电源。

2.USB Type 硬件/固件设置了缓慢充电速度。

a.该固件发送指示连接器中的更改的通知。
b.UCSI 驱动程序发送GET_CONNECTOR_STATUS请求。
c.固件响应的连接状态 = 1,连接器合作伙伴类型=DFP,电池充电状态 = 慢/滴答。
3.USB 连接器管理器类扩展向 UI 发送通知,以显示充电器不匹配故障排除消息。

如何测试 UCSI

可通过多种方式测试 UCSI 实现。 要测试 UCSI BIOS/EC 实现中的单个命令,请使用 MUTT 软件包中提供的 UCSIControl.exe。 要测试完整的 UCSI 实现,请使用 Windows Hardware Lab Kit (HLK) 中可找到的 UCSI 测试,以及Type C 手动互操作过程中的步骤。

UCSIControl.exe

可以使用 UCSIControl.exe 在 UCSI BIOS/EC 实现中测试各个命令。 此工具使你可以通过 UCSI 驱动程序将 UCSI 命令发送到固件。 它要求加载并运行驱动程序,同时还启用了驱动程序的测试接口。 默认情况下,不启用此接口,以防止零售系统上未经授权的用户访问它。

  1. 在设备管理器 (devmgmt.msc) 中找到名为“UCSI USB 连接器管理器” 的设备节点。 节点位于“通用串行总线控制器” 类别下。
  2. 选择并按住(或右键单击)该设备,然后选择“属性”并打开“详细信息”选项卡。
  3. 从下拉列表中选择“设备实例路径” ,并记下属性值。
  4. 打开注册表编辑器 (regedit.exe)。
  5. 导航到此项下的设备实例路径。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<device-instance-path>\Device Parameters
  6. 创建一个名为“TestInterfaceEnabled” 的 DWORD 值,并将该值设置为 0x1。
  7. 通过在“设备管理器”中的设备节点上选择“禁用” 选项,然后选择“启用” 来重启设备。 或者,你可以重启电脑。

可以通过运行 UcsiControl.exe /? 查看帮助。

下面是常用命令:

常见问题解答:

Windows 版本

  • Windows 10 桌面版(家庭版、专业版、企业版和教育版)
  • Windows 10 移动版

USB Type-C 连接器功能对称和可逆设计

  • 连接器是 对称的。 电缆的两端都有一个 USB Type-C 连接器,允许主机和功能设备使用 USB Type-C 连接器。 下面是比较连接器的图像:
  • 连接器设计为 可逆。 传统的连接器必须“右向上”连接。 使用可逆设计,连接器可以翻转。

支持所有 USB 设备速度

连接器可以支持低速、全速、高速、超高速 (包括 SS+) 的 USB 设备。

备用模式

连接器可以支持 备用模式。 备用模式功能允许非 USB 协议通过 USB 电缆运行,同时保留 USB 2.0 和充电功能。 目前,最常用的备用模式是 DisplayPort/DockPort 和 MHL。

DisplayPort/DockPort

此备用模式允许用户通过 USB 连接器将音频/视频投影到外部 DisplayPort 显示器。

MHL

MHL 备用模式允许用户将视频/音频投影到支持 MHL 的外部显示器。

广告牌错误消息

如果用户连接附加的电脑或手机不支持的 USB Type-C 备用模式设备或适配器,则设备或适配器可以公开包含错误条件相关信息的 Billboard 设备,以帮助用户解决问题。

增加的功率限制

具有 USB Type-C 连接器的系统具有更高的功率限制,最多可支持 5V、3A、15W。

此外,连接器还可以选择支持 USB 供电 OEM 定义的 电源传送 功能。 如果连接器支持供电,USB Type-C 系统可以是电源提供商或使用者,支持高达 100W。

支持 USB 双重角色

外围设备可以使用 USB Type-C 连接器连接到移动系统,从而将移动系统的传统角色从功能更改为主机。 当同一系统连接到电脑时,系统将恢复函数的角色,而电脑将成为主机。

需要协商备用模式的操作系统输入,例如 DP 2 通道与 DP 4 通道

否。 操作系统 (或任何 Microsoft 提供的软件组件) 在选择备用模式方面不起任何作用。 该决策由连接器的驱动程序做出,特别是 USB 连接器管理器 (UCM) 客户端驱动程序。 驱动程序通过使用硬件接口与连接器的固件通信来执行此操作。

使用 Type-C 和 PD 预操作系统充电

启用 OS 前充电由 OEM 拥有。 可以选择不实现 USB 电源传送,并在 USB Type-C 电源级别充电,直到启动到操作系统。

当手机是 USB 主机时为手机充电,以启用 Continuum 等停靠方案

以下是需要考虑的一些事项:

  • 必须实现 USB 电源传送,以便可以独立交换电源和数据角色。
  • 扩展坞的上游端口应实现为 USB Type C规范中定义的充电 UFP。第 4.8.4 部分,版本 1.1。
  • 如果扩展坞解析为 DFP,则应请求DR_Swap;如果解析为 UFP,则应请求PR_Swap。

初始 DFP 是电源,因此必须更改数据角色。 初始 UFP 是电源接收器,因此必须更改电源角色。 可以在这些回调函数的实现中执行这些操作:

Windows 10 移动版支持 USB 广告牌设备

是的,如果你将手机连接到支持 USB 广告牌的设备,根据 广告牌设备的 USB 设备类定义规范,用户会收到通知。 不需要 USB 连接器管理器 (UCM) 客户端驱动程序来处理通知。 如果系统无法识别备用模式,请不要进入该模式。

在早期版本的 Windows 上支持 USB Type-C

Windows 10之前的 Windows 版本不支持 USB Type-C。

早期版本的 Windows 上的 UCSI 支持

Windows 10之前的 Windows 版本不支持 UCSI。

如何测试 UCSI 的实现

若要测试实现,请遵循 USB Type-C 手动互操作性测试过程中提供的准则。 我们建议在 Windows Hardware Lab Kit (HLK) for Windows 10 中运行 USB 测试。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

不同错误的条件和 UI

Windows 10可以显示一组 USB Type C错误消息,以帮助告知用户 USB Type-C 硬件和软件的不同组合的限制。 例如,如果连接到 USB Type-C 连接器的充电器不够强大、与系统不兼容或连接到非充电端口,则用户可能会收到“设备充电缓慢”消息。 

将非 PD 端口连接到 PD 提供程序,并将 PD 使用者连接到非 PD 提供程序的系统

非 PD 端口尝试使用 USB Type-C 当前级别为系统充电。 

将 Thunderbolt、SuperMHL 或 PCI Express 连接到不支持这些功能的电脑

备用模式功能允许非 USB 协议 ((如 Thunderbolt、SuperMHL) )通过 USB 电缆运行,同时保留 USB 2.0 和充电功能。 如果用户连接运行Windows 10的附加电脑或手机不支持的 USB Type-C 备用模式设备或适配器,则会检测到错误情况,并向用户显示一条消息。

  • 如果设备或适配器公开了广告牌设备,则用户会看到有关错误条件的信息,以帮助解决问题。 Windows 10为广告牌设备提供内置驱动程序,并通知用户发生了错误。
  • 用户可能会看到错误通知“尝试改善 USB 连接”。 
  • 为了获得最佳结果,请确保电脑、手机或电缆满足备用模式设备或适配器的要求。

Windows 中通过 USB Type-C 对 MTP 的支持和限制

桌面版Windows 10支持发起方角色中的 MTP;Windows 10 移动版支持响应者角色中的 MTP。

下游设备和集线器如何与 USB 连接器管理器 (UCM)

UCM 是自己的设备堆栈。 Windows 10 USB Type-C 支持包括所需的管道,以确保不同的类驱动程序知道如何与不同的 USB Type-C 连接器进行通信。 若要获得对 USB Type-C 的Windows 10支持,必须插入 UCM 设备堆栈。

HLK 测试的 USB Type C MUTT 要求

适用于 Windows 10 的 Windows HLK 包含 USB 主机和功能控制器的测试。 若要测试系统,请使用 USB C-A 适配器。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

Microsoft 支持在同一Windows 10 SKU 之间传输 P2P 数据

这不是有效的连接。

  • 不能连接运行桌面版Windows 10的两台电脑。
  • 无法连接运行Windows 10 移动版的两个移动设备。

如果用户尝试建立此类连接,Windows 会显示一条错误消息。 

唯一有效的连接是在 Windows Mobile 设备和 Windows 桌面设备之间。

UCM 类扩展 (UcmCx) 与 PMIC 或电池驱动程序通信以获取/设置充电状态

在软件辅助充电平台上,UcmCx 与 PMIC 和电池子系统通信。 客户端驱动程序可以通过硬件接口与硬件通信来确定充电级别。 在硬件辅助平台上,嵌入式控制器负责充电。 UcmCx 不参与该过程。

HLK 对 USB Type-C 的支持

在适用于 Windows 10 的 Windows HLK 中,没有特定于 USB Type C 的测试。 建议在 Windows HLK 中运行 USB 测试以Windows 10。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

UCSI

USB Type-C 连接器系统软件接口 (UCSI) 规范 介绍了 USB Type-C 连接器系统软件接口 (UCSI) 的功能,并介绍了硬件组件设计人员、系统构建者和设备驱动程序开发人员的寄存器和数据结构。

Microsoft 提供具有 Windows 的内置驱动程序(UcmUcsi.sys),可实现规范定义的功能。 此驱动程序适用于具有嵌入式控制器的系统。

测试在 Windows 10 上运行的 UCSI 实现

建议在 Windows HLK 中运行 USB 测试以Windows 10。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

在 Windows 10 上测试 UCMCx 客户端驱动程序

建议在 Windows HLK 中运行 USB 测试以Windows 10。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

UCM 类扩展处理的 VBus/VConn 控制和角色切换操作

UCM 类扩展可能会从操作系统获取更改连接器的数据或电源方向的请求。 当它收到这些请求时,它会调用客户端驱动程序实现 的 EVT_UCM_CONNECTOR_SET_DATA_ROLE 和 EVT_UCM_CONNECTOR_SET_POWER_ROLE 回调函数 (如果连接器实现 PD) 。 在实现中,客户端驱动程序应控制 VBUS 和 VCONN 引脚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/798608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】:重定向和缓冲区

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来关于重定向和缓冲区的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

海事无人机解决方案

海事巡察 海事巡察现状 巡查效率低下&#xff0c;存在视野盲区&#xff0c;耗时长&#xff0c;人力成本高。 海事的职能 统一管理水上交通安全和防治船舶污染。 管理通航秩序、通航环境。负责水域的划定和监督管理&#xff0c;维护水 上交通秩序&#xff1b;核定船舶靠泊安…

Spring Boot集成groovy快速入门Demo

1.什么是groovy&#xff1f; Groovy 是构建在 JVM 上的一个轻量级却强大的动态语言&#xff0c;它结合了 Python、Ruby 和 Smalltalk 的许多强大的特性。 Groovy 就是用 Java 写的&#xff0c;Groovy 语法与 Java 语法类似&#xff0c;Groovy 代码能够与 Java 代码很好地结合&…

QQ频道导航退出

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

C#中的MD5摘要算法与哈希算法

文章目录 一、哈希算法基础二、MD5 算法原理三、MD5摘要算法四、哈希算法五、C#实现示例MD5算法示例哈希算法示例字符串MD5值对比 六、总结 一、哈希算法基础 哈希算法是一种单向密码体制&#xff0c;它将任意长度的数据转换成固定长度的字符串。这种转换是不可逆的&#xff0…

Java二十三种设计模式-工厂方法模式(2/23)

工厂方法模式&#xff1a;设计模式中的瑞士军刀 引言 在软件开发中&#xff0c;工厂方法模式是一种常用的创建型设计模式&#xff0c;它用于处理对象的创建&#xff0c;将对象的实例化推迟到子类中进行。这种模式不仅简化了对象的创建过程&#xff0c;还提高了代码的可维护性…

WordPress:无法创建新文章?创建新帖子时候页面空白

wordPress中我们新建文章的时候&#xff0c;会遇到页面空白&#xff0c;这个问题是怎么导致呢&#xff1f;我们可以打开F12开发者模式看下报错信息&#xff0c;这是一个警告信息 Warning: Creating default object from empty value in /pub 到数据库 wp_posts中查看生成了很…

SpringBoot新手快速入门系列教程十一:自动生成API文档,Springboot3.x集成SpringDoc

本次项目我们用Maven来做&#xff0c;最近发现gradle其实很多项目的支持比较差&#xff0c;所以项目还是用Maven来新建项目。对比了市面上的几种API生成第三方库&#xff0c;只有springdoc 是能够按照文档就能部署出来的。 官网&#xff1a; OpenAPI 3 Library for spring-bo…

Mac电脑下运行java命令行出现:错误: 找不到或无法加载主类

mac 电脑 问题复现 随手写了一个main方法&#xff0c;想用命令行操作 进入 BlockDemo.java 所在目录&#xff1a; wnwangnandeMBP wn % cd /Users/wn/IdeaProjects/test/JianZhiOffer/src/main/java/com/io/wn wnwangnandeMBP wn % ls -l total 16 -rw-r--r-- 1 wangnan …

Qt文件下载工具

在Qt中实现文件下载功能&#xff0c;通常可以通过多种方式来完成&#xff0c;包括使用 QNetworkAccessManager 和 QNetworkReply 类&#xff0c;或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法&#xff1a; 方法1&#xff1a;使用 QNetworkAccessManager 和…

芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

tessy 集成测试:小白入门指导手册

目录 1,创建集成测试模块且分析源文件 2,设置测试环境 3,TIE界面设置相关函数 4,SCE界面增加用例 5,编辑数据 6,用例所对应的测试函数序列 7,添加 work task 函数 8,为测试场景添加函数 9,为函数赋值 10,编辑时间序列的数值 11,执行用例 12,其他注意事项…

Linux 下使用Docker安装redis

redis&#xff1a; 是一个高性能的&#xff0c;键值对的&#xff0c;将数据存储到内存中的非关系型数据库&#xff08;nosql数据库 not only sql&#xff09; 高性能&#xff1a;数据存在内存中&#xff0c;直接访问内存 键值对&#xff1a;新闻id&#xff08;键&#xff09…

C语言 | Leetcode C语言题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {struct TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor-&g…

51单片机6(P0P1P2P3结构框架图)

一、GPIO结构框架图与工作原理 1、接下来我们介绍一下这个GPIO结构框图和工作原理&#xff0c;我们使用51单片机的GPIO分为了P0&#xff0c;P1&#xff0c;P2&#xff0c;P3这四组端口&#xff0c;下面我们就分别来介绍这四组端口它的一个内部结构&#xff0c;只有了解了内部的…

windows环境下基于3DSlicer 源代码编译搭建工程开发环境详细操作过程和中间关键错误解决方法说明

说明: 该文档适用于  首次/重新 搭建3D-Slicer工程环境  Clean up(非增量) 编译生成 1. 3D-slicer 软件介绍 (1)3D Slicer为处理MRI\CT等图像数据软件,可以实行基于MRI图像数据的目标分割、标记测量、坐标变换及三维重建等功能,其源于3D slicer 4.13.0-2022-01-19开…

好用的文献翻译软件

自从我开始使用七星文献翻译阅读器&#xff08;https://lestore.lenovo.com/detail/L116395&#xff09;&#xff0c;我的学术世界仿佛被打开了一扇全新的大门。这款软件不仅承载了让知识无国界的宏伟使命&#xff0c;更以其实惠的价格和强大的功能&#xff0c;成为了我学习和研…

【操作系统】进程管理——死锁(个人笔记)

学习日期&#xff1a;2024.7.13 内容摘要&#xff1a;死锁的概念和三大处理策略 目录 死锁 死锁的概念 死锁、饥饿和死循环的区别 死锁产生的必要条件 死锁的处理策略&#xff1a;预防、避免和解除 预防死锁 破坏互斥条件 破坏不剥夺条件 破坏请求和保持条件 破坏循…

【从0到1进阶Redis】主从复制 — 主从机宕机测试

上一篇&#xff1a;【从0到1进阶Redis】主从复制 测试&#xff1a;主机断开连接&#xff0c;从机依旧连接到主机的&#xff0c;但是没有写操作&#xff0c;这个时候&#xff0c;主机如果回来了&#xff0c;从机依旧可以直接获取到主机写的信息。 如果是使用命令行&#xff0c;来…

STM32MP135裸机编程:唯一ID(UID)、设备标识号、设备版本

0 资料准备 1.STM32MP13xx参考手册1 唯一ID&#xff08;UID&#xff09;、设备标识号、设备版本 1.1 寄存器说明 &#xff08;1&#xff09;唯一ID 唯一ID可以用于生成USB序列号或者为其它应用所使用&#xff08;例如程序加密&#xff09;。 &#xff08;2&#xff09;设备…