windows USB 设备驱动开发-开发Type C接口的驱动程序(一)

如果 USB Type-C 系统未实现 PD 状态机,或者它实现了状态机,但不支持通过非 ACPI 传输 UCSI,则需要为连接器编写驱动程序。 如果存在,可以加载 Microsoft 提供的 UCSI 驱动程序。

建议的解决方案

下表建议基于硬件或固件功能的解决方案:

体系结构:Windows 系统的 USB Type C 设计

USB Type C 系统的典型硬件设计以及支持硬件组件的 Microsoft 提供的驱动程序。 这部分适用于使用 USB Type C 连接器开发系统的 OEM。

  • 使用 USB Type-C 的 USB 双角色功能
  • 使用 USB Type-C 电流级别和供电 2.0 加快充电速度
  • 使用备用模式和有线停靠体验 Display-Out 功能。
用于支持 USB Type C 组件的驱动程序


在上图中的部分讲解如下:

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) 编程接口来写入自定义驱动程序。并非所有 USB 设备类在 Windows 10 移动版上都受支持。

USB 角色切换驱动程序 (URS)

可以将系统设计为双角色 USB 端口需要 Windows 将其配置为主机或功能模式。 这些设计需要使用 USB 角色开关 (URS) 驱动程序堆栈。

URS 驱动程序根据平台中的硬件事件管理连接器、主机或功能的当前角色,以及相应设备端或主机端驱动程序的加载和卸载。 Microsoft 为 Synopsys USB 3.0 和 ChipIdea USB 2.0 控制器提供随机客户端驱动程序。 可以使用 USB 双角色控制器驱动程序编程接口编写角色切换客户端驱动程序。 若要激活角色切换驱动程序,必须对 ACPI 表进行更改。 

在具有 USB micro-AB 连接器的系统上,根据连接器中的 ID 引脚做出此决定。 客户端驱动程序使用分配给它的中断资源执行 ID 引脚检测。

在具有 USB Type C 连接器的系统上,根据 CC 引脚做出决策。 连接器的客户端驱动程序执行 CC 检测,并将该信息转发到角色切换驱动程序。

USB 连接器管理器 (UCM)

这组驱动程序管理 USB Type-C 连接器的所有方面。 如果系统通过 ACPI 实现符合 UCSI 标准的嵌入式控制器,请使用 Microsoft 提供的 UCSI 驱动程序。 否则,为非 ACPI 传输 编写 UCSI 客户端驱动程序 。

如果硬件不符合 UCSI,则应将作为客户端的 USB Type C 连接器驱动程序写入 UCM 类扩展。 它们共同管理 USB Type-C 连接器和连接器驱动程序的预期行为。

如果要编写驱动程序,USB 连接器管理器类扩展遵循 WDF 类扩展-客户端驱动程序模型。 客户端驱动程序与硬件和类扩展通信,以处理 CC 检测、PD 消息传送、复用和 VBus/VConn 控制等任务,并为电源传输和备用模式选择策略。 类扩展将客户端驱动程序报告的信息传达给操作系统。 例如,CC 检测结果用于配置角色切换驱动程序;USB Type C PD 电源信息用于确定系统应充电的级别。 客户端驱动程序管理 USB Type C 和 PD 状态机。 客户端驱动程序可以将某些任务委托给其他驱动程序,例如,Mux 可能由另一个驱动程序控制。 若要编写客户端驱动程序,请使用 USB Type-C 连接器驱动程序编程接口。

USB Type C 端口控制器

Type-C 端口控制器接口类扩展 (UcmTcpciCx.sys) 是 Microsoft 提供的 USB 连接器管理器的扩展,它允许 OS 与不实现 PD 状态机的连接器 (TCPM) 一样运行。 UcmTcpciCx 客户端驱动程序允许软件 TCPM 控制硬件并实时获取其状态。

仲裁驱动

此驱动程序由 Microsoft 提供,用于Windows 10 移动版。 驱动程序充当多个充电源的仲裁程序。 USB 连接器管理器将 USB Type-C 和 PD 充电源信息报告给 CAD,CAD 会从该信息和由 USB 设备端驱动程序执行的 BC1.2 充电器检测中进行选择(如果适用)。 然后,CAD 报告最适合用于电池子系统的充电源。

电池驱动程序

类驱动程序定义系统中电池的整体功能,并与电源管理器进行交互。 微型类驱动程序处理特定于设备的功能,例如添加和移除电池,以及跟踪其容量和充电。 微类驱动程序导出类驱动程序调用的例程,以获取有关其控制的设备的信息。

在 USB Type C Windows 系统上启动功能控制器

功能控制器的驱动程序通知操作系统其 USB Type-C 连接器支持的充电级别,并通知电池子系统何时可以开始充电,以及设备可以消耗的最大电流量。

本主题假定函数控制器在任何给定时间管理单个连接器 (UFP) 。

1. 加载 USB 设备端驱动程序
有两个驱动程序用于管理函数控制器的操作。 该对是 Microsoft 提供的 USB 函数类扩展及其客户端驱动程序。 类扩展将客户端驱动程序发送到操作系统的信息报告。 客户端驱动程序使用硬件接口与硬件通信。 

  • 如果系统使用 ChipIdea 和 Synopsys 控制器。
  1. 为 ChipIdea 和 Synopsys 控制器加载 Microsoft 提供的内置客户端驱动程序。
  2. 编写一个较低的筛选器驱动程序,该驱动程序在连接充电器时获取附加/分离事件。 驱动程序确定充电器的类型和配置属性。 它还可以检测 BC1.2 规范定义的 USB 充电端口。 充电信息将传递给类扩展,以便它可以将其报告给) 的仲裁驱动程序 (CAD.sys。 
  • 如果系统使用自定义控制器,请编写客户端驱动程序。 BC1.2 检测逻辑在客户端驱动程序中实现。

2.修改系统 ACPI,以向功能控制器驱动程序指示连接器是 USB Type C 连接器
这是通过 ACPI 6.0 规范中定义的 ACPI 方法完成的​​​​​​​_UPC (USB Port Capabilities)

使用 ACPI 6.0 中定义的新值来指示正确类型的 USB Type-C 连接器,例如“Type-C USB2”和“Type-C USB2 and SS with switch”。 函数驱动程序将此信息传达给 CAD.sys,以便它使用特定于 USB Type C 的仲裁逻辑来确定适当的充电源。

Device (UFN0)
{...Name (_UPC, Package(){0x1,    // Connectable0x9,    // Type-C USB2 and Type-C USB2 and SS with switch0x0,    // Reserved0x0     // Reserved})Name (_CRS, ResourceTemplate(){...})...
为 USB Type C Windows 系统启动双角色控制器

USB 角色切换驱动程序 (URS) 是一组 WDF 类扩展及其客户端驱动程序,用于处理双角色控制器的角色切换功能。 如果系统具有双角色控制器,则可以根据连接到系统 USB Type-C 连接器的伙伴端口的设备切换系统角色。 这允许有趣的方案,如有线停靠。

系统可以设计为双角色 USB 控制器需要 Windows 才能将其配置为主机或功能模式。 这些设计使用 USB 角色交换机堆栈。 如果系统不使用 Synopsys 或 ChipIdea 双角色控制器,则需要为系统的双角色控制器编写 USB 角色切换客户端驱动程序。

 系统可以设计为双角色 USB 端口需要 Windows 才能将其配置为主机或函数模式。 这些设计使用 USB 角色交换机堆栈。 如果系统不使用 Synopsys 双角色控制器,则需要为系统的双角色控制器编写 USB 角色切换客户端驱动程序。

客户端驱动程序处理硬件事件并将其报告给类扩展。 如果发生角色切换硬件事件,URS 将决定该角色,从而加载该角色的驱动程序。 如果控制器处于主机角色,则加载 USB 主机端驱动程序 ;对于函数角色,将加载 设备端驱动程序 。

在使用 USB micro-AB 连接器的系统上,双角色控制器的客户端驱动程序使用分配给它的中断资源,根据连接器中的 ID 引脚做出决策。 在具有 USB Type-C 连接器的系统上,此决定由连接器的客户端驱动程序做出。 该驱动程序根据 CC 引脚确定角色,并将结果报告给 USB 连接器管理器 (UCM) ,后者然后将结果发送到角色切换驱动程序。

1. 在系统 ACPI 中启用 URS 驱动程序

若要使用 URS,必须进行 ACPI 修改。 将 USB 设备端驱动程序 加载的设备替换为 URS 必须加载的设备。请确保删除中断资源。 USB Type-C 不需要这样做。

2. 为双角色控制器驱动程序加载 USB 角色切换驱动程序

  • 如果系统使用 ChipIdea 和 Synopsys 控制器,请加载 Microsoft 为 ChipIdea 和 Synopsys 控制器提供的内置客户端驱动程序。

若要加载驱动程序,必须创建驱动程序安装包。 INF 文件必须具有 Include-Needs 指令,该指令引用受支持控制器的内置 INF。 内置 INF 已包含其他控制器的硬件 ID。 如果双角色控制器的硬件 ID 不是内置 INF 中的硬件 ID 之一,则此步骤是必需的。 请与 SoC 供应商联系确认具体事宜。

  • 如果系统使用自定义控制器,请编写角色切换客户端驱动程序。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在vs code中用npm run serve运行项目报错

在vs code中用npm run serve运行项目报错 报错为: npm ERR! code ENOENT npm ERR! syscall open npm ERR! path C:\Users\Administrator\Desktop\project_shop/package.json npm ERR! errno -4058 npm ERR! enoent ENOENT: no such file or directory, open ‘C:\Us…

sourcetree中常用功能使用方法及gitlab冲突解决

添加至缓存:等于git add 提交:等于git commit 拉取/获取:等于git pull ,在每次要新增代码或者提交代码前需要先拉取一遍服务器中最新的代码,防止服务器有其他人更新了代码,但我们自己本地的代码在我们更新前跟服务器不…

docker应用:搭建云手机

简介:近来慵懒,身体懈怠良多,思来想去随手看点小攻略以宽慰不懈怠的心。云手机Cloudphone,就是将云计算技术运用于网络终端服务,通过云服务器实现云服务的手机。其实就是深度结合了网络服务的智能手机,这类…

使用Python的Turtle库绘制太极,用turtle演绎中国风!

引言 在编程领域,图形绘制是一项既实用又有趣的技能。Python的turtle模块以其易用性和可视化特性成为了入门级图形编程的理想选择。本文将介绍如何使用turtle模块结合多线程技术,同时绘制一个太极,以此来探索图形绘制和并发编程的概念。 Tu…

Java实战中如何使用多线程(线程池)及其为什么使用?

这个话题在入行之前就想过很多次,很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话,既没有案例也没有什么公式去证明,但是面试中总是被问到,也没有实战经历,所以面试时一问到多线程的东西就无…

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能

PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备,支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展,能够与医院HIS、集成平台的有效集成和融合,帮助医院实现了全院医学影像…

分布式 I/O 系统 BL200 Modbus TCP 耦合器

BL200 耦合器是一个数据采集和控制系统,基于强大的 32 位微处理器设计,采用 Linux 操作系统,支持 Modbus 协议,可以快速接入现场 PLC、SCADA 以及 ERP 系统, 内置逻辑控制、边缘计算应用,适用于 IIoT 和工业…

Github 2024-07-20 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Rust: 构建可靠高效软件的开源项目 创建周期:5064 天开发语言:Rust协议类型:OtherStar数量:92978 个Fork数量:1…

【漏洞复现】Next.js框架存在SSRF漏洞(CVE-2024-34351)

0x01 产品简介 ZEIT Next.js是ZEIT公司的一款基于Vue.js、Node.js、Webpack和Babel.js的开源Web应用框架。 0x02 漏洞概述 ZEIT Next.js 13.4版本至14.1.1之前版本存在代码问题漏洞,该漏洞源于存在服务器端请求伪造 (SSRF) 漏洞 0x03 搜索引擎 body"/_nex…

【BUG】已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported

已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported 目录 已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported 【常见模块错误】 错误原因 解决办法: 欢迎来到英杰社区https://bbs.csdn.net/…

MyBatis框架学习笔记(四):动态SQL语句、映射关系和缓存

1 动态 SQL 语句-更复杂的查询业务需求 1.1 动态 SQL-官方文档 (1)文档地址: mybatis – MyBatis 3 | 动态 SQL (2)为什么需要动态 SQL 动态 SQL 是 MyBatis 的强大特性之一 使用 JDBC 或其它类似的框架,根据不同条…

【瑞吉外卖 | day07】移动端菜品展示、购物车、下单

文章目录 瑞吉外卖 — day71. 导入用户地址簿相关功能代码1.1 需求分析1.2 数据模型1.3 代码开发 2. 菜品展示2.1 需求分析2.2 代码开发 3. 购物车3.1 需求分析3.2 数据模型3.3 代码开发 4. 下单4.1 需求分析4.2 数据模型4.3 代码开发 瑞吉外卖 — day7 移动端相关业务功能 —…

华为USG6000V防火墙NAT智能选举

目录 一、拓扑图 二、要求 三、配置思路及方法 要求1:通过多对多的NAT实现上网功能 思路:基础IP地址配置按照之前的进行配置,接着在策略里配置多对多的NAT 要求2:分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的…

uniapp中给data中的变量赋值报错

排查了一上午,原本以为是赋值的这个变量有一个键名是空字符串的问题,后来发现是因为在data中定义变量是写的是{},如果写成null就不会报错了,具体原因不清楚为什么

Spark中的JOIN机制

Spark中的JOIN机制 1、Hash Join概述2、影响JOIN的因素3、Spark中的JOIN机制3.1、Shuffle Hash Join3.2、Broadcast Hash Join3.3、Sort Merge Join3.4、Cartesian Product Join3.5、Broadcast Nested Loop Join4、Spark中的JOIN策略5、Spark JOIN机制与策略总结5.1、Spark中的…

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决:WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武…

C++初学者指南-5.标准库(第一部分)--标准库查找算法

C初学者指南-5.标准库(第一部分)–标准库查找算法 文章目录 C初学者指南-5.标准库(第一部分)--标准库查找算法查找/定位一个元素findfind_iffind_if_notfind_last / find_last_if / find_last_if_notfind_first_of 查找范围内的子范围 search find_endstarts_withends_with 找到…

1个Xpath定位可以在Web页面查找到多个元素Selenium

1个Xpath定位可以在Web页面查找到多个元素Selenium//input[id\"transactionId\"] 打开Web页面, 点击F12可以看到压面 点击Ctrl F 可以点图如下图的输入框,输入xpath,看右侧可以找到3个对应的元素 点击Ctrl F 点击Ctrl F 点…

uniapp开发钉钉小程序流程

下载开发工具 1、小程序开发工具 登录钉钉开发平台,根据自己的需求下载合适的版本,我这里下载的是Windows (64位)版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …

最新!CSSCI(2023-2024)期刊目录公布!

【SciencePub学术】据鲁迅美术学院7月16日消息,近日,南京大学中国社会科学研究评价中心公布了中文社会科学引文索引(CSSCI)(2023—2024)数据库最新入选目录。 C刊一般指CSSCI来源期刊,即南大核心…